Merge branch 'master' of github.com:OpenELEC/OpenELEC.tv into openelec-next

Conflicts:
	packages/linux/meta
	packages/linux/patches/linux-3.2.28-071-silence_i915_agp-module-0.1.patch
	packages/linux/patches/linux-3.2.28-212-mantis_stb0899_faster_lock.patch
	packages/linux/patches/linux-3.2.30-071-silence_i915_agp-module-0.1.patch
	packages/linux/patches/linux-3.2.30-081-drm_cea_modes.patch
	packages/linux/patches/linux-3.2.30-201-add_Anysee_T2C_support-0.1.patch
	packages/linux/patches/linux-3.2.30-202-add_HVR930C_support-0.1.patch
	packages/linux/patches/linux-3.2.30-210-add_DVBSky_support.patch
	packages/linux/patches/linux-3.2.30-211-add_TeVii_s471_support.patch
	packages/linux/patches/linux-3.2.30-212-mantis_stb0899_faster_lock.patch
	packages/linux/patches/linux-3.2.30-213-cinergy_s2_usb_r2.patch
	packages/linux/patches/linux-3.2.30-251-acpi-5.0_support.patch
	packages/linux/patches/linux-3.2.30-920_add_rtl8168.patch
	packages/linux/patches/linux-3.2.30-990-xc5000_add_support_for_get_if_frequency.patch
	packages/linux/patches/linux-3.5.4-071-silence_i915_agp-module-0.1.patch
	packages/linux/patches/linux-3.5.4-212-mantis_stb0899_faster_lock.patch
This commit is contained in:
Stephan Raue 2012-09-25 18:39:22 +02:00
commit 63565f4d22
140 changed files with 33720 additions and 478 deletions

View File

@ -19,7 +19,7 @@
################################################################################
PKG_NAME="alsa-lib"
PKG_VERSION="1.0.25"
PKG_VERSION="1.0.26"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -19,7 +19,7 @@
################################################################################
PKG_NAME="alsa-plugins"
PKG_VERSION="1.0.25"
PKG_VERSION="1.0.26"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -19,7 +19,7 @@
################################################################################
PKG_NAME="alsa-utils"
PKG_VERSION="1.0.25"
PKG_VERSION="1.0.26"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -19,7 +19,7 @@
################################################################################
PKG_NAME="sqlite"
PKG_VERSION="autoconf-3071300"
PKG_VERSION="autoconf-3071400"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="PublicDomain"

40
packages/devel/readline/build Executable file
View File

@ -0,0 +1,40 @@
#!/bin/sh
################################################################################
# This file is part of OpenELEC - http://www.openelec.tv
# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
#
# This Program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This Program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenELEC.tv; see the file COPYING. If not, write to
# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
# http://www.gnu.org/copyleft/gpl.html
################################################################################
. config/options $1
cd $PKG_BUILD
mkdir -p .build-target && cd .build-target
../configure --host=$TARGET_NAME \
--build=$HOST_NAME \
--prefix=/usr \
--exec-prefix=/usr \
--sysconfdir=/etc \
--datadir=/usr/share \
--enable-shared \
--disable-static \
--with-curses \
--without-purify
make
$MAKEINSTALL

32
packages/devel/readline/install Executable file
View File

@ -0,0 +1,32 @@
#!/bin/sh
################################################################################
# This file is part of OpenELEC - http://www.openelec.tv
# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
#
# This Program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This Program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenELEC.tv; see the file COPYING. If not, write to
# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
# http://www.gnu.org/copyleft/gpl.html
################################################################################
. config/options $1
mkdir -p $INSTALL/usr/lib
cp -P $PKG_BUILD/.build-target/shlib/libreadline.so.6.2 $INSTALL/usr/lib
ln -sf /usr/lib/libreadline.so.6.2 $INSTALL/usr/lib/libreadline.so.6
ln -sf /usr/lib/libreadline.so.6 $INSTALL/usr/lib/libreadline.so
cp -P $PKG_BUILD/.build-target/shlib/libhistory.so.6.2 $INSTALL/usr/lib
ln -sf /usr/lib/libhistory.so.6.2 $INSTALL/usr/lib/libhistory.so.6
ln -sf /usr/lib/libhistory.so.6 $INSTALL/usr/lib/libhistory.so

View File

@ -25,12 +25,12 @@ PKG_ARCH="any"
PKG_LICENSE="MIT"
PKG_SITE="http://www.gnu.org/readline"
PKG_URL="ftp://ftp.gnu.org/gnu/readline/$PKG_NAME-$PKG_VERSION.tar.gz"
PKG_DEPENDS=""
PKG_BUILD_DEPENDS="toolchain"
PKG_DEPENDS="ncurses"
PKG_BUILD_DEPENDS="toolchain ncurses"
PKG_PRIORITY="optional"
PKG_SECTION="devel"
PKG_SHORTDESC="readline: The GNU Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in."
PKG_LONGDESC="The GNU Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in."
PKG_IS_ADDON="no"
PKG_AUTORECONF="yes"
PKG_AUTORECONF="no"

View File

@ -0,0 +1,36 @@
diff -Naur readline-6.2-old/configure readline-6.2-new/configure
--- a/configure 2010-11-14 14:48:06.000000000 -0800
+++ b/configure 2012-05-02 19:38:49.000000000 -0700
@@ -10450,10 +10450,10 @@
$as_echo_n "checking configuration for building shared libraries... " >&6; }
eval `TERMCAP_LIB=$TERMCAP_LIB ${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}`
-# case "$SHLIB_LIBS" in
-# *curses*|*termcap*|*termlib*) ;;
-# *) SHLIB_LIBS="$SHLIB_LIBS $TERMCAP_LIB" ;;
-# esac
+ case "$SHLIB_LIBS" in
+ *curses*|*termcap*|*termlib*) ;;
+ *) SHLIB_LIBS="$SHLIB_LIBS $TERMCAP_LIB" ;;
+ esac
diff -Naur readline-6.2-old/configure.in readline-6.2-new/configure.in
--- a/configure.in 2010-11-14 14:41:48.000000000 -0800
+++ b/configure.in 2012-05-02 19:38:41.000000000 -0700
@@ -214,10 +214,10 @@
AC_MSG_CHECKING(configuration for building shared libraries)
eval `TERMCAP_LIB=$TERMCAP_LIB ${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}`
-# case "$SHLIB_LIBS" in
-# *curses*|*termcap*|*termlib*) ;;
-# *) SHLIB_LIBS="$SHLIB_LIBS $TERMCAP_LIB" ;;
-# esac
+ case "$SHLIB_LIBS" in
+ *curses*|*termcap*|*termlib*) ;;
+ *) SHLIB_LIBS="$SHLIB_LIBS $TERMCAP_LIB" ;;
+ esac
AC_SUBST(SHOBJ_CC)
AC_SUBST(SHOBJ_CFLAGS)

View File

@ -19,7 +19,7 @@
################################################################################
PKG_NAME="bcm2835-driver"
PKG_VERSION="f20e9d7"
PKG_VERSION="2997db1"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="nonfree"

View File

@ -21,7 +21,7 @@
PKG_NAME="linux"
PKG_VERSION="3.5.4"
if [ "$LINUX" = "3.2" ]; then
PKG_VERSION="3.2.28"
PKG_VERSION="3.2.30"
fi
PKG_REV="1"
PKG_ARCH="any"

View File

@ -0,0 +1,12 @@
diff -Naur linux-2.6.39-rc5/drivers/gpu/drm/i915/i915_drv.c linux-2.6.39-rc5.patch/drivers/gpu/drm/i915/i915_drv.c
--- linux-2.6.39-rc5/drivers/gpu/drm/i915/i915_drv.c 2011-04-27 05:48:50.000000000 +0200
+++ linux-2.6.39-rc5.patch/drivers/gpu/drm/i915/i915_drv.c 2011-04-29 02:51:28.773622809 +0200
@@ -760,7 +760,7 @@
static int __init i915_init(void)
{
if (!intel_agp_enabled) {
- DRM_ERROR("drm/i915 can't work without intel_agp module!\n");
+ DRM_INFO("drm/i915 can't work without intel_agp module!\n");
return -ENODEV;
}

View File

@ -0,0 +1,358 @@
diff -Naur linux-3.1.2/drivers/gpu/drm/drm_edid.c linux-3.1.2.patch/drivers/gpu/drm/drm_edid.c
--- linux-3.1.2/drivers/gpu/drm/drm_edid.c 2011-11-21 23:47:46.000000000 +0100
+++ linux-3.1.2.patch/drivers/gpu/drm/drm_edid.c 2011-11-23 00:35:54.444938016 +0100
@@ -1318,6 +1318,7 @@
#define HDMI_IDENTIFIER 0x000C03
#define AUDIO_BLOCK 0x01
+#define VIDEO_BLOCK 0x02
#define VENDOR_BLOCK 0x03
#define EDID_BASIC_AUDIO (1 << 6)
@@ -1347,6 +1348,47 @@
}
EXPORT_SYMBOL(drm_find_cea_extension);
+static int
+do_cea_modes (struct drm_connector *connector, u8 *db, u8 len)
+{
+ struct drm_device *dev = connector->dev;
+ u8 * mode, cea_mode;
+ int modes = 0;
+
+ for (mode = db; mode < db + len; mode++) {
+ cea_mode = (*mode & 127) - 1; /* CEA modes are numbered 1..127 */
+ if (cea_mode < drm_num_cea_modes) {
+ struct drm_display_mode *newmode;
+ newmode = drm_mode_duplicate(dev,
+ &edid_cea_modes[cea_mode]);
+ if (newmode) {
+ drm_mode_probed_add(connector, newmode);
+ modes++;
+ }
+ }
+ }
+
+ return modes;
+}
+
+static int
+add_cea_modes(struct drm_connector *connector, struct edid *edid)
+{
+ u8 * cea = drm_find_cea_extension(edid);
+ u8 * db, dbl;
+ int modes = 0;
+
+ if (cea && cea[1] >= 3) {
+ for (db = cea + 4; db < cea + cea[2]; db += dbl + 1) {
+ dbl = db[0] & 0x1f;
+ if (((db[0] & 0xe0) >> 5) == VIDEO_BLOCK)
+ modes += do_cea_modes (connector, db+1, dbl);
+ }
+ }
+
+ return modes;
+}
+
/**
* drm_detect_hdmi_monitor - detect whether monitor is hdmi.
* @edid: monitor EDID information
@@ -1550,6 +1592,7 @@
num_modes += add_standard_modes(connector, edid);
num_modes += add_established_modes(connector, edid);
num_modes += add_inferred_modes(connector, edid);
+ num_modes += add_cea_modes(connector, edid);
if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
edid_fixup_preferred(connector, quirks);
diff -Naur linux-3.1.2/drivers/gpu/drm/drm_edid_modes.h linux-3.1.2.patch/drivers/gpu/drm/drm_edid_modes.h
--- linux-3.1.2/drivers/gpu/drm/drm_edid_modes.h 2011-11-21 23:47:46.000000000 +0100
+++ linux-3.1.2.patch/drivers/gpu/drm/drm_edid_modes.h 2011-11-23 00:31:42.218643364 +0100
@@ -378,3 +378,287 @@
{ 1920, 1440, 75, 0 },
};
static const int num_est3_modes = sizeof(est3_modes) / sizeof(est3_modes[0]);
+
+/*
+ * Probably taken from CEA-861 spec.
+ * This table is converted from xorg's hw/xfree86/modes/xf86EdidModes.c.
+ */
+static const struct drm_display_mode edid_cea_modes[] = {
+ /* 640x480@60Hz */
+ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
+ 752, 800, 0, 480, 490, 492, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 720x480@60Hz */
+ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736,
+ 798, 858, 0, 480, 489, 495, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 720x480@60Hz */
+ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736,
+ 798, 858, 0, 480, 489, 495, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1280x720@60Hz */
+ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390,
+ 1430, 1650, 0, 720, 725, 730, 750, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1920x1080i@60Hz */
+ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008,
+ 2052, 2200, 0, 1080, 1084, 1094, 1125, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1440x480i@60Hz */
+ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
+ 1602, 1716, 0, 480, 488, 494, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1440x480i@60Hz */
+ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
+ 1602, 1716, 0, 480, 488, 494, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1440x240@60Hz */
+ { DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
+ 1602, 1716, 0, 240, 244, 247, 262, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1440x240@60Hz */
+ { DRM_MODE("1440x240", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1478,
+ 1602, 1716, 0, 240, 244, 247, 262, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 2880x480i@60Hz */
+ { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
+ 3204, 3432, 0, 480, 488, 494, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 2880x480i@60Hz */
+ { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
+ 3204, 3432, 0, 480, 488, 494, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 2880x240@60Hz */
+ { DRM_MODE("2880x240", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
+ 3204, 3432, 0, 240, 244, 247, 262, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 2880x240@60Hz */
+ { DRM_MODE("2880x240", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
+ 3204, 3432, 0, 240, 244, 247, 262, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1440x480@60Hz */
+ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1472,
+ 1596, 1716, 0, 480, 489, 495, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1440x480@60Hz */
+ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1472,
+ 1596, 1716, 0, 480, 489, 495, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1920x1080@60Hz */
+ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,
+ 2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 720x576@50Hz */
+ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
+ 796, 864, 0, 576, 581, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 720x576@50Hz */
+ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,
+ 796, 864, 0, 576, 581, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1280x720@50Hz */
+ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1720,
+ 1760, 1980, 0, 720, 725, 730, 750, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1920x1080i@50Hz */
+ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448,
+ 2492, 2640, 0, 1080, 1084, 1094, 1125, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1440x576i@50Hz */
+ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
+ 1590, 1728, 0, 576, 580, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1440x576i@50Hz */
+ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
+ 1590, 1728, 0, 576, 580, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1440x288@50Hz */
+ { DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
+ 1590, 1728, 0, 288, 290, 293, 312, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1440x288@50Hz */
+ { DRM_MODE("1440x288", DRM_MODE_TYPE_DRIVER, 27000, 1440, 1464,
+ 1590, 1728, 0, 288, 290, 293, 312, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 2880x576i@50Hz */
+ { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928,
+ 3180, 3456, 0, 576, 580, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 2880x576i@50Hz */
+ { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928,
+ 3180, 3456, 0, 576, 580, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 2880x288@50Hz */
+ { DRM_MODE("2880x288", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928,
+ 3180, 3456, 0, 288, 290, 293, 312, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 2880x288@50Hz */
+ { DRM_MODE("2880x288", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2928,
+ 3180, 3456, 0, 288, 290, 293, 312, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1440x576@50Hz */
+ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
+ 1592, 1728, 0, 576, 581, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1440x576@50Hz */
+ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
+ 1592, 1728, 0, 576, 581, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1920x1080@50Hz */
+ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448,
+ 2492, 2640, 0, 1080, 1084, 1089, 1125, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1920x1080@24Hz */
+ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2558,
+ 2602, 2750, 0, 1080, 1084, 1089, 1125, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1920x1080@25Hz */
+ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2448,
+ 2492, 2640, 0, 1080, 1084, 1089, 1125, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1920x1080@30Hz */
+ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008,
+ 2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 2880x480@60Hz */
+ { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2944,
+ 3192, 3432, 0, 480, 489, 495, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 2880x480@60Hz */
+ { DRM_MODE("2880x480", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2944,
+ 3192, 3432, 0, 480, 489, 495, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 2880x576@50Hz */
+ { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2928,
+ 3184, 3456, 0, 576, 581, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 2880x576@50Hz */
+ { DRM_MODE("2880x576", DRM_MODE_TYPE_DRIVER, 108000, 2880, 2928,
+ 3184, 3456, 0, 576, 581, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1920x1080i@50Hz */
+ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 72000, 1920, 1952,
+ 2120, 2304, 0, 1080, 1126, 1136, 1250, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1920x1080i@100Hz */
+ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448,
+ 2492, 2640, 0, 1080, 1084, 1094, 1125, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1280x720@100Hz */
+ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1720,
+ 1760, 1980, 0, 720, 725, 730, 750, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 720x576@100Hz */
+ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
+ 796, 864, 0, 576, 581, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 720x576@100Hz */
+ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 54000, 720, 732,
+ 796, 864, 0, 576, 581, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1440x576i@100Hz */
+ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
+ 1590, 1728, 0, 576, 580, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1440x576i@100Hz */
+ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1464,
+ 1590, 1728, 0, 576, 580, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1920x1080i@120Hz */
+ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,
+ 2052, 2200, 0, 1080, 1084, 1094, 1125, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1280x720@120Hz */
+ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1390,
+ 1430, 1650, 0, 720, 725, 730, 750, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 720x480@120Hz */
+ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 54000, 720, 736,
+ 798, 858, 0, 480, 489, 495, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 720x480@120Hz */
+ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 54000, 720, 736,
+ 798, 858, 0, 480, 489, 495, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1440x480i@120Hz */
+ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
+ 1602, 1716, 0, 480, 488, 494, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1440x480i@120Hz */
+ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 54000, 1440, 1478,
+ 1602, 1716, 0, 480, 488, 494, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 720x576@200Hz */
+ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 108000, 720, 732,
+ 796, 864, 0, 576, 581, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 720x576@200Hz */
+ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 108000, 720, 732,
+ 796, 864, 0, 576, 581, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1440x576i@200Hz */
+ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
+ 1590, 1728, 0, 576, 580, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1440x576i@200Hz */
+ { DRM_MODE("1440x576", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1464,
+ 1590, 1728, 0, 576, 580, 586, 625, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 720x480@240Hz */
+ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 108000, 720, 736,
+ 798, 858, 0, 480, 489, 495, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 720x480@240Hz */
+ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 108000, 720, 736,
+ 798, 858, 0, 480, 489, 495, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1440x480i@240 */
+ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
+ 1602, 1716, 0, 480, 488, 494, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1440x480i@240 */
+ { DRM_MODE("1440x480", DRM_MODE_TYPE_DRIVER, 108000, 1440, 1478,
+ 1602, 1716, 0, 480, 488, 494, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1280x720@24Hz */
+ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 59400, 1280, 3040,
+ 3080, 3300, 0, 720, 725, 730, 750, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1280x720@25Hz */
+ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3700,
+ 3740, 3960, 0, 720, 725, 730, 750, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1280x720@30Hz */
+ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 3040,
+ 3080, 3300, 0, 720, 725, 730, 750, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1920x1080@120Hz */
+ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2008,
+ 2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1920x1080@100Hz */
+ { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2448,
+ 2492, 2640, 0, 1080, 1084, 1094, 1125, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+};
+static const int drm_num_cea_modes =
+ sizeof (edid_cea_modes) / sizeof (edid_cea_modes[0]);

View File

@ -0,0 +1,845 @@
diff -Naur linux-3.2.1/drivers/media/common/tuners/tda18212.c linux-3.2.1.patch/drivers/media/common/tuners/tda18212.c
--- linux-3.2.1/drivers/media/common/tuners/tda18212.c 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/common/tuners/tda18212.c 2012-01-22 16:07:33.176264363 +0100
@@ -25,6 +25,8 @@
struct tda18212_priv {
struct tda18212_config *cfg;
struct i2c_adapter *i2c;
+
+ u32 if_frequency;
};
#define dbg(fmt, arg...) \
@@ -136,12 +138,24 @@
int ret, i;
u32 if_khz;
u8 buf[9];
+ #define DVBT_6 0
+ #define DVBT_7 1
+ #define DVBT_8 2
+ #define DVBT2_6 3
+ #define DVBT2_7 4
+ #define DVBT2_8 5
+ #define DVBC_6 6
+ #define DVBC_8 7
static const u8 bw_params[][3] = {
- /* 0f 13 23 */
- { 0xb3, 0x20, 0x03 }, /* DVB-T 6 MHz */
- { 0xb3, 0x31, 0x01 }, /* DVB-T 7 MHz */
- { 0xb3, 0x22, 0x01 }, /* DVB-T 8 MHz */
- { 0x92, 0x53, 0x03 }, /* DVB-C */
+ /* reg: 0f 13 23 */
+ [DVBT_6] = { 0xb3, 0x20, 0x03 },
+ [DVBT_7] = { 0xb3, 0x31, 0x01 },
+ [DVBT_8] = { 0xb3, 0x22, 0x01 },
+ [DVBT2_6] = { 0xbc, 0x20, 0x03 },
+ [DVBT2_7] = { 0xbc, 0x72, 0x03 },
+ [DVBT2_8] = { 0xbc, 0x22, 0x01 },
+ [DVBC_6] = { 0x92, 0x50, 0x03 },
+ [DVBC_8] = { 0x92, 0x53, 0x03 },
};
dbg("delsys=%d RF=%d BW=%d\n",
@@ -155,15 +169,34 @@
switch (c->bandwidth_hz) {
case 6000000:
if_khz = priv->cfg->if_dvbt_6;
- i = 0;
+ i = DVBT_6;
break;
case 7000000:
if_khz = priv->cfg->if_dvbt_7;
- i = 1;
+ i = DVBT_7;
break;
case 8000000:
if_khz = priv->cfg->if_dvbt_8;
- i = 2;
+ i = DVBT_8;
+ break;
+ default:
+ ret = -EINVAL;
+ goto error;
+ }
+ break;
+ case SYS_DVBT2:
+ switch (c->bandwidth_hz) {
+ case 6000000:
+ if_khz = priv->cfg->if_dvbt2_6;
+ i = DVBT2_6;
+ break;
+ case 7000000:
+ if_khz = priv->cfg->if_dvbt2_7;
+ i = DVBT2_7;
+ break;
+ case 8000000:
+ if_khz = priv->cfg->if_dvbt2_8;
+ i = DVBT2_8;
break;
default:
ret = -EINVAL;
@@ -172,7 +205,7 @@
break;
case SYS_DVBC_ANNEX_AC:
if_khz = priv->cfg->if_dvbc;
- i = 3;
+ i = DVBC_8;
break;
default:
ret = -EINVAL;
@@ -194,7 +227,7 @@
buf[0] = 0x02;
buf[1] = bw_params[i][1];
buf[2] = 0x03; /* default value */
- buf[3] = if_khz / 50;
+ buf[3] = DIV_ROUND_CLOSEST(if_khz, 50);
buf[4] = ((c->frequency / 1000) >> 16) & 0xff;
buf[5] = ((c->frequency / 1000) >> 8) & 0xff;
buf[6] = ((c->frequency / 1000) >> 0) & 0xff;
@@ -204,6 +237,9 @@
if (ret)
goto error;
+ /* actual IF rounded as it is on register */
+ priv->if_frequency = buf[3] * 50 * 1000;
+
exit:
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 0); /* close I2C-gate */
@@ -215,6 +251,15 @@
goto exit;
}
+static int tda18212_get_if_frequency(struct dvb_frontend *fe, u32 *frequency)
+{
+ struct tda18212_priv *priv = fe->tuner_priv;
+
+ *frequency = priv->if_frequency;
+
+ return 0;
+}
+
static int tda18212_release(struct dvb_frontend *fe)
{
kfree(fe->tuner_priv);
@@ -234,6 +279,7 @@
.release = tda18212_release,
.set_params = tda18212_set_params,
+ .get_if_frequency = tda18212_get_if_frequency,
};
struct dvb_frontend *tda18212_attach(struct dvb_frontend *fe,
diff -Naur linux-3.2.1/drivers/media/common/tuners/tda18212.h linux-3.2.1.patch/drivers/media/common/tuners/tda18212.h
--- linux-3.2.1/drivers/media/common/tuners/tda18212.h 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/common/tuners/tda18212.h 2012-01-22 16:07:33.176264363 +0100
@@ -29,6 +29,10 @@
u16 if_dvbt_6;
u16 if_dvbt_7;
u16 if_dvbt_8;
+ u16 if_dvbt2_5;
+ u16 if_dvbt2_6;
+ u16 if_dvbt2_7;
+ u16 if_dvbt2_8;
u16 if_dvbc;
};
diff -Naur linux-3.2.1/drivers/media/dvb/dvb-usb/anysee.c linux-3.2.1.patch/drivers/media/dvb/dvb-usb/anysee.c
--- linux-3.2.1/drivers/media/dvb/dvb-usb/anysee.c 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/dvb/dvb-usb/anysee.c 2012-01-22 16:09:04.983927302 +0100
@@ -41,6 +41,7 @@
#include "stv0900.h"
#include "stv6110.h"
#include "isl6423.h"
+#include "cxd2820r.h"
/* debug */
static int dvb_usb_anysee_debug;
@@ -66,10 +67,12 @@
if (mutex_lock_interruptible(&anysee_usb_mutex) < 0)
return -EAGAIN;
+ deb_xfer(">>> ");
+ debug_dump(buf, slen, deb_xfer);
+
/* We need receive one message more after dvb_usb_generic_rw due
to weird transaction flow, which is 1 x send + 2 x receive. */
ret = dvb_usb_generic_rw(d, buf, sizeof(buf), buf, sizeof(buf), 0);
-
if (!ret) {
/* receive 2nd answer */
ret = usb_bulk_msg(d->udev, usb_rcvbulkpipe(d->udev,
@@ -79,7 +82,10 @@
err("%s: recv bulk message failed: %d", __func__, ret);
else {
deb_xfer("<<< ");
- debug_dump(buf, act_len, deb_xfer);
+ debug_dump(buf, rlen, deb_xfer);
+
+ if (buf[63] != 0x4f)
+ deb_info("%s: cmd failed\n", __func__);
}
}
@@ -129,6 +135,29 @@
return anysee_write_reg(d, reg, val);
}
+/* read single register with mask */
+static int anysee_rd_reg_mask(struct dvb_usb_device *d, u16 reg, u8 *val,
+ u8 mask)
+{
+ int ret, i;
+ u8 tmp;
+
+ ret = anysee_read_reg(d, reg, &tmp);
+ if (ret)
+ return ret;
+
+ tmp &= mask;
+
+ /* find position of the first bit */
+ for (i = 0; i < 8; i++) {
+ if ((mask >> i) & 0x01)
+ break;
+ }
+ *val = tmp >> i;
+
+ return 0;
+}
+
static int anysee_get_hw_info(struct dvb_usb_device *d, u8 *id)
{
u8 buf[] = {CMD_GET_HW_INFO};
@@ -156,22 +185,6 @@
return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0);
}
-static int anysee_init(struct dvb_usb_device *d)
-{
- int ret;
- /* LED light */
- ret = anysee_led_ctrl(d, 0x01, 0x03);
- if (ret)
- return ret;
-
- /* enable IR */
- ret = anysee_ir_ctrl(d, 1);
- if (ret)
- return ret;
-
- return 0;
-}
-
/* I2C */
static int anysee_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msg,
int num)
@@ -297,7 +310,7 @@
.pll_m = 12,
.pll_p = 3,
.pll_n = 1,
- .output_mode = TDA10023_OUTPUT_MODE_PARALLEL_C,
+ .output_mode = TDA10023_OUTPUT_MODE_PARALLEL_B,
.deltaf = 0xba02,
};
@@ -309,6 +322,17 @@
.if_dvbc = 5000,
};
+static struct tda18212_config anysee_tda18212_config2 = {
+ .i2c_address = 0x60 /* (0xc0 >> 1) */,
+ .if_dvbt_6 = 3550,
+ .if_dvbt_7 = 3700,
+ .if_dvbt_8 = 4150,
+ .if_dvbt2_6 = 3250,
+ .if_dvbt2_7 = 4000,
+ .if_dvbt2_8 = 4000,
+ .if_dvbc = 5000,
+};
+
static struct cx24116_config anysee_cx24116_config = {
.demod_address = (0xaa >> 1),
.mpg_clk_pos_pol = 0x00,
@@ -339,6 +363,18 @@
.addr = (0x10 >> 1),
};
+static struct cxd2820r_config anysee_cxd2820r_config = {
+ .i2c_address = 0x6d, /* (0xda >> 1) */
+ .ts_mode = 0x38,
+ .if_dvbt_6 = 3550,
+ .if_dvbt_7 = 3700,
+ .if_dvbt_8 = 4150,
+ .if_dvbt2_6 = 3250,
+ .if_dvbt2_7 = 4000,
+ .if_dvbt2_8 = 4000,
+ .if_dvbc = 5000,
+};
+
/*
* New USB device strings: Mfr=1, Product=2, SerialNumber=0
* Manufacturer: AMT.CO.KR
@@ -421,6 +457,14 @@
* IOA[7] TS 1=enabled
* IOE[5] STV0903 1=enabled
*
+ * E7 T2C VID=1c73 PID=861f HW=20 FW=0.1 AMTCI=0.5 "anysee-E7T2C(LP)"
+ * PCB: 508T2C (rev0.3)
+ * parts: DNOQ44QCH106A(CXD2820R, TDA18212), TDA8024
+ * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff
+ * IOA=4d IOB=00 IOC=cc IOD=48 IOE=e4
+ * IOA[7] TS 1=enabled
+ * IOE[5] CXD2820R 1=enabled
+ *
* E7 PTC VID=1c73 PID=861f HW=21 FW=0.1 AMTCI=?? "anysee-E7PTC(LP)"
* PCB: 508PTC (rev0.5)
* parts: ZL10353, TDA10023, DNOD44CDH086A(TDA18212)
@@ -437,7 +481,7 @@
* IOD[6] ZL10353 1=enabled
* IOE[0] IF 0=enabled
*
- * E7 S2 VID=1c73 PID=861f HW=22 FW=0.1 AMTCI=?? "anysee-E7PS2(LP)"
+ * E7 PS2 VID=1c73 PID=861f HW=22 FW=0.1 AMTCI=?? "anysee-E7PS2(LP)"
* PCB: 508PS2 (rev0.4)
* parts: DNBU10512IST(STV0903, STV6110), ISL6423
* OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff
@@ -446,6 +490,16 @@
* IOE[5] STV0903 1=enabled
*/
+
+/* external I2C gate used for DNOD44CDH086A(TDA18212) tuner module */
+static int anysee_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
+{
+ struct dvb_usb_adapter *adap = fe->dvb->priv;
+
+ /* enable / disable tuner access on IOE[4] */
+ return anysee_wr_reg_mask(adap->dev, REG_IOE, (enable << 4), 0x10);
+}
+
static int anysee_frontend_ctrl(struct dvb_frontend *fe, int onoff)
{
struct dvb_usb_adapter *adap = fe->dvb->priv;
@@ -577,7 +631,8 @@
/* detect hardware only once */
if (adap->fe_adap[0].fe == NULL) {
/* Check which hardware we have.
- * We must do this call two times to get reliable values (hw bug).
+ * We must do this call two times to get reliable values
+ * (hw/fw bug).
*/
ret = anysee_get_hw_info(adap->dev, hw_info);
if (ret)
@@ -606,14 +661,14 @@
break;
/* attach demod */
- adap->fe_adap[0].fe = dvb_attach(mt352_attach, &anysee_mt352_config,
- &adap->dev->i2c_adap);
+ adap->fe_adap[0].fe = dvb_attach(mt352_attach,
+ &anysee_mt352_config, &adap->dev->i2c_adap);
if (adap->fe_adap[0].fe)
break;
/* attach demod */
- adap->fe_adap[0].fe = dvb_attach(zl10353_attach, &anysee_zl10353_config,
- &adap->dev->i2c_adap);
+ adap->fe_adap[0].fe = dvb_attach(zl10353_attach,
+ &anysee_zl10353_config, &adap->dev->i2c_adap);
break;
case ANYSEE_HW_507CD: /* 6 */
@@ -665,8 +720,8 @@
goto error;
/* attach demod */
- adap->fe_adap[0].fe = dvb_attach(cx24116_attach, &anysee_cx24116_config,
- &adap->dev->i2c_adap);
+ adap->fe_adap[0].fe = dvb_attach(cx24116_attach,
+ &anysee_cx24116_config, &adap->dev->i2c_adap);
break;
case ANYSEE_HW_507FA: /* 15 */
@@ -747,17 +802,19 @@
}
}
+ /* I2C gate for DNOD44CDH086A(TDA18212) tuner module */
+ if (tmp == 0xc7) {
+ if (adap->fe_adap[state->fe_id].fe)
+ adap->fe_adap[state->fe_id].fe->ops.i2c_gate_ctrl =
+ anysee_i2c_gate_ctrl;
+ }
+
break;
case ANYSEE_HW_508TC: /* 18 */
case ANYSEE_HW_508PTC: /* 21 */
/* E7 TC */
/* E7 PTC */
- /* enable transport stream on IOA[7] */
- ret = anysee_wr_reg_mask(adap->dev, REG_IOA, (1 << 7), 0x80);
- if (ret)
- goto error;
-
if ((state->fe_id ^ dvb_usb_anysee_delsys) == 0) {
/* disable DVB-T demod on IOD[6] */
ret = anysee_wr_reg_mask(adap->dev, REG_IOD, (0 << 6),
@@ -772,7 +829,8 @@
goto error;
/* attach demod */
- adap->fe_adap[state->fe_id].fe = dvb_attach(tda10023_attach,
+ adap->fe_adap[state->fe_id].fe =
+ dvb_attach(tda10023_attach,
&anysee_tda10023_tda18212_config,
&adap->dev->i2c_adap, 0x48);
} else {
@@ -789,11 +847,19 @@
goto error;
/* attach demod */
- adap->fe_adap[state->fe_id].fe = dvb_attach(zl10353_attach,
+ adap->fe_adap[state->fe_id].fe =
+ dvb_attach(zl10353_attach,
&anysee_zl10353_tda18212_config,
&adap->dev->i2c_adap);
}
+ /* I2C gate for DNOD44CDH086A(TDA18212) tuner module */
+ if (adap->fe_adap[state->fe_id].fe)
+ adap->fe_adap[state->fe_id].fe->ops.i2c_gate_ctrl =
+ anysee_i2c_gate_ctrl;
+
+ state->has_ci = true;
+
break;
case ANYSEE_HW_508S2: /* 19 */
case ANYSEE_HW_508PS2: /* 22 */
@@ -803,19 +869,35 @@
if (state->fe_id)
break;
- /* enable transport stream on IOA[7] */
- ret = anysee_wr_reg_mask(adap->dev, REG_IOA, (1 << 7), 0x80);
+ /* enable DVB-S/S2 demod on IOE[5] */
+ ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (1 << 5), 0x20);
if (ret)
goto error;
- /* enable DVB-S/S2 demod on IOE[5] */
+ /* attach demod */
+ adap->fe_adap[0].fe = dvb_attach(stv0900_attach,
+ &anysee_stv0900_config, &adap->dev->i2c_adap, 0);
+
+ state->has_ci = true;
+
+ break;
+ case ANYSEE_HW_508T2C: /* 20 */
+ /* E7 T2C */
+
+ if (state->fe_id)
+ break;
+
+ /* enable DVB-T/T2/C demod on IOE[5] */
ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (1 << 5), 0x20);
if (ret)
goto error;
/* attach demod */
- adap->fe_adap[0].fe = dvb_attach(stv0900_attach, &anysee_stv0900_config,
- &adap->dev->i2c_adap, 0);
+ adap->fe_adap[state->fe_id].fe = dvb_attach(cxd2820r_attach,
+ &anysee_cxd2820r_config, &adap->dev->i2c_adap,
+ NULL);
+
+ state->has_ci = true;
break;
}
@@ -842,24 +924,26 @@
/* E30 */
/* attach tuner */
- fe = dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, (0xc2 >> 1),
- NULL, DVB_PLL_THOMSON_DTT7579);
+ fe = dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe,
+ (0xc2 >> 1), NULL, DVB_PLL_THOMSON_DTT7579);
break;
case ANYSEE_HW_507CD: /* 6 */
/* E30 Plus */
/* attach tuner */
- fe = dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, (0xc2 >> 1),
- &adap->dev->i2c_adap, DVB_PLL_THOMSON_DTT7579);
+ fe = dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe,
+ (0xc2 >> 1), &adap->dev->i2c_adap,
+ DVB_PLL_THOMSON_DTT7579);
break;
case ANYSEE_HW_507DC: /* 10 */
/* E30 C Plus */
/* attach tuner */
- fe = dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, (0xc0 >> 1),
- &adap->dev->i2c_adap, DVB_PLL_SAMSUNG_DTOS403IH102A);
+ fe = dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe,
+ (0xc0 >> 1), &adap->dev->i2c_adap,
+ DVB_PLL_SAMSUNG_DTOS403IH102A);
break;
case ANYSEE_HW_507SI: /* 11 */
@@ -877,22 +961,12 @@
/* Try first attach TDA18212 silicon tuner on IOE[4], if that
* fails attach old simple PLL. */
- /* enable tuner on IOE[4] */
- ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (1 << 4), 0x10);
- if (ret)
- goto error;
-
/* attach tuner */
fe = dvb_attach(tda18212_attach, adap->fe_adap[state->fe_id].fe,
&adap->dev->i2c_adap, &anysee_tda18212_config);
if (fe)
break;
- /* disable tuner on IOE[4] */
- ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (0 << 4), 0x10);
- if (ret)
- goto error;
-
/* attach tuner */
fe = dvb_attach(dvb_pll_attach, adap->fe_adap[state->fe_id].fe,
(0xc0 >> 1), &adap->dev->i2c_adap,
@@ -904,11 +978,6 @@
/* E7 TC */
/* E7 PTC */
- /* enable tuner on IOE[4] */
- ret = anysee_wr_reg_mask(adap->dev, REG_IOE, (1 << 4), 0x10);
- if (ret)
- goto error;
-
/* attach tuner */
fe = dvb_attach(tda18212_attach, adap->fe_adap[state->fe_id].fe,
&adap->dev->i2c_adap, &anysee_tda18212_config);
@@ -930,6 +999,15 @@
}
break;
+
+ case ANYSEE_HW_508T2C: /* 20 */
+ /* E7 T2C */
+
+ /* attach tuner */
+ fe = dvb_attach(tda18212_attach, adap->fe_adap[state->fe_id].fe,
+ &adap->dev->i2c_adap, &anysee_tda18212_config2);
+
+ break;
default:
fe = NULL;
}
@@ -939,7 +1017,6 @@
else
ret = -ENODEV;
-error:
return ret;
}
@@ -969,6 +1046,201 @@
return 0;
}
+static int anysee_ci_read_attribute_mem(struct dvb_ca_en50221 *ci, int slot,
+ int addr)
+{
+ struct dvb_usb_device *d = ci->data;
+ int ret;
+ u8 buf[] = {CMD_CI, 0x02, 0x40 | addr >> 8, addr & 0xff, 0x00, 1};
+ u8 val;
+
+ ret = anysee_ctrl_msg(d, buf, sizeof(buf), &val, 1);
+ if (ret)
+ return ret;
+
+ return val;
+}
+
+static int anysee_ci_write_attribute_mem(struct dvb_ca_en50221 *ci, int slot,
+ int addr, u8 val)
+{
+ struct dvb_usb_device *d = ci->data;
+ int ret;
+ u8 buf[] = {CMD_CI, 0x03, 0x40 | addr >> 8, addr & 0xff, 0x00, 1, val};
+
+ ret = anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+static int anysee_ci_read_cam_control(struct dvb_ca_en50221 *ci, int slot,
+ u8 addr)
+{
+ struct dvb_usb_device *d = ci->data;
+ int ret;
+ u8 buf[] = {CMD_CI, 0x04, 0x40, addr, 0x00, 1};
+ u8 val;
+
+ ret = anysee_ctrl_msg(d, buf, sizeof(buf), &val, 1);
+ if (ret)
+ return ret;
+
+ return val;
+}
+
+static int anysee_ci_write_cam_control(struct dvb_ca_en50221 *ci, int slot,
+ u8 addr, u8 val)
+{
+ struct dvb_usb_device *d = ci->data;
+ int ret;
+ u8 buf[] = {CMD_CI, 0x05, 0x40, addr, 0x00, 1, val};
+
+ ret = anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+static int anysee_ci_slot_reset(struct dvb_ca_en50221 *ci, int slot)
+{
+ struct dvb_usb_device *d = ci->data;
+ int ret;
+ struct anysee_state *state = d->priv;
+
+ state->ci_cam_ready = jiffies + msecs_to_jiffies(1000);
+
+ ret = anysee_wr_reg_mask(d, REG_IOA, (0 << 7), 0x80);
+ if (ret)
+ return ret;
+
+ msleep(300);
+
+ ret = anysee_wr_reg_mask(d, REG_IOA, (1 << 7), 0x80);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+static int anysee_ci_slot_shutdown(struct dvb_ca_en50221 *ci, int slot)
+{
+ struct dvb_usb_device *d = ci->data;
+ int ret;
+
+ ret = anysee_wr_reg_mask(d, REG_IOA, (0 << 7), 0x80);
+ if (ret)
+ return ret;
+
+ msleep(30);
+
+ ret = anysee_wr_reg_mask(d, REG_IOA, (1 << 7), 0x80);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+static int anysee_ci_slot_ts_enable(struct dvb_ca_en50221 *ci, int slot)
+{
+ struct dvb_usb_device *d = ci->data;
+ int ret;
+
+ ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 1), 0x02);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+static int anysee_ci_poll_slot_status(struct dvb_ca_en50221 *ci, int slot,
+ int open)
+{
+ struct dvb_usb_device *d = ci->data;
+ struct anysee_state *state = d->priv;
+ int ret;
+ u8 tmp;
+
+ ret = anysee_rd_reg_mask(d, REG_IOC, &tmp, 0x40);
+ if (ret)
+ return ret;
+
+ if (tmp == 0) {
+ ret = DVB_CA_EN50221_POLL_CAM_PRESENT;
+ if (time_after(jiffies, state->ci_cam_ready))
+ ret |= DVB_CA_EN50221_POLL_CAM_READY;
+ }
+
+ return ret;
+}
+
+static int anysee_ci_init(struct dvb_usb_device *d)
+{
+ struct anysee_state *state = d->priv;
+ int ret;
+
+ state->ci.owner = THIS_MODULE;
+ state->ci.read_attribute_mem = anysee_ci_read_attribute_mem;
+ state->ci.write_attribute_mem = anysee_ci_write_attribute_mem;
+ state->ci.read_cam_control = anysee_ci_read_cam_control;
+ state->ci.write_cam_control = anysee_ci_write_cam_control;
+ state->ci.slot_reset = anysee_ci_slot_reset;
+ state->ci.slot_shutdown = anysee_ci_slot_shutdown;
+ state->ci.slot_ts_enable = anysee_ci_slot_ts_enable;
+ state->ci.poll_slot_status = anysee_ci_poll_slot_status;
+ state->ci.data = d;
+
+ ret = anysee_wr_reg_mask(d, REG_IOA, (1 << 7), 0x80);
+ if (ret)
+ return ret;
+
+ ret = dvb_ca_en50221_init(&d->adapter[0].dvb_adap, &state->ci, 0, 1);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+static void anysee_ci_release(struct dvb_usb_device *d)
+{
+ struct anysee_state *state = d->priv;
+
+ /* detach CI */
+ if (state->has_ci)
+ dvb_ca_en50221_release(&state->ci);
+
+ return;
+}
+
+static int anysee_init(struct dvb_usb_device *d)
+{
+ struct anysee_state *state = d->priv;
+ int ret;
+
+ /* LED light */
+ ret = anysee_led_ctrl(d, 0x01, 0x03);
+ if (ret)
+ return ret;
+
+ /* enable IR */
+ ret = anysee_ir_ctrl(d, 1);
+ if (ret)
+ return ret;
+
+ /* attach CI */
+ if (state->has_ci) {
+ ret = anysee_ci_init(d);
+ if (ret) {
+ state->has_ci = false;
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
/* DVB USB Driver stuff */
static struct dvb_usb_device_properties anysee_properties;
@@ -1010,6 +1282,16 @@
return anysee_init(d);
}
+static void anysee_disconnect(struct usb_interface *intf)
+{
+ struct dvb_usb_device *d = usb_get_intfdata(intf);
+
+ anysee_ci_release(d);
+ dvb_usb_device_exit(intf);
+
+ return;
+}
+
static struct usb_device_id anysee_table[] = {
{ USB_DEVICE(USB_VID_CYPRESS, USB_PID_ANYSEE) },
{ USB_DEVICE(USB_VID_AMT, USB_PID_ANYSEE) },
@@ -1029,7 +1311,7 @@
{
.num_frontends = 2,
.frontend_ctrl = anysee_frontend_ctrl,
- .fe = {{
+ .fe = { {
.streaming_ctrl = anysee_streaming_ctrl,
.frontend_attach = anysee_frontend_attach,
.tuner_attach = anysee_tuner_attach,
@@ -1057,7 +1339,7 @@
}
}
},
- }},
+ } },
}
},
@@ -1087,7 +1369,7 @@
static struct usb_driver anysee_driver = {
.name = "dvb_usb_anysee",
.probe = anysee_probe,
- .disconnect = dvb_usb_device_exit,
+ .disconnect = anysee_disconnect,
.id_table = anysee_table,
};
diff -Naur linux-3.2.1/drivers/media/dvb/dvb-usb/anysee.h linux-3.2.1.patch/drivers/media/dvb/dvb-usb/anysee.h
--- linux-3.2.1/drivers/media/dvb/dvb-usb/anysee.h 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/dvb/dvb-usb/anysee.h 2012-01-22 16:07:33.178264400 +0100
@@ -36,6 +36,7 @@
#define DVB_USB_LOG_PREFIX "anysee"
#include "dvb-usb.h"
+#include "dvb_ca_en50221.h"
#define deb_info(args...) dprintk(dvb_usb_anysee_debug, 0x01, args)
#define deb_xfer(args...) dprintk(dvb_usb_anysee_debug, 0x02, args)
@@ -54,12 +55,16 @@
CMD_GET_IR_CODE = 0x41,
CMD_GET_HW_INFO = 0x19,
CMD_SMARTCARD = 0x34,
+ CMD_CI = 0x37,
};
struct anysee_state {
u8 hw; /* PCB ID */
u8 seq;
u8 fe_id:1; /* frondend ID */
+ u8 has_ci:1;
+ struct dvb_ca_en50221 ci;
+ unsigned long ci_cam_ready; /* jiffies */
};
#define ANYSEE_HW_507T 2 /* E30 */
@@ -69,6 +74,7 @@
#define ANYSEE_HW_507FA 15 /* E30 Combo Plus / E30 C Plus */
#define ANYSEE_HW_508TC 18 /* E7 TC */
#define ANYSEE_HW_508S2 19 /* E7 S2 */
+#define ANYSEE_HW_508T2C 20 /* E7 T2C */
#define ANYSEE_HW_508PTC 21 /* E7 PTC Plus */
#define ANYSEE_HW_508PS2 22 /* E7 PS2 Plus */
diff -Naur linux-3.2.1/drivers/media/dvb/dvb-usb/Kconfig linux-3.2.1.patch/drivers/media/dvb/dvb-usb/Kconfig
--- linux-3.2.1/drivers/media/dvb/dvb-usb/Kconfig 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/dvb/dvb-usb/Kconfig 2012-01-22 16:07:33.179264419 +0100
@@ -311,6 +311,7 @@
select DVB_STV0900 if !DVB_FE_CUSTOMISE
select DVB_STV6110 if !DVB_FE_CUSTOMISE
select DVB_ISL6423 if !DVB_FE_CUSTOMISE
+ select DVB_CXD2820R if !DVB_FE_CUSTOMISE
help
Say Y here to support the Anysee E30, Anysee E30 Plus or
Anysee E30 C Plus DVB USB2.0 receiver.

View File

@ -0,0 +1,649 @@
diff -Naur linux-3.2.1/Documentation/DocBook/media/dvb/dvbproperty.xml linux-3.2.1.patch/Documentation/DocBook/media/dvb/dvbproperty.xml
--- linux-3.2.1/Documentation/DocBook/media/dvb/dvbproperty.xml 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/Documentation/DocBook/media/dvb/dvbproperty.xml 2012-01-22 15:52:29.773509131 +0100
@@ -311,6 +311,8 @@
ROLLOFF_20,
ROLLOFF_25,
ROLLOFF_AUTO,
+ ROLLOFF_15, /* DVB-C Annex A */
+ ROLLOFF_13, /* DVB-C Annex C */
} fe_rolloff_t;
</programlisting>
</section>
@@ -778,8 +780,10 @@
<listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem>
<listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem>
<listitem><para><link linkend="DTV-SYMBOL-RATE"><constant>DTV_SYMBOL_RATE</constant></link></para></listitem>
+ <listitem><para><link linkend="DTV-ROLLOFF"><constant>DTV_ROLLOFF</constant></link></para></listitem>
<listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem>
</itemizedlist>
+ <para>The Rolloff of 0.15 (ROLLOFF_15) is assumed, as ITU-T J.83 Annex A is more common. For Annex C, rolloff should be 0.13 (ROLLOFF_13). All other values are invalid.</para>
</section>
<section id="dvbc-annex-b-params">
<title>DVB-C Annex B delivery system</title>
diff -Naur linux-3.2.1/Documentation/dvb/get_dvb_firmware linux-3.2.1.patch/Documentation/dvb/get_dvb_firmware
--- linux-3.2.1/Documentation/dvb/get_dvb_firmware 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/Documentation/dvb/get_dvb_firmware 2012-01-22 15:38:50.939309809 +0100
@@ -27,8 +27,8 @@
"or51211", "or51132_qam", "or51132_vsb", "bluebird",
"opera1", "cx231xx", "cx18", "cx23885", "pvrusb2", "mpc718",
"af9015", "ngene", "az6027", "lme2510_lg", "lme2510c_s7395",
- "lme2510c_s7395_old", "drxk", "drxk_terratec_h5", "tda10071",
- "it9135" );
+ "lme2510c_s7395_old", "drxk", "drxk_terratec_h5",
+ "drxk_hauppauge_hvr930c", "tda10071", "it9135" );
# Check args
syntax() if (scalar(@ARGV) != 1);
@@ -643,6 +643,24 @@
"$fwfile"
}
+
+sub drxk_hauppauge_hvr930c {
+ my $url = "http://www.wintvcd.co.uk/drivers/";
+ my $zipfile = "HVR-9x0_5_10_325_28153_SIGNED.zip";
+ my $hash = "83ab82e7e9480ec8bf1ae0155ca63c88";
+ my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1);
+ my $drvfile = "HVR-900/emOEM.sys";
+ my $fwfile = "dvb-usb-hauppauge-hvr930c-drxk.fw";
+
+ checkstandard();
+
+ wgetfile($zipfile, $url . $zipfile);
+ verify($zipfile, $hash);
+ unzip($zipfile, $tmpdir);
+ extract("$tmpdir/$drvfile", 0x117b0, 42692, "$fwfile");
+
+ "$fwfile"
+}
sub drxk_terratec_h5 {
my $url = "http://www.linuxtv.org/downloads/firmware/";
diff -Naur linux-3.2.1/drivers/media/common/tuners/xc5000.c linux-3.2.1.patch/drivers/media/common/tuners/xc5000.c
--- linux-3.2.1/drivers/media/common/tuners/xc5000.c 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/common/tuners/xc5000.c 2012-01-22 15:38:54.115367896 +0100
@@ -628,20 +628,12 @@
dprintk(1, "*** Quality (0:<8dB, 7:>56dB) = %d\n", quality);
}
-/*
- * As defined on EN 300 429, the DVB-C roll-off factor is 0.15.
- * So, the amount of the needed bandwith is given by:
- * Bw = Symbol_rate * (1 + 0.15)
- * As such, the maximum symbol rate supported by 6 MHz is given by:
- * max_symbol_rate = 6 MHz / 1.15 = 5217391 Bauds
- */
-#define MAX_SYMBOL_RATE_6MHz 5217391
-
static int xc5000_set_params(struct dvb_frontend *fe,
struct dvb_frontend_parameters *params)
{
struct xc5000_priv *priv = fe->tuner_priv;
int ret;
+ u32 bw;
if (xc5000_is_firmware_loaded(fe) != XC_RESULT_SUCCESS) {
if (xc_load_fw_and_init_tuner(fe) != XC_RESULT_SUCCESS) {
@@ -684,8 +676,10 @@
priv->freq_hz = params->frequency - 1750000;
break;
case BANDWIDTH_7_MHZ:
- printk(KERN_ERR "xc5000 bandwidth 7MHz not supported\n");
- return -EINVAL;
+ priv->bandwidth = BANDWIDTH_7_MHZ;
+ priv->video_standard = DTV7;
+ priv->freq_hz = params->frequency - 2250000;
+ break;
case BANDWIDTH_8_MHZ:
priv->bandwidth = BANDWIDTH_8_MHZ;
priv->video_standard = DTV8;
@@ -707,14 +701,26 @@
dprintk(1, "%s() QAM modulation\n", __func__);
priv->rf_mode = XC_RF_MODE_CABLE;
/*
- * Using a 8MHz bandwidth sometimes fail
- * with 6MHz-spaced channels, due to inter-carrier
- * interference. So, use DTV6 firmware
+ * Using a higher bandwidth at the tuner filter may
+ * allow inter-carrier interference.
+ * So, determine the minimal channel spacing, in order
+ * to better adjust the tuner filter.
+ * According with ITU-T J.83, the bandwidth is given by:
+ * bw = Simbol Rate * (1 + roll_off), where the roll_off
+ * is equal to 0.15 for Annex A, and 0.13 for annex C
*/
- if (params->u.qam.symbol_rate <= MAX_SYMBOL_RATE_6MHz) {
+ if (fe->dtv_property_cache.rolloff == ROLLOFF_13)
+ bw = (params->u.qam.symbol_rate * 13) / 10;
+ else
+ bw = (params->u.qam.symbol_rate * 15) / 10;
+ if (bw <= 6000000) {
priv->bandwidth = BANDWIDTH_6_MHZ;
priv->video_standard = DTV6;
priv->freq_hz = params->frequency - 1750000;
+ } else if (bw <= 7000000) {
+ priv->bandwidth = BANDWIDTH_7_MHZ;
+ priv->video_standard = DTV7;
+ priv->freq_hz = params->frequency - 2250000;
} else {
priv->bandwidth = BANDWIDTH_8_MHZ;
priv->video_standard = DTV7_8;
@@ -996,6 +1002,8 @@
struct xc5000_priv *priv = fe->tuner_priv;
int ret = 0;
+ mutex_lock(&xc5000_list_mutex);
+
if (xc5000_is_firmware_loaded(fe) != XC_RESULT_SUCCESS) {
ret = xc5000_fwupload(fe);
if (ret != XC_RESULT_SUCCESS)
@@ -1015,6 +1023,8 @@
/* Default to "CABLE" mode */
ret |= xc_write_reg(priv, XREG_SIGNALSOURCE, XC_RF_MODE_CABLE);
+ mutex_unlock(&xc5000_list_mutex);
+
return ret;
}
diff -Naur linux-3.2.1/drivers/media/dvb/dvb-core/dvb_frontend.c linux-3.2.1.patch/drivers/media/dvb/dvb-core/dvb_frontend.c
--- linux-3.2.1/drivers/media/dvb/dvb-core/dvb_frontend.c 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/dvb/dvb-core/dvb_frontend.c 2012-01-22 15:52:29.774509149 +0100
@@ -876,6 +876,7 @@
c->symbol_rate = QAM_AUTO;
c->code_rate_HP = FEC_AUTO;
c->code_rate_LP = FEC_AUTO;
+ c->rolloff = ROLLOFF_AUTO;
c->isdbt_partial_reception = -1;
c->isdbt_sb_mode = -1;
@@ -1030,6 +1031,7 @@
break;
case FE_QAM:
c->delivery_system = SYS_DVBC_ANNEX_AC;
+ c->rolloff = ROLLOFF_15; /* implied for Annex A */
break;
case FE_OFDM:
c->delivery_system = SYS_DVBT;
diff -Naur linux-3.2.1/drivers/media/dvb/frontends/drxk.h linux-3.2.1.patch/drivers/media/dvb/frontends/drxk.h
--- linux-3.2.1/drivers/media/dvb/frontends/drxk.h 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/dvb/frontends/drxk.h 2012-01-22 15:38:45.923218078 +0100
@@ -26,6 +26,8 @@
bool antenna_dvbt;
u16 antenna_gpio;
+ int chunk_size;
+
const char *microcode_name;
};
diff -Naur linux-3.2.1/drivers/media/dvb/frontends/drxk_hard.c linux-3.2.1.patch/drivers/media/dvb/frontends/drxk_hard.c
--- linux-3.2.1/drivers/media/dvb/frontends/drxk_hard.c 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/dvb/frontends/drxk_hard.c 2012-01-22 15:39:13.797727862 +0100
@@ -681,7 +681,8 @@
state->m_hasOOB = false;
state->m_hasAudio = false;
- state->m_ChunkSize = 124;
+ if (!state->m_ChunkSize)
+ state->m_ChunkSize = 124;
state->m_oscClockFreq = 0;
state->m_smartAntInverted = false;
@@ -1846,6 +1847,7 @@
*/
switch (oMode) {
case OM_DVBT:
+ dprintk(1, ": DVB-T\n");
state->m_OperationMode = oMode;
status = SetDVBTStandard(state, oMode);
if (status < 0)
@@ -1853,6 +1855,8 @@
break;
case OM_QAM_ITU_A: /* fallthrough */
case OM_QAM_ITU_C:
+ dprintk(1, ": DVB-C Annex %c\n",
+ (state->m_OperationMode == OM_QAM_ITU_A) ? 'A' : 'C');
state->m_OperationMode = oMode;
status = SetQAMStandard(state, oMode);
if (status < 0)
@@ -6182,7 +6186,10 @@
dprintk(1, "\n");
if (mutex_trylock(&state->ctlock) == 0)
return -EBUSY;
- SetOperationMode(state, OM_QAM_ITU_A);
+ if (state->m_itut_annex_c)
+ SetOperationMode(state, OM_QAM_ITU_C);
+ else
+ SetOperationMode(state, OM_QAM_ITU_A);
return 0;
}
@@ -6218,6 +6225,12 @@
return -EINVAL;
}
+ if (fe->ops.info.type == FE_QAM) {
+ if (fe->dtv_property_cache.rolloff == ROLLOFF_13)
+ state->m_itut_annex_c = true;
+ else
+ state->m_itut_annex_c = false;
+ }
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 1);
@@ -6423,6 +6436,7 @@
state->no_i2c_bridge = config->no_i2c_bridge;
state->antenna_gpio = config->antenna_gpio;
state->antenna_dvbt = config->antenna_dvbt;
+ state->m_ChunkSize = config->chunk_size;
/* NOTE: as more UIO bits will be used, add them to the mask */
state->UIO_mask = config->antenna_gpio;
diff -Naur linux-3.2.1/drivers/media/dvb/frontends/drxk_hard.h linux-3.2.1.patch/drivers/media/dvb/frontends/drxk_hard.h
--- linux-3.2.1/drivers/media/dvb/frontends/drxk_hard.h 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/dvb/frontends/drxk_hard.h 2012-01-22 15:39:13.798727880 +0100
@@ -263,6 +263,8 @@
u8 m_TSDataStrength;
u8 m_TSClockkStrength;
+ bool m_itut_annex_c; /* If true, uses ITU-T DVB-C Annex C, instead of Annex A */
+
enum DRXMPEGStrWidth_t m_widthSTR; /**< MPEG start width */
u32 m_mpegTsStaticBitrate; /**< Maximum bitrate in b/s in case
static clockrate is selected */
diff -Naur linux-3.2.1/drivers/media/dvb/frontends/tda18271c2dd.c linux-3.2.1.patch/drivers/media/dvb/frontends/tda18271c2dd.c
--- linux-3.2.1/drivers/media/dvb/frontends/tda18271c2dd.c 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/dvb/frontends/tda18271c2dd.c 2012-01-22 15:38:39.024091895 +0100
@@ -1123,20 +1123,6 @@
return 0;
}
-/*
- * As defined on EN 300 429 Annex A and on ITU-T J.83 annex A, the DVB-C
- * roll-off factor is 0.15.
- * According with the specs, the amount of the needed bandwith is given by:
- * Bw = Symbol_rate * (1 + 0.15)
- * As such, the maximum symbol rate supported by 6 MHz is
- * max_symbol_rate = 6 MHz / 1.15 = 5217391 Bauds
- *NOTE: For ITU-T J.83 Annex C, the roll-off factor is 0.13. So:
- * max_symbol_rate = 6 MHz / 1.13 = 5309735 Baud
- * That means that an adjustment is needed for Japan,
- * but, as currently DRX-K is hardcoded to Annex A, let's stick
- * with 0.15 roll-off factor.
- */
-#define MAX_SYMBOL_RATE_6MHz 5217391
static int set_params(struct dvb_frontend *fe,
struct dvb_frontend_parameters *params)
@@ -1144,6 +1130,7 @@
struct tda_state *state = fe->tuner_priv;
int status = 0;
int Standard;
+ u32 bw;
state->m_Frequency = params->frequency;
@@ -1161,8 +1148,23 @@
break;
}
else if (fe->ops.info.type == FE_QAM) {
- if (params->u.qam.symbol_rate <= MAX_SYMBOL_RATE_6MHz)
+ /*
+ * Using a higher bandwidth at the tuner filter may
+ * allow inter-carrier interference.
+ * So, determine the minimal channel spacing, in order
+ * to better adjust the tuner filter.
+ * According with ITU-T J.83, the bandwidth is given by:
+ * bw = Simbol Rate * (1 + roll_off), where the roll_off
+ * is equal to 0.15 for Annex A, and 0.13 for annex C
+ */
+ if (fe->dtv_property_cache.rolloff == ROLLOFF_13)
+ bw = (params->u.qam.symbol_rate * 13) / 10;
+ else
+ bw = (params->u.qam.symbol_rate * 15) / 10;
+ if (bw <= 6000000)
Standard = HF_DVBC_6MHZ;
+ else if (bw <= 7000000)
+ Standard = HF_DVBC_7MHZ;
else
Standard = HF_DVBC_8MHZ;
} else
diff -Naur linux-3.2.1/drivers/media/rc/keymaps/rc-hauppauge.c linux-3.2.1.patch/drivers/media/rc/keymaps/rc-hauppauge.c
--- linux-3.2.1/drivers/media/rc/keymaps/rc-hauppauge.c 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/rc/keymaps/rc-hauppauge.c 2012-01-22 15:39:04.767562712 +0100
@@ -183,6 +183,57 @@
{ 0x1d3f, KEY_HOME },
/*
+ * Keycodes for PT# R-005 remote bundled with Haupauge HVR-930C
+ * Keycodes start with address = 0x1c
+ */
+ { 0x1c3b, KEY_GOTO },
+ { 0x1c3d, KEY_POWER },
+
+ { 0x1c14, KEY_UP },
+ { 0x1c15, KEY_DOWN },
+ { 0x1c16, KEY_LEFT },
+ { 0x1c17, KEY_RIGHT },
+ { 0x1c25, KEY_OK },
+
+ { 0x1c00, KEY_0 },
+ { 0x1c01, KEY_1 },
+ { 0x1c02, KEY_2 },
+ { 0x1c03, KEY_3 },
+ { 0x1c04, KEY_4 },
+ { 0x1c05, KEY_5 },
+ { 0x1c06, KEY_6 },
+ { 0x1c07, KEY_7 },
+ { 0x1c08, KEY_8 },
+ { 0x1c09, KEY_9 },
+
+ { 0x1c1f, KEY_EXIT }, /* BACK */
+ { 0x1c0d, KEY_MENU },
+ { 0x1c1c, KEY_TV },
+
+ { 0x1c10, KEY_VOLUMEUP },
+ { 0x1c11, KEY_VOLUMEDOWN },
+
+ { 0x1c20, KEY_CHANNELUP },
+ { 0x1c21, KEY_CHANNELDOWN },
+
+ { 0x1c0f, KEY_MUTE },
+ { 0x1c12, KEY_PREVIOUS }, /* Prev */
+
+ { 0x1c36, KEY_STOP },
+ { 0x1c37, KEY_RECORD },
+
+ { 0x1c24, KEY_LAST }, /* <| */
+ { 0x1c1e, KEY_NEXT }, /* >| */
+
+ { 0x1c0a, KEY_TEXT },
+ { 0x1c0e, KEY_SUBTITLE }, /* CC */
+
+ { 0x1c32, KEY_REWIND },
+ { 0x1c30, KEY_PAUSE },
+ { 0x1c35, KEY_PLAY },
+ { 0x1c34, KEY_FASTFORWARD },
+
+ /*
* Keycodes for the old Black Remote Controller
* This one also uses RC-5 protocol
* Keycodes start with address = 0x00
diff -Naur linux-3.2.1/drivers/media/video/em28xx/em28xx-cards.c linux-3.2.1.patch/drivers/media/video/em28xx/em28xx-cards.c
--- linux-3.2.1/drivers/media/video/em28xx/em28xx-cards.c 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/video/em28xx/em28xx-cards.c 2012-01-22 15:39:04.921565528 +0100
@@ -336,6 +336,23 @@
{ -1, -1, -1, -1},
};
+static struct em28xx_reg_seq hauppauge_930c_gpio[] = {
+ {EM2874_R80_GPIO, 0x6f, 0xff, 10},
+ {EM2874_R80_GPIO, 0x4f, 0xff, 10}, /* xc5000 reset */
+ {EM2874_R80_GPIO, 0x6f, 0xff, 10},
+ {EM2874_R80_GPIO, 0x4f, 0xff, 10},
+ { -1, -1, -1, -1},
+};
+
+#if 0
+static struct em28xx_reg_seq hauppauge_930c_digital[] = {
+ {EM2874_R80_GPIO, 0xf6, 0xff, 10},
+ {EM2874_R80_GPIO, 0xe6, 0xff, 100},
+ {EM2874_R80_GPIO, 0xa6, 0xff, 10},
+ { -1, -1, -1, -1},
+};
+#endif
+
/*
* Board definitions
*/
@@ -887,7 +904,25 @@
.tuner_addr = 0x41,
.dvb_gpio = terratec_h5_digital, /* FIXME: probably wrong */
.tuner_gpio = terratec_h5_gpio,
+#else
+ .tuner_type = TUNER_ABSENT,
+#endif
+ .i2c_speed = EM2874_I2C_SECONDARY_BUS_SELECT |
+ EM28XX_I2C_CLK_WAIT_ENABLE |
+ EM28XX_I2C_FREQ_400_KHZ,
+ },
+ [EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C] = {
+ .name = "Hauppauge WinTV HVR 930C",
+ .has_dvb = 1,
+#if 0 /* FIXME: Add analog support */
+ .tuner_type = TUNER_XC5000,
+ .tuner_addr = 0x41,
+ .dvb_gpio = hauppauge_930c_digital,
+ .tuner_gpio = hauppauge_930c_gpio,
+#else
+ .tuner_type = TUNER_ABSENT,
#endif
+ .ir_codes = RC_MAP_HAUPPAUGE,
.i2c_speed = EM2874_I2C_SECONDARY_BUS_SELECT |
EM28XX_I2C_CLK_WAIT_ENABLE |
EM28XX_I2C_FREQ_400_KHZ,
@@ -1975,6 +2010,8 @@
.driver_info = EM28174_BOARD_PCTV_290E },
{ USB_DEVICE(0x2013, 0x024c),
.driver_info = EM28174_BOARD_PCTV_460E },
+ { USB_DEVICE(0x2040, 0x1605),
+ .driver_info = EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C },
{ },
};
MODULE_DEVICE_TABLE(usb, em28xx_id_table);
@@ -2028,10 +2065,10 @@
int rc = 0;
struct em28xx *dev = ptr;
- if (dev->tuner_type != TUNER_XC2028)
+ if (dev->tuner_type != TUNER_XC2028 && dev->tuner_type != TUNER_XC5000)
return 0;
- if (command != XC2028_TUNER_RESET)
+ if (command != XC2028_TUNER_RESET && command != XC5000_TUNER_RESET)
return 0;
rc = em28xx_gpio_set(dev, dev->board.tuner_gpio);
diff -Naur linux-3.2.1/drivers/media/video/em28xx/em28xx-dvb.c linux-3.2.1.patch/drivers/media/video/em28xx/em28xx-dvb.c
--- linux-3.2.1/drivers/media/video/em28xx/em28xx-dvb.c 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/video/em28xx/em28xx-dvb.c 2012-01-22 15:39:13.799727898 +0100
@@ -316,6 +316,14 @@
.microcode_name = "dvb-usb-terratec-h5-drxk.fw",
};
+struct drxk_config hauppauge_930c_drxk = {
+ .adr = 0x29,
+ .single_master = 1,
+ .no_i2c_bridge = 1,
+ .microcode_name = "dvb-usb-hauppauge-hvr930c-drxk.fw",
+ .chunk_size = 56,
+};
+
static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable)
{
struct em28xx_dvb *dvb = fe->sec_priv;
@@ -334,6 +342,73 @@
return status;
}
+static void hauppauge_hvr930c_init(struct em28xx *dev)
+{
+ int i;
+
+ struct em28xx_reg_seq hauppauge_hvr930c_init[] = {
+ {EM2874_R80_GPIO, 0xff, 0xff, 0x65},
+ {EM2874_R80_GPIO, 0xfb, 0xff, 0x32},
+ {EM2874_R80_GPIO, 0xff, 0xff, 0xb8},
+ { -1, -1, -1, -1},
+ };
+ struct em28xx_reg_seq hauppauge_hvr930c_end[] = {
+ {EM2874_R80_GPIO, 0xef, 0xff, 0x01},
+ {EM2874_R80_GPIO, 0xaf, 0xff, 0x65},
+ {EM2874_R80_GPIO, 0xef, 0xff, 0x76},
+ {EM2874_R80_GPIO, 0xef, 0xff, 0x01},
+ {EM2874_R80_GPIO, 0xcf, 0xff, 0x0b},
+ {EM2874_R80_GPIO, 0xef, 0xff, 0x40},
+
+ {EM2874_R80_GPIO, 0xcf, 0xff, 0x65},
+ {EM2874_R80_GPIO, 0xef, 0xff, 0x65},
+ {EM2874_R80_GPIO, 0xcf, 0xff, 0x0b},
+ {EM2874_R80_GPIO, 0xef, 0xff, 0x65},
+
+ { -1, -1, -1, -1},
+ };
+
+ struct {
+ unsigned char r[4];
+ int len;
+ } regs[] = {
+ {{ 0x06, 0x02, 0x00, 0x31 }, 4},
+ {{ 0x01, 0x02 }, 2},
+ {{ 0x01, 0x02, 0x00, 0xc6 }, 4},
+ {{ 0x01, 0x00 }, 2},
+ {{ 0x01, 0x00, 0xff, 0xaf }, 4},
+ {{ 0x01, 0x00, 0x03, 0xa0 }, 4},
+ {{ 0x01, 0x00 }, 2},
+ {{ 0x01, 0x00, 0x73, 0xaf }, 4},
+ {{ 0x04, 0x00 }, 2},
+ {{ 0x00, 0x04 }, 2},
+ {{ 0x00, 0x04, 0x00, 0x0a }, 4},
+ {{ 0x04, 0x14 }, 2},
+ {{ 0x04, 0x14, 0x00, 0x00 }, 4},
+ };
+
+ em28xx_gpio_set(dev, hauppauge_hvr930c_init);
+ em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, 0x40);
+ msleep(10);
+ em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, 0x44);
+ msleep(10);
+
+ dev->i2c_client.addr = 0x82 >> 1;
+
+ for (i = 0; i < ARRAY_SIZE(regs); i++)
+ i2c_master_send(&dev->i2c_client, regs[i].r, regs[i].len);
+ em28xx_gpio_set(dev, hauppauge_hvr930c_end);
+
+ msleep(100);
+
+ em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, 0x44);
+ msleep(30);
+
+ em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, 0x45);
+ msleep(10);
+
+}
+
static void terratec_h5_init(struct em28xx *dev)
{
int i;
@@ -788,6 +863,51 @@
mfe_shared = 1;
}
break;
+ case EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C:
+ hauppauge_hvr930c_init(dev);
+
+ dvb->dont_attach_fe1 = 1;
+
+ dvb->fe[0] = dvb_attach(drxk_attach,
+ &hauppauge_930c_drxk, &dev->i2c_adap,
+ &dvb->fe[1]);
+ if (!dvb->fe[0]) {
+ result = -EINVAL;
+ goto out_free;
+ }
+ /* FIXME: do we need a pll semaphore? */
+ dvb->fe[0]->sec_priv = dvb;
+ sema_init(&dvb->pll_mutex, 1);
+ dvb->gate_ctrl = dvb->fe[0]->ops.i2c_gate_ctrl;
+ dvb->fe[0]->ops.i2c_gate_ctrl = drxk_gate_ctrl;
+ dvb->fe[1]->id = 1;
+
+ /* Attach xc5000 */
+ struct xc5000_config cfg;
+ memset(&cfg, 0, sizeof(cfg));
+ cfg.i2c_address = 0x61;
+ cfg.if_khz = 4000;
+
+ if (dvb->fe[0]->ops.i2c_gate_ctrl)
+ dvb->fe[0]->ops.i2c_gate_ctrl(dvb->fe[0], 1);
+ if (!dvb_attach(xc5000_attach, dvb->fe[0], &dev->i2c_adap,
+ &cfg)) {
+ result = -EINVAL;
+ goto out_free;
+ }
+
+ if (dvb->fe[0]->ops.i2c_gate_ctrl)
+ dvb->fe[0]->ops.i2c_gate_ctrl(dvb->fe[0], 0);
+
+ /* Hack - needed by drxk/tda18271c2dd */
+ dvb->fe[1]->tuner_priv = dvb->fe[0]->tuner_priv;
+ memcpy(&dvb->fe[1]->ops.tuner_ops,
+ &dvb->fe[0]->ops.tuner_ops,
+ sizeof(dvb->fe[0]->ops.tuner_ops));
+
+ mfe_shared = 1;
+
+ break;
case EM2884_BOARD_TERRATEC_H5:
terratec_h5_init(dev);
@@ -798,7 +918,6 @@
result = -EINVAL;
goto out_free;
}
-
/* FIXME: do we need a pll semaphore? */
dvb->fe[0]->sec_priv = dvb;
sema_init(&dvb->pll_mutex, 1);
@@ -822,6 +941,8 @@
&dvb->fe[0]->ops.tuner_ops,
sizeof(dvb->fe[0]->ops.tuner_ops));
+ mfe_shared = 1;
+
break;
case EM28174_BOARD_PCTV_460E:
/* attach demod */
@@ -845,6 +966,8 @@
}
/* define general-purpose callback pointer */
dvb->fe[0]->callback = em28xx_tuner_callback;
+ if (dvb->fe[1])
+ dvb->fe[1]->callback = em28xx_tuner_callback;
/* register everything */
result = em28xx_register_dvb(dvb, THIS_MODULE, dev, &dev->udev->dev);
diff -Naur linux-3.2.1/drivers/media/video/em28xx/em28xx.h linux-3.2.1.patch/drivers/media/video/em28xx/em28xx.h
--- linux-3.2.1/drivers/media/video/em28xx/em28xx.h 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/drivers/media/video/em28xx/em28xx.h 2012-01-22 15:38:45.930218200 +0100
@@ -38,6 +38,7 @@
#include <media/videobuf-dvb.h>
#endif
#include "tuner-xc2028.h"
+#include "xc5000.h"
#include "em28xx-reg.h"
/* Boards supported by driver */
@@ -121,6 +122,7 @@
#define EM28174_BOARD_PCTV_290E 78
#define EM2884_BOARD_TERRATEC_H5 79
#define EM28174_BOARD_PCTV_460E 80
+#define EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C 81
/* Limits minimum and default number of buffers */
#define EM28XX_MIN_BUF 4
diff -Naur linux-3.2.1/include/linux/dvb/frontend.h linux-3.2.1.patch/include/linux/dvb/frontend.h
--- linux-3.2.1/include/linux/dvb/frontend.h 2012-01-12 20:42:45.000000000 +0100
+++ linux-3.2.1.patch/include/linux/dvb/frontend.h 2012-01-22 15:52:29.793509493 +0100
@@ -329,6 +329,8 @@
ROLLOFF_20,
ROLLOFF_25,
ROLLOFF_AUTO,
+ ROLLOFF_15, /* DVB-C Annex A */
+ ROLLOFF_13, /* DVB-C Annex C */
} fe_rolloff_t;
typedef enum fe_delivery_system {

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,90 @@
cx23885: add TeVii s471 card.
From: Igor M. Liplianin <liplianin@me.by>
New TeVii s471 card is like s470 model,
but there is different LNB power control.
Signed-off-by: Igor M. Liplianin <liplianin@me.by>
diff --git a/drivers/media/dvb/frontends/ds3000.c b/drivers/media/dvb/frontends/ds3000.c
index 90bf573..6f4901a 100644
--- a/drivers/media/dvb/frontends/ds3000.c
+++ b/drivers/media/dvb/frontends/ds3000.c
@@ -1129,7 +1129,10 @@ static int ds3000_set_frontend(struct dvb_frontend *fe,
ds3000_writereg(state,
ds3000_dvbs2_init_tab[i],
ds3000_dvbs2_init_tab[i + 1]);
- ds3000_writereg(state, 0xfe, 0x98);
+ if (c->symbol_rate >= 30000000)
+ ds3000_writereg(state, 0xfe, 0x54);
+ else
+ ds3000_writereg(state, 0xfe, 0x98);
break;
default:
return 1;
diff --git a/drivers/media/video/cx23885/cx23885-cards.c b/drivers/media/video/cx23885/cx23885-cards.c
index ab8be9a..76e83e4 100644
--- a/drivers/media/video/cx23885/cx23885-cards.c
+++ b/drivers/media/video/cx23885/cx23885-cards.c
@@ -452,6 +452,10 @@ struct cx23885_board cx23885_boards[] = {
.portc = CX23885_MPEG_DVB,
},
+ [CX23885_BOARD_TEVII_S471] = {
+ .name = "TeVii S471",
+ .portb = CX23885_MPEG_DVB,
+ },
};
const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
@@ -663,6 +667,10 @@ struct cx23885_subid cx23885_subids[] = {
.subvendor = 0x4254,
.subdevice = 0x0952,
.card = CX23885_BOARD_DVBSKY_S952,
+ }, {
+ .subvendor = 0xd471,
+ .subdevice = 0x9022,
+ .card = CX23885_BOARD_TEVII_S471,
},
};
const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids);
@@ -1485,6 +1493,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
case CX23885_BOARD_BST_PS8512:
case CX23885_BOARD_DVBSKY_S950:
case CX23885_BOARD_TEVII_S470:
+ case CX23885_BOARD_TEVII_S471:
case CX23885_BOARD_DVBWORLD_2005:
ts1->gen_ctrl_val = 0x5; /* Parallel */
ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
diff --git a/drivers/media/video/cx23885/cx23885-dvb.c b/drivers/media/video/cx23885/cx23885-dvb.c
index af9c459..9f68250 100644
--- a/drivers/media/video/cx23885/cx23885-dvb.c
+++ b/drivers/media/video/cx23885/cx23885-dvb.c
@@ -1174,6 +1174,14 @@ static int dvb_register(struct cx23885_tsport *port)
break;
}
break;
+ case CX23885_BOARD_TEVII_S471:
+ i2c_bus = &dev->i2c_bus[1];
+
+ fe0->dvb.frontend = dvb_attach(ds3000_attach,
+ &tevii_ds3000_config,
+ &i2c_bus->i2c_adap);
+ break;
+
default:
printk(KERN_INFO "%s: The frontend of your DVB/ATSC card "
" isn't supported yet\n",
diff --git a/drivers/media/video/cx23885/cx23885.h b/drivers/media/video/cx23885/cx23885.h
index 6f058f1..19cebdf 100644
--- a/drivers/media/video/cx23885/cx23885.h
+++ b/drivers/media/video/cx23885/cx23885.h
@@ -90,6 +90,7 @@
#define CX23885_BOARD_BST_PS8512 (CX23885_BOARD_MPX885+1)
#define CX23885_BOARD_DVBSKY_S952 (CX23885_BOARD_BST_PS8512+1)
#define CX23885_BOARD_DVBSKY_S950 (CX23885_BOARD_DVBSKY_S952+1)
+#define CX23885_BOARD_TEVII_S471 (CX23885_BOARD_DVBSKY_S950+1)
#define GPIO_0 0x00000001
#define GPIO_1 0x00000002

View File

@ -0,0 +1,141 @@
diff --git a/drivers/media/dvb/frontends/stb0899_algo.c b/drivers/media/dvb/frontends/stb0899_algo.c
index 2da55ec..3efde1e 100644
--- a/drivers/media/dvb/frontends/stb0899_algo.c
+++ b/drivers/media/dvb/frontends/stb0899_algo.c
@@ -206,7 +206,6 @@ static enum stb0899_status stb0899_check_tmg(struct stb0899_state *state)
static enum stb0899_status stb0899_search_tmg(struct stb0899_state *state)
{
struct stb0899_internal *internal = &state->internal;
- struct stb0899_params *params = &state->params;
short int derot_step, derot_freq = 0, derot_limit, next_loop = 3;
int index = 0;
@@ -216,10 +215,9 @@ static enum stb0899_status stb0899_search_tmg(struct stb0899_state *state)
/* timing loop computation & symbol rate optimisation */
derot_limit = (internal->sub_range / 2L) / internal->mclk;
- derot_step = (params->srate / 2L) / internal->mclk;
+ derot_step = internal->derot_step * 4; /* dertot_step = decreasing delta */
while ((stb0899_check_tmg(state) != TIMINGOK) && next_loop) {
- index++;
derot_freq += index * internal->direction * derot_step; /* next derot zig zag position */
if (abs(derot_freq) > derot_limit)
@@ -230,6 +228,7 @@ static enum stb0899_status stb0899_search_tmg(struct stb0899_state *state)
STB0899_SETFIELD_VAL(CFRL, cfr[1], LSB(state->config->inversion * derot_freq));
stb0899_write_regs(state, STB0899_CFRM, cfr, 2); /* derotator frequency */
}
+ index++;
internal->direction = -internal->direction; /* Change zigzag direction */
}
@@ -278,14 +277,18 @@ static enum stb0899_status stb0899_search_carrier(struct stb0899_state *state)
{
struct stb0899_internal *internal = &state->internal;
- short int derot_freq = 0, last_derot_freq = 0, derot_limit, next_loop = 3;
+ short int derot_freq = 0, last_derot_freq = 0, derot_limit, derot_step, next_loop = 3;
int index = 0;
+ int base_freq;
u8 cfr[2];
u8 reg;
internal->status = NOCARRIER;
derot_limit = (internal->sub_range / 2L) / internal->mclk;
derot_freq = internal->derot_freq;
+ derot_step = internal->derot_step * 2;
+ last_derot_freq = internal->derot_freq;
+ base_freq = internal->derot_freq;
reg = stb0899_read_reg(state, STB0899_CFD);
STB0899_SETFIELD_VAL(CFD_ON, reg, 1);
@@ -294,11 +297,10 @@ static enum stb0899_status stb0899_search_carrier(struct stb0899_state *state)
do {
dprintk(state->verbose, FE_DEBUG, 1, "Derot Freq=%d, mclk=%d", derot_freq, internal->mclk);
if (stb0899_check_carrier(state) == NOCARRIER) {
- index++;
last_derot_freq = derot_freq;
- derot_freq += index * internal->direction * internal->derot_step; /* next zig zag derotator position */
+ derot_freq += index * internal->direction * derot_step; /* next zig zag derotator position */
- if(abs(derot_freq) > derot_limit)
+ if (derot_freq > base_freq + derot_limit || derot_freq < base_freq - derot_limit)
next_loop--;
if (next_loop) {
@@ -310,9 +312,10 @@ static enum stb0899_status stb0899_search_carrier(struct stb0899_state *state)
STB0899_SETFIELD_VAL(CFRL, cfr[1], LSB(state->config->inversion * derot_freq));
stb0899_write_regs(state, STB0899_CFRM, cfr, 2); /* derotator frequency */
}
+ index++;
+ internal->direction = -internal->direction; /* Change zigzag direction */
}
- internal->direction = -internal->direction; /* Change zigzag direction */
} while ((internal->status != CARRIEROK) && next_loop);
if (internal->status == CARRIEROK) {
@@ -338,6 +341,7 @@ static enum stb0899_status stb0899_check_data(struct stb0899_state *state)
int lock = 0, index = 0, dataTime = 500, loop;
u8 reg;
+ msleep(1);
internal->status = NODATA;
/* RESET FEC */
@@ -348,6 +352,7 @@ static enum stb0899_status stb0899_check_data(struct stb0899_state *state)
reg = stb0899_read_reg(state, STB0899_TSTRES);
STB0899_SETFIELD_VAL(FRESACS, reg, 0);
stb0899_write_reg(state, STB0899_TSTRES, reg);
+ msleep(1);
if (params->srate <= 2000000)
dataTime = 2000;
@@ -360,6 +365,7 @@ static enum stb0899_status stb0899_check_data(struct stb0899_state *state)
stb0899_write_reg(state, STB0899_DSTATUS2, 0x00); /* force search loop */
while (1) {
+ msleep(1); // Alex: added 1 mSec
/* WARNING! VIT LOCKED has to be tested before VIT_END_LOOOP */
reg = stb0899_read_reg(state, STB0899_VSTATUS);
lock = STB0899_GETFIELD(VSTATUS_LOCKEDVIT, reg);
@@ -387,20 +393,21 @@ static enum stb0899_status stb0899_search_data(struct stb0899_state *state)
short int derot_freq, derot_step, derot_limit, next_loop = 3;
u8 cfr[2];
u8 reg;
- int index = 1;
+ int index = 0;
+ int base_freq;
struct stb0899_internal *internal = &state->internal;
- struct stb0899_params *params = &state->params;
- derot_step = (params->srate / 4L) / internal->mclk;
+ derot_step = internal->derot_step;
derot_limit = (internal->sub_range / 2L) / internal->mclk;
derot_freq = internal->derot_freq;
+ base_freq = internal->derot_freq;
do {
if ((internal->status != CARRIEROK) || (stb0899_check_data(state) != DATAOK)) {
derot_freq += index * internal->direction * derot_step; /* next zig zag derotator position */
- if (abs(derot_freq) > derot_limit)
+ if (derot_freq > base_freq + derot_limit || derot_freq < base_freq - derot_limit)
next_loop--;
if (next_loop) {
@@ -414,9 +421,9 @@ static enum stb0899_status stb0899_search_data(struct stb0899_state *state)
stb0899_write_regs(state, STB0899_CFRM, cfr, 2); /* derotator frequency */
stb0899_check_carrier(state);
- index++;
}
}
+ index++;
internal->direction = -internal->direction; /* change zig zag direction */
} while ((internal->status != DATAOK) && next_loop);
--
1.7.1

View File

@ -0,0 +1,46 @@
diff -Naur linux-3.2.21/drivers/media/dvb/dvb-usb/dw2102.c linux-3.2.21.patch/drivers/media/dvb/dvb-usb/dw2102.c
--- linux-3.2.21/drivers/media/dvb/dvb-usb/dw2102.c 2012-06-20 00:18:30.000000000 +0200
+++ linux-3.2.21.patch/drivers/media/dvb/dvb-usb/dw2102.c 2012-06-28 14:08:50.721691934 +0200
@@ -1181,6 +1181,14 @@
{
u8 obuf[3] = { 0xe, 0x80, 0 };
u8 ibuf[] = { 0 };
+
+ if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0)
+ err("command 0x0e transfer failed.");
+
+ //power on su3000
+ obuf[0] = 0xe;
+ obuf[1] = 0x02;
+ obuf[2] = 1;
if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0)
err("command 0x0e transfer failed.");
@@ -1448,6 +1456,7 @@
{USB_DEVICE(0x3034, 0x7500)},
{USB_DEVICE(0x1f4d, 0x3000)},
{USB_DEVICE(USB_VID_TERRATEC, 0x00a8)},
+ {USB_DEVICE(USB_VID_TERRATEC, 0x00b0)},
{USB_DEVICE(0x9022, USB_PID_TEVII_S480_1)},
{USB_DEVICE(0x9022, USB_PID_TEVII_S480_2)},
{USB_DEVICE(0x1f4d, 0x3100)},
@@ -1839,7 +1848,7 @@
}},
}
},
- .num_device_descs = 3,
+ .num_device_descs = 4,
.devices = {
{ "SU3000HD DVB-S USB2.0",
{ &dw2102_table[10], NULL },
@@ -1853,6 +1862,10 @@
{ &dw2102_table[14], NULL },
{ NULL },
},
+ { "Terratec Cinergy S2 USB HD Rev.2",
+ { &dw2102_table[17], NULL },
+ { NULL },
+ },
}
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,45 @@
From 35621030c0bd5cb4f1a345cf2b4a97e290bc244a Mon Sep 17 00:00:00 2001
From: Mauro Carvalho Chehab <mchehab@redhat.com>
Date: Fri, 23 Sep 2011 13:03:42 -0300
Subject: [PATCH] [media] xc5000: Add support for get_if_frequency
This is needed for devices with DRX-K and xc5000.
Tested with a HVR 930C hardware.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
---
drivers/media/common/tuners/xc5000.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/drivers/media/common/tuners/xc5000.c b/drivers/media/common/tuners/xc5000.c
index 88b329c..ecd1f95 100644
--- a/drivers/media/common/tuners/xc5000.c
+++ b/drivers/media/common/tuners/xc5000.c
@@ -968,6 +968,14 @@ static int xc5000_get_frequency(struct dvb_frontend *fe, u32 *freq)
return 0;
}
+static int xc5000_get_if_frequency(struct dvb_frontend *fe, u32 *freq)
+{
+ struct xc5000_priv *priv = fe->tuner_priv;
+ dprintk(1, "%s()\n", __func__);
+ *freq = priv->if_khz * 1000;
+ return 0;
+}
+
static int xc5000_get_bandwidth(struct dvb_frontend *fe, u32 *bw)
{
struct xc5000_priv *priv = fe->tuner_priv;
@@ -1108,6 +1116,7 @@ static const struct dvb_tuner_ops xc5000_tuner_ops = {
.set_params = xc5000_set_params,
.set_analog_params = xc5000_set_analog_params,
.get_frequency = xc5000_get_frequency,
+ .get_if_frequency = xc5000_get_if_frequency,
.get_bandwidth = xc5000_get_bandwidth,
.get_status = xc5000_get_status
};
--
1.7.2.5

View File

@ -19,7 +19,7 @@
################################################################################
PKG_NAME="xbmc-frodo-theme-Confluence"
PKG_VERSION="ba2c709"
PKG_VERSION="a642b33"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -54,8 +54,8 @@ fi
# set cpu's to 'conservative'
( usleep 15000000
progress "set cpu's to 'conservative'"
cpupower frequency-set -g conservative > /dev/null 2>&1
progress "set cpu's to 'ondemand'"
cpupower frequency-set -g ondemand > /dev/null 2>&1
)&
# prevent restrating XBMC at reboot or shutdown

View File

@ -19,7 +19,7 @@
################################################################################
PKG_NAME="xbmc-frodo"
PKG_VERSION="ba2c709"
PKG_VERSION="a642b33"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"

View File

@ -1,7 +1,7 @@
diff -Naur xbmc-frodo-5ea1d22/configure.in xbmc-frodo-5ea1d22.patch/configure.in
--- xbmc-frodo-5ea1d22/configure.in 2012-09-05 13:27:56.000000000 +0200
+++ xbmc-frodo-5ea1d22.patch/configure.in 2012-09-05 17:55:46.727316107 +0200
@@ -437,6 +437,12 @@
diff -Naur xbmc-frodo-a642b33/configure.in xbmc-frodo-a642b33.patch/configure.in
--- xbmc-frodo-a642b33/configure.in 2012-09-25 15:44:35.000000000 +0200
+++ xbmc-frodo-a642b33.patch/configure.in 2012-09-25 16:17:31.666076439 +0200
@@ -445,6 +445,12 @@
[use_texturepacker=$enableval],
[use_texturepacker=auto])
@ -14,7 +14,7 @@ diff -Naur xbmc-frodo-5ea1d22/configure.in xbmc-frodo-5ea1d22.patch/configure.in
AC_ARG_WITH([lirc-device],
[AS_HELP_STRING([--with-lirc-device=file],
[specify the default LIRC device (default is /dev/lircd)])],
@@ -570,8 +576,7 @@
@@ -584,8 +590,7 @@
use_cpu=cortex-a8
check_sdl_arch=[`file /opt/local/lib/libSDL_image.dylib | awk '{V=7; print $V}'`]
if test "x$check_sdl_arch" = "xi386"; then
@ -24,7 +24,7 @@ diff -Naur xbmc-frodo-5ea1d22/configure.in xbmc-frodo-5ea1d22.patch/configure.in
else
use_texturepacker=no
fi
@@ -587,8 +592,6 @@
@@ -601,8 +606,6 @@
*86*-apple-darwin*)
use_joystick=no
use_vtbdecoder=no
@ -33,7 +33,7 @@ diff -Naur xbmc-frodo-5ea1d22/configure.in xbmc-frodo-5ea1d22.patch/configure.in
ARCH="x86-osx"
AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX -D_LINUX")
;;
@@ -1938,13 +1941,13 @@
@@ -1987,13 +1990,13 @@
USE_TEXTUREPACKER_NATIVE=0
if test "x$use_texturepacker" != "xno"; then
@ -52,9 +52,9 @@ diff -Naur xbmc-frodo-5ea1d22/configure.in xbmc-frodo-5ea1d22.patch/configure.in
fi
else
final_message="$final_message\n TexturePacker:No"
diff -Naur xbmc-frodo-5ea1d22/lib/libsquish/Makefile.in xbmc-frodo-5ea1d22.patch/lib/libsquish/Makefile.in
--- xbmc-frodo-5ea1d22/lib/libsquish/Makefile.in 2012-09-05 13:28:31.000000000 +0200
+++ xbmc-frodo-5ea1d22.patch/lib/libsquish/Makefile.in 2012-09-05 17:56:05.017178267 +0200
diff -Naur xbmc-frodo-a642b33/lib/libsquish/Makefile.in xbmc-frodo-a642b33.patch/lib/libsquish/Makefile.in
--- xbmc-frodo-a642b33/lib/libsquish/Makefile.in 2012-09-25 15:45:45.000000000 +0200
+++ xbmc-frodo-a642b33.patch/lib/libsquish/Makefile.in 2012-09-25 16:17:31.666076439 +0200
@@ -11,26 +11,25 @@
singlecolourfit.cpp \
squish.cpp
@ -93,9 +93,9 @@ diff -Naur xbmc-frodo-5ea1d22/lib/libsquish/Makefile.in xbmc-frodo-5ea1d22.patch
endif
include ../../Makefile.include
diff -Naur xbmc-frodo-5ea1d22/tools/TexturePacker/Makefile.in xbmc-frodo-5ea1d22.patch/tools/TexturePacker/Makefile.in
--- xbmc-frodo-5ea1d22/tools/TexturePacker/Makefile.in 2012-09-05 13:28:16.000000000 +0200
+++ xbmc-frodo-5ea1d22.patch/tools/TexturePacker/Makefile.in 2012-09-05 17:55:49.927291649 +0200
diff -Naur xbmc-frodo-a642b33/tools/TexturePacker/Makefile.in xbmc-frodo-a642b33.patch/tools/TexturePacker/Makefile.in
--- xbmc-frodo-a642b33/tools/TexturePacker/Makefile.in 2012-09-25 15:44:57.000000000 +0200
+++ xbmc-frodo-a642b33.patch/tools/TexturePacker/Makefile.in 2012-09-25 16:19:08.889015705 +0200
@@ -1,56 +1,54 @@
-DEFINES += -D_LINUX -DUSE_LZO_PACKING
+DEFINES += -D_LINUX -DUSE_LZO_PACKING
@ -179,7 +179,7 @@ diff -Naur xbmc-frodo-5ea1d22/tools/TexturePacker/Makefile.in xbmc-frodo-5ea1d22
ifeq (@USE_TEXTUREPACKER_NATIVE@,1)
# TexturePacker run native on build system, build it with native tools
$(TARGET): $(SRCS)
$(TARGET): $(SRCS) @abs_top_srcdir@/xbmc/guilib/XBTF.h
- g++ $(DEFINES) $(NATIVE_ARCH) $(NATIVE_CXXFLAGS) $(SRCS) $(NATIVE_LIBS) $(RPATH) -o $(TARGET)
+ make -C @abs_top_srcdir@/lib/libsquish libsquish-native.so
+ $(HOST_CXX) $(DEFINES) $(NATIVE_ARCH) $(HOST_CXXFLAGS) $(SRCS) $(HOST_LIBS) $(RPATH) -o $(TARGET)

View File

@ -0,0 +1,38 @@
From 735e49e62dc07cbe94cb75e9069a01b1b985f70f Mon Sep 17 00:00:00 2001
From: Cory Fields <theuni-nospam-@xbmc.org>
Date: Fri, 14 Sep 2012 15:35:32 -0400
Subject: [PATCH] d-r: enable dirty-regions by default
This enables the all-or-nothing mode, which means that we repaint the entire
screen if there's a single dirty region.
Also, nofliptimeout=0 is set to ensure that we never flip without rendering.
With these combined, this should be universally safe (and within spec) for all
gfx cards/drivers.
The main possible side-effect is the slow-motion effect brought about on slower
cpus that can't keep up at times and produce wild timestamps. With our improved
decoding and caching, this is now quite rare.
---
xbmc/settings/AdvancedSettings.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp
index 47aaf7e..6f75227 100644
--- a/xbmc/settings/AdvancedSettings.cpp
+++ b/xbmc/settings/AdvancedSettings.cpp
@@ -306,8 +306,8 @@ void CAdvancedSettings::Initialize()
m_canWindowed = true;
m_guiVisualizeDirtyRegions = false;
- m_guiAlgorithmDirtyRegions = 0;
- m_guiDirtyRegionNoFlipTimeout = -1;
+ m_guiAlgorithmDirtyRegions = 3;
+ m_guiDirtyRegionNoFlipTimeout = 0;
m_logEnableAirtunes = false;
m_airTunesPort = 36666;
m_airPlayPort = 36667;
--
1.7.10

View File

@ -0,0 +1,28 @@
From 7c5b281bf4403de8a02a3793188a4d735efafe9a Mon Sep 17 00:00:00 2001
From: epideme <tony.nilsson@epideme.com>
Date: Sun, 16 Sep 2012 19:57:52 +0300
Subject: [PATCH] [rbp] Allow OMXPlayer to try playing DVD/BD-iso
Now that scaling is fixed and overlays behave better, and license for MPG2 codec is available, allow iso playback with a warning in the debug log.
---
xbmc/cores/omxplayer/OMXPlayer.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp
index a3736df..1fc32b4 100644
--- a/xbmc/cores/omxplayer/OMXPlayer.cpp
+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp
@@ -590,8 +590,8 @@ bool COMXPlayer::OpenInputStream()
if (m_pInputStream && ( m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD)
|| m_pInputStream->IsStreamType(DVDSTREAM_TYPE_BLURAY) ) )
{
- CLog::Log(LOGINFO, "COMXPlayer::OpenInputStream - DVD/BD not supported");
- return false;
+ CLog::Log(LOGINFO, "COMXPlayer::OpenInputStream - DVD/BD not supported - Will try...");
+ // return false;
}
// find any available external subtitles for non dvd files
--
1.7.10

View File

@ -0,0 +1,477 @@
From 7d692ff576d0a713891908b5630ce2b8d0128f2e Mon Sep 17 00:00:00 2001
From: davilla <davilla@4pi.com>
Date: Sat, 22 Sep 2012 20:10:33 -0400
Subject: [PATCH] add the ability to run a split gui/display resolution for
embedded platforms
---
xbmc/Application.cpp | 2 +-
xbmc/GUIInfoManager.cpp | 12 +++----
xbmc/guilib/GraphicContext.cpp | 2 ++
xbmc/guilib/Resolution.h | 5 +++
xbmc/settings/GUISettings.cpp | 6 ++--
xbmc/settings/GUIWindowSettingsCategory.cpp | 10 +++---
.../GUIWindowSettingsScreenCalibration.cpp | 8 ++---
xbmc/video/windows/GUIWindowFullScreen.cpp | 8 ++---
xbmc/windowing/WinSystem.cpp | 14 ++++++---
xbmc/windowing/X11/WinSystemX11.cpp | 2 ++
xbmc/windowing/X11/WinSystemX11GLES.cpp | 2 ++
xbmc/windowing/egl/WinEGLPlatformGeneric.cpp | 11 +++----
xbmc/windowing/egl/WinEGLPlatformRaspberryPI.cpp | 10 +++---
xbmc/windowing/egl/WinSystemGLES.cpp | 33 +++++++++++++-------
xbmc/windowing/egl/WinSystemGLES.h | 2 ++
xbmc/windowing/windows/WinSystemWin32.cpp | 2 ++
16 files changed, 80 insertions(+), 49 deletions(-)
diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
index 961e8f9..cd9fc9f 100644
--- a/xbmc/Application.cpp
+++ b/xbmc/Application.cpp
@@ -890,7 +890,7 @@ bool CApplication::CreateGUI()
return false;
int iResolution = g_graphicsContext.GetVideoResolution();
- CLog::Log(LOGINFO, "GUI format %ix%i %s",
+ CLog::Log(LOGINFO, "GUI format %ix%i, Display %s",
g_settings.m_ResInfo[iResolution].iWidth,
g_settings.m_ResInfo[iResolution].iHeight,
g_settings.m_ResInfo[iResolution].strMode.c_str());
diff --git a/xbmc/GUIInfoManager.cpp b/xbmc/GUIInfoManager.cpp
index fb6292d..c4ecd0a 100644
--- a/xbmc/GUIInfoManager.cpp
+++ b/xbmc/GUIInfoManager.cpp
@@ -1493,14 +1493,14 @@ CStdString CGUIInfoManager::GetLabel(int info, int contextWindow, CStdString *fa
case SYSTEM_SCREEN_RESOLUTION:
if(g_Windowing.IsFullScreen())
strLabel.Format("%ix%i@%.2fHz - %s (%02.2f fps)",
- g_settings.m_ResInfo[g_guiSettings.m_LookAndFeelResolution].iWidth,
- g_settings.m_ResInfo[g_guiSettings.m_LookAndFeelResolution].iHeight,
+ g_settings.m_ResInfo[g_guiSettings.m_LookAndFeelResolution].iScreenWidth,
+ g_settings.m_ResInfo[g_guiSettings.m_LookAndFeelResolution].iScreenHeight,
g_settings.m_ResInfo[g_guiSettings.m_LookAndFeelResolution].fRefreshRate,
g_localizeStrings.Get(244), GetFPS());
else
strLabel.Format("%ix%i - %s (%02.2f fps)",
- g_settings.m_ResInfo[g_guiSettings.m_LookAndFeelResolution].iWidth,
- g_settings.m_ResInfo[g_guiSettings.m_LookAndFeelResolution].iHeight,
+ g_settings.m_ResInfo[g_guiSettings.m_LookAndFeelResolution].iScreenWidth,
+ g_settings.m_ResInfo[g_guiSettings.m_LookAndFeelResolution].iScreenHeight,
g_localizeStrings.Get(242), GetFPS());
return strLabel;
break;
@@ -1620,10 +1620,10 @@ CStdString CGUIInfoManager::GetLabel(int info, int contextWindow, CStdString *fa
strLabel = g_settings.m_ResInfo[g_graphicsContext.GetVideoResolution()].strMode;
break;
case SYSTEM_SCREEN_WIDTH:
- strLabel.Format("%i", g_settings.m_ResInfo[g_graphicsContext.GetVideoResolution()].iWidth);
+ strLabel.Format("%i", g_settings.m_ResInfo[g_graphicsContext.GetVideoResolution()].iScreenWidth);
break;
case SYSTEM_SCREEN_HEIGHT:
- strLabel.Format("%i", g_settings.m_ResInfo[g_graphicsContext.GetVideoResolution()].iHeight);
+ strLabel.Format("%i", g_settings.m_ResInfo[g_graphicsContext.GetVideoResolution()].iScreenHeight);
break;
case SYSTEM_CURRENT_WINDOW:
return g_localizeStrings.Get(g_windowManager.GetFocusedWindow());
diff --git a/xbmc/guilib/GraphicContext.cpp b/xbmc/guilib/GraphicContext.cpp
index 31bfdbf..94f248b 100644
--- a/xbmc/guilib/GraphicContext.cpp
+++ b/xbmc/guilib/GraphicContext.cpp
@@ -580,6 +580,8 @@ void CGraphicContext::ResetScreenParameters(RESOLUTION res)
default:
break;
}
+ g_settings.m_ResInfo[res].iScreenWidth = g_settings.m_ResInfo[res].iWidth;
+ g_settings.m_ResInfo[res].iScreenHeight = g_settings.m_ResInfo[res].iHeight;
ResetOverscan(res, g_settings.m_ResInfo[res].Overscan);
}
diff --git a/xbmc/guilib/Resolution.h b/xbmc/guilib/Resolution.h
index ede938d..20864e2 100644
--- a/xbmc/guilib/Resolution.h
+++ b/xbmc/guilib/Resolution.h
@@ -88,6 +88,8 @@ struct RESOLUTION_INFO
int iScreen;
int iWidth;
int iHeight;
+ int iScreenWidth;
+ int iScreenHeight;
int iSubtitles;
uint32_t dwFlags;
float fPixelRatio;
@@ -100,6 +102,8 @@ struct RESOLUTION_INFO
{
iWidth = width;
iHeight = height;
+ iScreenWidth = width;
+ iScreenHeight = height;
fPixelRatio = aspect ? ((float)width)/height / aspect : 1.0f;
strMode = mode;
bFullScreen = true;
@@ -114,6 +118,7 @@ struct RESOLUTION_INFO
{
Overscan = res.Overscan; bFullScreen = res.bFullScreen;
iScreen = res.iScreen; iWidth = res.iWidth; iHeight = res.iHeight;
+ iScreenWidth = res.iScreenWidth; iScreenHeight = res.iScreenHeight;
iSubtitles = res.iSubtitles; dwFlags = res.dwFlags;
fPixelRatio = res.fPixelRatio; fRefreshRate = res.fRefreshRate;
strMode = res.strMode; strOutput = res.strOutput; strId = res.strId;
diff --git a/xbmc/settings/GUISettings.cpp b/xbmc/settings/GUISettings.cpp
index da2a78b..ec24ad5 100644
--- a/xbmc/settings/GUISettings.cpp
+++ b/xbmc/settings/GUISettings.cpp
@@ -1526,8 +1526,8 @@ RESOLUTION CGUISettings::GetResFromString(const CStdString &res)
const RESOLUTION_INFO &info = g_settings.m_ResInfo[i];
if (info.iScreen != screen)
continue;
- float score = 10 * (square_error((float)info.iWidth, (float)width) +
- square_error((float)info.iHeight, (float)height) +
+ float score = 10 * (square_error((float)info.iScreenWidth, (float)width) +
+ square_error((float)info.iScreenHeight, (float)height) +
square_error(info.fRefreshRate, refresh) +
square_error((float)((info.dwFlags & D3DPRESENTFLAG_INTERLACED) ? 100:200), interlaced));
if (score < bestScore)
@@ -1552,7 +1552,7 @@ void CGUISettings::SetResolution(RESOLUTION res)
{
const RESOLUTION_INFO &info = g_settings.m_ResInfo[res];
mode.Format("%1i%05i%05i%09.5f%s", info.iScreen,
- info.iWidth, info.iHeight, info.fRefreshRate,
+ info.iScreenWidth, info.iScreenHeight, info.fRefreshRate,
(info.dwFlags & D3DPRESENTFLAG_INTERLACED) ? "i":"p");
}
else
diff --git a/xbmc/settings/GUIWindowSettingsCategory.cpp b/xbmc/settings/GUIWindowSettingsCategory.cpp
index b436b98..ce517bb 100644
--- a/xbmc/settings/GUIWindowSettingsCategory.cpp
+++ b/xbmc/settings/GUIWindowSettingsCategory.cpp
@@ -2392,8 +2392,8 @@ void CGUIWindowSettingsCategory::FillInResolutions(CStdString strSetting, Displa
RESOLUTION_INFO res1 = g_settings.m_ResInfo[res];
RESOLUTION_INFO res2 = g_settings.m_ResInfo[resolutions[idx].ResInfo_Index];
if ( res1.iScreen == res2.iScreen
- && res1.iWidth == res2.iWidth
- && res1.iHeight == res2.iHeight
+ && res1.iScreenWidth == res2.iScreenWidth
+ && res1.iScreenHeight == res2.iScreenHeight
&& (res1.dwFlags & D3DPRESENTFLAG_INTERLACED) == (res2.dwFlags & D3DPRESENTFLAG_INTERLACED))
spinres = (RESOLUTION) resolutions[idx].ResInfo_Index;
}
@@ -2430,13 +2430,13 @@ void CGUIWindowSettingsCategory::FillInResolutions(CStdString strSetting, Displa
void CGUIWindowSettingsCategory::FillInRefreshRates(CStdString strSetting, RESOLUTION res, bool UserChange)
{
- // The only meaningful parts of res here are iScreen, iWidth, iHeight
+ // The only meaningful parts of res here are iScreen, iScreenWidth, iScreenHeight
vector<REFRESHRATE> refreshrates;
if (res > RES_WINDOW)
refreshrates = g_Windowing.RefreshRates(g_settings.m_ResInfo[res].iScreen,
- g_settings.m_ResInfo[res].iWidth,
- g_settings.m_ResInfo[res].iHeight,
+ g_settings.m_ResInfo[res].iScreenWidth,
+ g_settings.m_ResInfo[res].iScreenHeight,
g_settings.m_ResInfo[res].dwFlags);
// The control setting doesn't exist when not in standalone mode, don't manipulate it
diff --git a/xbmc/settings/GUIWindowSettingsScreenCalibration.cpp b/xbmc/settings/GUIWindowSettingsScreenCalibration.cpp
index b2430bc..3e6ba83 100644
--- a/xbmc/settings/GUIWindowSettingsScreenCalibration.cpp
+++ b/xbmc/settings/GUIWindowSettingsScreenCalibration.cpp
@@ -352,12 +352,12 @@ void CGUIWindowSettingsScreenCalibration::UpdateFromControl(int iControl)
// set the label control correctly
CStdString strText;
if (g_Windowing.IsFullScreen())
- strText.Format("%ix%i@%.2f - %s | %s", g_settings.m_ResInfo[m_Res[m_iCurRes]].iWidth,
- g_settings.m_ResInfo[m_Res[m_iCurRes]].iHeight, g_settings.m_ResInfo[m_Res[m_iCurRes]].fRefreshRate,
+ strText.Format("%ix%i@%.2f - %s | %s", g_settings.m_ResInfo[m_Res[m_iCurRes]].iScreenWidth,
+ g_settings.m_ResInfo[m_Res[m_iCurRes]].iScreenHeight, g_settings.m_ResInfo[m_Res[m_iCurRes]].fRefreshRate,
g_localizeStrings.Get(244).c_str(), strStatus.c_str());
else
- strText.Format("%ix%i - %s | %s", g_settings.m_ResInfo[m_Res[m_iCurRes]].iWidth,
- g_settings.m_ResInfo[m_Res[m_iCurRes]].iHeight,
+ strText.Format("%ix%i - %s | %s", g_settings.m_ResInfo[m_Res[m_iCurRes]].iScreenWidth,
+ g_settings.m_ResInfo[m_Res[m_iCurRes]].iScreenHeight,
g_localizeStrings.Get(242).c_str(), strStatus.c_str());
SET_CONTROL_LABEL(CONTROL_LABEL_ROW1, strText);
diff --git a/xbmc/video/windows/GUIWindowFullScreen.cpp b/xbmc/video/windows/GUIWindowFullScreen.cpp
index 22a5c35..1bba604 100644
--- a/xbmc/video/windows/GUIWindowFullScreen.cpp
+++ b/xbmc/video/windows/GUIWindowFullScreen.cpp
@@ -1008,13 +1008,13 @@ void CGUIWindowFullScreen::FrameMove()
CStdString strStatus;
if (g_Windowing.IsFullScreen())
strStatus.Format("%s %ix%i@%.2fHz - %s",
- g_localizeStrings.Get(13287), g_settings.m_ResInfo[iResolution].iWidth,
- g_settings.m_ResInfo[iResolution].iHeight, g_settings.m_ResInfo[iResolution].fRefreshRate,
+ g_localizeStrings.Get(13287), g_settings.m_ResInfo[iResolution].iScreenWidth,
+ g_settings.m_ResInfo[iResolution].iScreenHeight, g_settings.m_ResInfo[iResolution].fRefreshRate,
g_localizeStrings.Get(244));
else
strStatus.Format("%s %ix%i - %s",
- g_localizeStrings.Get(13287), g_settings.m_ResInfo[iResolution].iWidth,
- g_settings.m_ResInfo[iResolution].iHeight, g_localizeStrings.Get(242));
+ g_localizeStrings.Get(13287), g_settings.m_ResInfo[iResolution].iScreenWidth,
+ g_settings.m_ResInfo[iResolution].iScreenHeight, g_localizeStrings.Get(242));
CGUIMessage msg(GUI_MSG_LABEL_SET, GetID(), LABEL_ROW3);
msg.SetLabel(strStatus);
diff --git a/xbmc/windowing/WinSystem.cpp b/xbmc/windowing/WinSystem.cpp
index 9882161..6a17586 100644
--- a/xbmc/windowing/WinSystem.cpp
+++ b/xbmc/windowing/WinSystem.cpp
@@ -63,6 +63,8 @@ void CWinSystemBase::UpdateDesktopResolution(RESOLUTION_INFO& newRes, int screen
newRes.fPixelRatio = 1.0f;
newRes.iWidth = width;
newRes.iHeight = height;
+ newRes.iScreenWidth = width;
+ newRes.iScreenHeight = height;
newRes.strMode.Format("%dx%d", width, height);
if (refreshRate > 1)
newRes.strMode.Format("%s @ %.2f%s - Full Screen", newRes.strMode, refreshRate, dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "");
@@ -79,6 +81,8 @@ void CWinSystemBase::UpdateResolutions()
window.iWidth = 720;
if (window.iHeight == 0)
window.iHeight = 480;
+ window.iScreenWidth = window.iWidth;
+ window.iScreenHeight = window.iHeight;
if (window.iSubtitles == 0)
window.iSubtitles = (int)(0.965 * window.iHeight);
window.fPixelRatio = 1.0f;
@@ -90,6 +94,8 @@ void CWinSystemBase::SetWindowResolution(int width, int height)
RESOLUTION_INFO& window = g_settings.m_ResInfo[RES_WINDOW];
window.iWidth = width;
window.iHeight = height;
+ window.iScreenWidth = width;
+ window.iScreenHeight = height;
window.iSubtitles = (int)(0.965 * window.iHeight);
g_graphicsContext.ResetOverscan(window);
}
@@ -105,8 +111,8 @@ int CWinSystemBase::DesktopResolution(int screen)
static void AddResolution(vector<RESOLUTION_WHR> &resolutions, unsigned int addindex)
{
- int width = g_settings.m_ResInfo[addindex].iWidth;
- int height = g_settings.m_ResInfo[addindex].iHeight;
+ int width = g_settings.m_ResInfo[addindex].iScreenWidth;
+ int height = g_settings.m_ResInfo[addindex].iScreenHeight;
int interlaced = g_settings.m_ResInfo[addindex].dwFlags & D3DPRESENTFLAG_INTERLACED;
for (unsigned int idx = 0; idx < resolutions.size(); idx++)
@@ -163,8 +169,8 @@ static bool rrSortPredicate(REFRESHRATE i, REFRESHRATE j)
for (unsigned int idx = RES_DESKTOP; idx < g_settings.m_ResInfo.size(); idx++)
if ( g_settings.m_ResInfo[idx].iScreen == screen
- && g_settings.m_ResInfo[idx].iWidth == width
- && g_settings.m_ResInfo[idx].iHeight == height
+ && g_settings.m_ResInfo[idx].iScreenWidth == width
+ && g_settings.m_ResInfo[idx].iScreenHeight == height
&& (g_settings.m_ResInfo[idx].dwFlags & D3DPRESENTFLAG_INTERLACED) == (dwFlags & D3DPRESENTFLAG_INTERLACED))
AddRefreshRate(refreshrates, idx);
diff --git a/xbmc/windowing/X11/WinSystemX11.cpp b/xbmc/windowing/X11/WinSystemX11.cpp
index 889c445..a839709 100644
--- a/xbmc/windowing/X11/WinSystemX11.cpp
+++ b/xbmc/windowing/X11/WinSystemX11.cpp
@@ -269,6 +269,8 @@ void CWinSystemX11::UpdateResolutions()
RESOLUTION_INFO res;
res.iWidth = mode.w;
res.iHeight = mode.h;
+ res.iScreenWidth = mode.w;
+ res.iScreenHeight = mode.h;
if (mode.h>0 && mode.w>0 && out.hmm>0 && out.wmm>0)
res.fPixelRatio = ((float)out.wmm/(float)mode.w) / (((float)out.hmm/(float)mode.h));
else
diff --git a/xbmc/windowing/X11/WinSystemX11GLES.cpp b/xbmc/windowing/X11/WinSystemX11GLES.cpp
index 2b67e37..50185f9 100644
--- a/xbmc/windowing/X11/WinSystemX11GLES.cpp
+++ b/xbmc/windowing/X11/WinSystemX11GLES.cpp
@@ -292,6 +292,8 @@ void CWinSystemX11GLES::UpdateResolutions()
RESOLUTION_INFO res;
res.iWidth = mode.w;
res.iHeight = mode.h;
+ res.iScreenWidth = mode.w;
+ res.iScreenHeight = mode.h;
if (mode.h>0 && mode.w>0 && out.hmm>0 && out.wmm>0)
res.fPixelRatio = ((float)out.wmm/(float)mode.w) / (((float)out.hmm/(float)mode.h));
else
diff --git a/xbmc/windowing/egl/WinEGLPlatformGeneric.cpp b/xbmc/windowing/egl/WinEGLPlatformGeneric.cpp
index 9febe15..b6dec7e 100644
--- a/xbmc/windowing/egl/WinEGLPlatformGeneric.cpp
+++ b/xbmc/windowing/egl/WinEGLPlatformGeneric.cpp
@@ -43,8 +43,8 @@
m_desktopRes.iScreen = 0;
m_desktopRes.iWidth = 1280;
m_desktopRes.iHeight = 720;
- //m_desktopRes.iScreenWidth = 1280;
- //m_desktopRes.iScreenHeight = 720;
+ m_desktopRes.iScreenWidth = 1280;
+ m_desktopRes.iScreenHeight = 720;
m_desktopRes.fRefreshRate = 60.0f;
m_desktopRes.bFullScreen = true;
m_desktopRes.iSubtitles = (int)(0.965 * 720);
@@ -101,12 +101,9 @@ bool CWinEGLPlatformGeneric::ProbeDisplayResolutions(std::vector<RESOLUTION_INFO
res.fPixelRatio = 1.0f;
res.iWidth = gui_width;
res.iHeight = gui_height;
- //res.iScreenWidth = gui_width;
- //res.iScreenHeight = gui_height;
+ res.iScreenWidth = gui_width;
+ res.iScreenHeight = gui_height;
res.dwFlags = D3DPRESENTFLAG_PROGRESSIVE | D3DPRESENTFLAG_WIDESCREEN;
- // temp until split gui/display res comes in
- //res.iScreenWidth = width;
- //res.iScreenHeight = height;
res.strMode.Format("%dx%d @ %.2f - Full Screen", gui_width, gui_height, gui_refresh);
resolutions.push_back(res);
diff --git a/xbmc/windowing/egl/WinEGLPlatformRaspberryPI.cpp b/xbmc/windowing/egl/WinEGLPlatformRaspberryPI.cpp
index 48e53cc..c77d63c 100644
--- a/xbmc/windowing/egl/WinEGLPlatformRaspberryPI.cpp
+++ b/xbmc/windowing/egl/WinEGLPlatformRaspberryPI.cpp
@@ -69,6 +69,8 @@
m_desktopRes.iScreen = 0;
m_desktopRes.iWidth = 1280;
m_desktopRes.iHeight = 720;
+ m_desktopRes.iScreenWidth = 1280;
+ m_desktopRes.iScreenHeight= 720;
m_desktopRes.fRefreshRate = 60.0f;
m_desktopRes.bFullScreen = true;
m_desktopRes.iSubtitles = (int)(0.965 * 720);
@@ -271,8 +273,8 @@ bool CWinEGLPlatformRaspberryPI::ProbeDisplayResolutions(std::vector<RESOLUTION_
res.fPixelRatio = 1.0f;
res.iWidth = tv.width;
res.iHeight = tv.height;
- //res.iScreenWidth = tv.width;
- //res.iScreenHeight = tv.height;
+ res.iScreenWidth = tv.width;
+ res.iScreenHeight = tv.height;
res.strMode.Format("%dx%d", tv.width, tv.height);
if((float)tv.frame_rate > 1)
{
@@ -687,8 +689,8 @@ void CWinEGLPlatformRaspberryPI::GetSupportedModes(HDMI_RES_GROUP_T group, std::
res.fPixelRatio = 1.0f;
res.iWidth = width;
res.iHeight = tv->height;
- //res.iScreenWidth = width;
- //res.iScreenHeight = tv->height;
+ res.iScreenWidth = width;
+ res.iScreenHeight = tv->height;
res.strMode.Format("%dx%d", width, tv->height);
if((float)tv->frame_rate > 1)
{
diff --git a/xbmc/windowing/egl/WinSystemGLES.cpp b/xbmc/windowing/egl/WinSystemGLES.cpp
index d4f1f04..eb78f74 100644
--- a/xbmc/windowing/egl/WinSystemGLES.cpp
+++ b/xbmc/windowing/egl/WinSystemGLES.cpp
@@ -78,7 +78,11 @@ bool CWinSystemGLES::DestroyWindowSystem()
bool CWinSystemGLES::CreateNewWindow(const CStdString& name, bool fullScreen, RESOLUTION_INFO& res, PHANDLE_EVENT_FUNC userFunction)
{
- if (m_bWindowCreated && m_nWidth == res.iWidth && m_nHeight == res.iHeight && m_fRefreshRate == res.fRefreshRate && m_bFullScreen == fullScreen)
+ if (m_bWindowCreated &&
+ m_nWidth == res.iWidth && m_nHeight == res.iHeight &&
+ m_nScreenWidth == res.iScreenWidth && m_nScreenHeight == res.iScreenHeight &&
+ m_bFullScreen == fullScreen &&
+ m_fRefreshRate == res.fRefreshRate)
{
CLog::Log(LOGDEBUG, "CWinSystemGLES::CreateNewWindow: No need to create a new window");
return true;
@@ -86,8 +90,10 @@ bool CWinSystemGLES::CreateNewWindow(const CStdString& name, bool fullScreen, RE
m_nWidth = res.iWidth;
m_nHeight = res.iHeight;
- m_bFullScreen = fullScreen;
- m_fRefreshRate = res.fRefreshRate;
+ m_nScreenWidth = res.iScreenWidth;
+ m_nScreenHeight = res.iScreenHeight;
+ m_bFullScreen = fullScreen;
+ m_fRefreshRate = res.fRefreshRate;
// Destroy any existing window
if (m_bWindowCreated)
@@ -138,7 +144,6 @@ void CWinSystemGLES::UpdateResolutions()
{
CWinSystemBase::UpdateResolutions();
- //std::vector<CStdString> resolutions;
std::vector<RESOLUTION_INFO> resolutions;
m_eglplatform->ProbeDisplayResolutions(resolutions);
@@ -148,9 +153,6 @@ void CWinSystemGLES::UpdateResolutions()
RESOLUTION ResDesktop = RES_INVALID;
RESOLUTION res_index = RES_DESKTOP;
- // Clear old resolutions
- //g_settings.m_ResInfo.clear();
-
for (size_t i = 0; i < resolutions.size(); i++)
{
int gui_width = resolutions[i].iWidth;
@@ -173,17 +175,23 @@ void CWinSystemGLES::UpdateResolutions()
g_graphicsContext.ResetOverscan(resolutions[i]);
g_settings.m_ResInfo[res_index] = resolutions[i];
- CLog::Log(LOGNOTICE, "Found resolution for display %d with %d x %d @ %f Hz\n",
+ CLog::Log(LOGNOTICE, "Found resolution %d x %d for display %d with %d x %d%s @ %f Hz\n",
resolutions[i].iScreen,
resolutions[i].iWidth,
resolutions[i].iHeight,
+ resolutions[i].iScreenWidth,
+ resolutions[i].iScreenHeight,
+ resolutions[i].dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "",
resolutions[i].fRefreshRate);
if(m_eglplatform->FixedDesktop())
{
if(resDesktop.iWidth == resolutions[i].iWidth &&
resDesktop.iHeight == resolutions[i].iHeight &&
- resDesktop.fRefreshRate == resolutions[i].fRefreshRate)
+ resDesktop.iScreenWidth == resolutions[i].iScreenWidth &&
+ resDesktop.iScreenHeight == resolutions[i].iScreenHeight &&
+ resDesktop.fRefreshRate == resolutions[i].fRefreshRate &&
+ resDesktop.dwFlags == resolutions[i].dwFlags)
{
ResDesktop = res_index;
}
@@ -195,8 +203,11 @@ void CWinSystemGLES::UpdateResolutions()
// swap desktop index for desktop res if available
if (ResDesktop != RES_INVALID)
{
- CLog::Log(LOGNOTICE, "Found (%dx%d@%f) at %d, setting to RES_DESKTOP at %d",
- resDesktop.iWidth, resDesktop.iHeight, resDesktop.fRefreshRate, (int)ResDesktop, (int)RES_DESKTOP);
+ CLog::Log(LOGNOTICE, "Found (%dx%d%s@%f) at %d, setting to RES_DESKTOP at %d",
+ resDesktop.iWidth, resDesktop.iHeight,
+ resDesktop.dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "",
+ resDesktop.fRefreshRate,
+ (int)ResDesktop, (int)RES_DESKTOP);
RESOLUTION_INFO desktop = g_settings.m_ResInfo[RES_DESKTOP];
g_settings.m_ResInfo[RES_DESKTOP] = g_settings.m_ResInfo[ResDesktop];
diff --git a/xbmc/windowing/egl/WinSystemGLES.h b/xbmc/windowing/egl/WinSystemGLES.h
index d94d24d..72c1eb7 100644
--- a/xbmc/windowing/egl/WinSystemGLES.h
+++ b/xbmc/windowing/egl/WinSystemGLES.h
@@ -63,6 +63,8 @@ class CWinSystemGLES : public CWinSystemBase, public CRenderSystemGLES
void *m_display;
EGLNativeWindowType m_window;
CWinEGLPlatform *m_eglplatform;
+ int m_nScreenWidth;
+ int m_nScreenHeight;
};
XBMC_GLOBAL_REF(CWinSystemGLES,g_Windowing);
diff --git a/xbmc/windowing/windows/WinSystemWin32.cpp b/xbmc/windowing/windows/WinSystemWin32.cpp
index 6a0e335..182b9a2 100644
--- a/xbmc/windowing/windows/WinSystemWin32.cpp
+++ b/xbmc/windowing/windows/WinSystemWin32.cpp
@@ -541,6 +541,8 @@ void CWinSystemWin32::AddResolution(const RESOLUTION_INFO &res)
if (g_settings.m_ResInfo[i].iScreen == res.iScreen &&
g_settings.m_ResInfo[i].iWidth == res.iWidth &&
g_settings.m_ResInfo[i].iHeight == res.iHeight &&
+ g_settings.m_ResInfo[i].iScreenWidth == res.iScreenWidth &&
+ g_settings.m_ResInfo[i].iScreenHeight== res.iScreenHeight &&
g_settings.m_ResInfo[i].fRefreshRate == res.fRefreshRate &&
g_settings.m_ResInfo[i].dwFlags == res.dwFlags)
return; // already have this resolution
--
1.7.10

View File

@ -1,25 +0,0 @@
From 35c9bf5bd0f9d03541280df8d7b9af0bf6ffb1a4 Mon Sep 17 00:00:00 2001
From: Lars Op den Kamp <lars@opdenkamp.eu>
Date: Wed, 29 Aug 2012 13:43:55 +0200
Subject: [PATCH] cec: also match 2548:1002 to the cec adapter
---
system/peripherals.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/system/peripherals.xml b/system/peripherals.xml
index cf0c6c4..76a1df9 100644
--- a/system/peripherals.xml
+++ b/system/peripherals.xml
@@ -9,7 +9,7 @@
<setting key="key_power" value="XBMC.ShutDown()" label="13015" order="6" />
</peripheral>
- <peripheral vendor_product="2548:1001" bus="usb" name="Pulse-Eight CEC Adapter" mapTo="cec">
+ <peripheral vendor_product="2548:1001,2548:1002" bus="usb" name="Pulse-Eight CEC Adapter" mapTo="cec">
<setting key="enabled" type="bool" value="1" label="305" order="1" />
<setting key="activate_source" type="bool" value="1" label="36020" order="2" />
<setting key="wake_devices" type="string" value="0" label="36007" order="3" />
--
1.7.10

View File

@ -54,8 +54,8 @@ fi
# set cpu's to 'conservative'
( usleep 15000000
progress "set cpu's to 'conservative'"
cpupower frequency-set -g conservative > /dev/null 2>&1
progress "set cpu's to 'ondemand'"
cpupower frequency-set -g ondemand > /dev/null 2>&1
)&
# prevent restrating XBMC at reboot or shutdown

View File

@ -0,0 +1,26 @@
From 66a8245d4e7d02469f03c6a1b3e295dde346645f Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
Date: Sat, 15 Sep 2012 17:24:30 +0200
Subject: [PATCH] videoplayer: fix calcDropRequirement for forced
deinterlacing
---
xbmc/cores/dvdplayer/DVDPlayerVideo.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
index db0fb1f..81e0012 100644
--- a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
@@ -1702,7 +1702,7 @@ int CDVDPlayerVideo::CalcDropRequirement(double pts)
bNewFrame = iDecoderPts != m_droppingStats.m_lastDecoderPts;
- if (interlaced)
+ if (interlaced || iSkippedDeint)
iInterval = 2/m_fFrameRate*(double)DVD_TIME_BASE;
else
iInterval = 1/m_fFrameRate*(double)DVD_TIME_BASE;
--
1.7.10

View File

@ -0,0 +1,32 @@
From f0bf2b7dff16ac6ee875770b390accf71660a662 Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
Date: Sun, 16 Sep 2012 08:27:06 +0200
Subject: [PATCH] vdpau: fix AutoInterlaceMethod to prevent from double
de-interlacing
---
xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 7 -------
1 file changed, 7 deletions(-)
diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
index f25252c..374d75d 100644
--- a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
+++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
@@ -3743,14 +3743,7 @@ EINTERLACEMETHOD CLinuxRendererGL::AutoInterlaceMethod()
return VS_INTERLACEMETHOD_NONE;
if(m_renderMethod & RENDER_VDPAU)
- {
-#ifdef HAVE_LIBVDPAU
- VDPAU::CVdpauRenderPicture *vdpauPic = m_buffers[m_iYV12RenderBuffer].vdpau;
- if(vdpauPic && vdpauPic->vdpau)
- return vdpauPic->vdpau->AutoInterlaceMethod();
-#endif
return VS_INTERLACEMETHOD_NONE;
- }
if(Supports(VS_INTERLACEMETHOD_RENDER_BOB))
return VS_INTERLACEMETHOD_RENDER_BOB;
--
1.7.10

View File

@ -0,0 +1,25 @@
From a7d40418f3aaf35f5df1de8987ce14afd59fb04f Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
Date: Sun, 16 Sep 2012 12:19:27 +0200
Subject: [PATCH] xvba: oopsie :)
---
xbmc/cores/dvdplayer/DVDCodecs/Video/XVBA.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/XVBA.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/XVBA.cpp
index d4cf6cf..bd7cc3d 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/XVBA.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/XVBA.cpp
@@ -768,6 +768,7 @@ void CDecoder::DestroySession()
XVBA_Destroy_Decode_Buffers_Input bufInput;
bufInput.size = sizeof(bufInput);
bufInput.num_of_buffers_in_list = 1;
+ bufInput.session = m_xvbaConfig.xvbaSession;
for (unsigned int i=0; i<m_xvbaBufferPool.data_control_buffers.size() ; ++i)
{
--
1.7.10

View File

@ -0,0 +1,48 @@
From c01c0fa9c84f50191e0fffd95527ae2b400e021c Mon Sep 17 00:00:00 2001
From: xbmc <fernetmenta@online.de>
Date: Sun, 16 Sep 2012 18:38:01 +0200
Subject: [PATCH] vdpau: fix upscaling setting
---
xbmc/settings/AdvancedSettings.cpp | 4 ++--
xbmc/settings/AdvancedSettings.h | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp
index 61ccf85..3556b7d 100644
--- a/xbmc/settings/AdvancedSettings.cpp
+++ b/xbmc/settings/AdvancedSettings.cpp
@@ -98,7 +98,7 @@ void CAdvancedSettings::Initialize()
m_videoIgnoreSecondsAtStart = 3*60;
m_videoIgnorePercentAtEnd = 8.0f;
m_videoPlayCountMinimumPercent = 90.0f;
- m_videoVDPAUScaling = false;
+ m_videoVDPAUScaling = -1;
m_videoNonLinStretchRatio = 0.5f;
m_videoEnableHighQualityHwScalers = false;
m_videoAutoScaleMaxFps = 30.0f;
@@ -492,7 +492,7 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file)
XMLUtils::GetString(pElement,"cleandatetime", m_videoCleanDateTimeRegExp);
XMLUtils::GetString(pElement,"ppffmpegdeinterlacing",m_videoPPFFmpegDeint);
XMLUtils::GetString(pElement,"ppffmpegpostprocessing",m_videoPPFFmpegPostProc);
- XMLUtils::GetBoolean(pElement,"vdpauscaling",m_videoVDPAUScaling);
+ XMLUtils::GetInt(pElement,"vdpauscaling",m_videoVDPAUScaling);
XMLUtils::GetFloat(pElement, "nonlinearstretchratio", m_videoNonLinStretchRatio, 0.01f, 1.0f);
XMLUtils::GetBoolean(pElement,"enablehighqualityhwscalers", m_videoEnableHighQualityHwScalers);
XMLUtils::GetFloat(pElement,"autoscalemaxfps",m_videoAutoScaleMaxFps, 0.0f, 1000.0f);
diff --git a/xbmc/settings/AdvancedSettings.h b/xbmc/settings/AdvancedSettings.h
index b3a54ff..f50151a 100644
--- a/xbmc/settings/AdvancedSettings.h
+++ b/xbmc/settings/AdvancedSettings.h
@@ -152,7 +152,7 @@ class CAdvancedSettings
CStdString m_audioHost;
bool m_audioApplyDrc;
- bool m_videoVDPAUScaling;
+ int m_videoVDPAUScaling;
float m_videoNonLinStretchRatio;
bool m_videoEnableHighQualityHwScalers;
float m_videoAutoScaleMaxFps;
--
1.7.10

View File

@ -61,17 +61,17 @@ fi
case "$TARGET_ARCH" in
arm)
FFMPEG_CPU="--enable-armv5te --disable-armv6t2 --enable-armv6"
FFMPEG_CPU=""
FFMPEG_TABLES="--enable-hardcoded-tables"
FFMPEG_PIC="--enable-pic"
;;
i?86)
FFMPEG_CPU="--disable-armv5te --disable-armv6t2 --disable-armv6"
FFMPEG_CPU=""
FFMPEG_TABLES="--disable-hardcoded-tables"
FFMPEG_PIC="--disable-pic"
;;
x86_64)
FFMPEG_CPU="--disable-armv5te --disable-armv6t2 --disable-armv6"
FFMPEG_CPU=""
FFMPEG_TABLES="--disable-hardcoded-tables"
FFMPEG_PIC="--enable-pic"
;;
@ -79,19 +79,19 @@ esac
case "$TARGET_FPU" in
neon*)
FFMPEG_FPU="--enable-neon --disable-armvfp"
FFMPEG_FPU="--enable-neon"
;;
vfp*)
FFMPEG_FPU="--enable-armvfp --disable-neon"
FFMPEG_FPU=""
;;
*)
FFMPEG_FPU="--disable-neon --disable-armvfp"
FFMPEG_FPU=""
;;
esac
export pkg_config="$ROOT/$TOOLCHAIN/bin/pkg-config"
# libav fails building with LTO support
# ffmpeg fails building with LTO support
strip_lto
#LDFLAGS="$(echo "$LDFLAGS" | sed "s/-Wl,-Bsymbolic-functions//g")"
@ -218,8 +218,5 @@ cd $PKG_BUILD/
--disable-sram \
--disable-symver \
#sed -i -e "s#define HAVE_SYMVER 1#define HAVE_SYMVER 0#" config.h &&
#sed -i -e "s#define HAVE_SYMVER_GNU_ASM 1#define HAVE_SYMVER_GNU_ASM 0#" config.h
make V=1
$MAKEINSTALL

View File

@ -19,7 +19,7 @@
################################################################################
PKG_NAME="ffmpeg"
PKG_VERSION="0.10.4"
PKG_VERSION="0.10.5"
PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="LGPL"

Some files were not shown because too many files have changed in this diff Show More