mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
Merge branch 'master' of github.com:OpenELEC/OpenELEC.tv into openelec-3.2
Conflicts:
This commit is contained in:
commit
aa30393bf3
@ -33,18 +33,6 @@ case "$LINUX" in
|
||||
PKG_VERSION="2.6.38-ti-omap4"
|
||||
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.bz2"
|
||||
;;
|
||||
3.2)
|
||||
PKG_VERSION="3.2.44"
|
||||
PKG_URL="http://www.kernel.org/pub/linux/kernel/v3.x/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
;;
|
||||
3.6)
|
||||
PKG_VERSION="3.6.11"
|
||||
PKG_URL="http://www.kernel.org/pub/linux/kernel/v3.x/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
;;
|
||||
3.8)
|
||||
PKG_VERSION="3.8.13"
|
||||
PKG_URL="http://www.kernel.org/pub/linux/kernel/v3.x/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
;;
|
||||
*)
|
||||
PKG_VERSION="3.9.8"
|
||||
PKG_URL="http://www.kernel.org/pub/linux/kernel/v3.x/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
|
@ -1,22 +0,0 @@
|
||||
--- linux-2.6.24-rc2.orig/arch/x86/boot/tools/build.c 2007-10-06 12:26:14.000000000 +0200
|
||||
+++ linux-2.6.24-rc2/arch/x86/boot/tools/build.c 2007-10-06 12:27:36.000000000 +0200
|
||||
@@ -29,7 +29,6 @@
|
||||
#include <stdarg.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
-#include <sys/sysmacros.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
@@ -42,6 +41,11 @@
|
||||
#define DEFAULT_MAJOR_ROOT 0
|
||||
#define DEFAULT_MINOR_ROOT 0
|
||||
|
||||
+#undef major
|
||||
+#define major(dev) ((int)(((dev) >> 8) & 0xff))
|
||||
+#undef minor
|
||||
+#define minor(dev) ((int)((dev) & 0xff))
|
||||
+
|
||||
/* Minimal number of setup sectors */
|
||||
#define SETUP_SECT_MIN 5
|
||||
#define SETUP_SECT_MAX 64
|
@ -1,20 +0,0 @@
|
||||
diff -Naur linux-2.6.34-rc7/init/main.c linux-2.6.34-rc7.patch/init/main.c
|
||||
--- linux-2.6.34-rc7/init/main.c 2010-05-10 03:36:28.000000000 +0200
|
||||
+++ linux-2.6.34-rc7.patch/init/main.c 2010-05-15 12:28:34.767241760 +0200
|
||||
@@ -886,8 +886,14 @@
|
||||
do_basic_setup();
|
||||
|
||||
/* Open the /dev/console on the rootfs, this should never fail */
|
||||
- if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
|
||||
- printk(KERN_WARNING "Warning: unable to open an initial console.\n");
|
||||
+ char *console = "/dev_console";
|
||||
+
|
||||
+ if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0) {
|
||||
+ sys_mknod(console, S_IFCHR|0600, (TTYAUX_MAJOR<<8)|1);
|
||||
+ if (sys_open(console, O_RDWR, 0) < 0)
|
||||
+ printk(KERN_WARNING "Warning: unable to open an initial console.\n");
|
||||
+ sys_unlink(console);
|
||||
+ }
|
||||
|
||||
(void) sys_dup(0);
|
||||
(void) sys_dup(0);
|
@ -1,12 +0,0 @@
|
||||
diff -Naur linux-3.6.11/tools/perf/Makefile linux-3.6.11.patch/tools/perf/Makefile
|
||||
--- linux-3.6.11/tools/perf/Makefile 2012-12-17 18:27:45.000000000 +0100
|
||||
+++ linux-3.6.11.patch/tools/perf/Makefile 2013-03-06 16:30:43.107805512 +0100
|
||||
@@ -496,8 +496,6 @@
|
||||
msg := $(warning newt not found, disables TUI support. Please install newt-devel or libnewt-dev);
|
||||
BASIC_CFLAGS += -DNO_NEWT_SUPPORT
|
||||
else
|
||||
- # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
|
||||
- BASIC_CFLAGS += -I/usr/include/slang
|
||||
EXTLIBS += -lnewt -lslang
|
||||
LIB_OBJS += $(OUTPUT)ui/setup.o
|
||||
LIB_OBJS += $(OUTPUT)ui/browser.o
|
@ -1,11 +0,0 @@
|
||||
diff -Naur linux-3.2.44/tools/perf/builtin-sched.c linux-3.2.44.patch/tools/perf/builtin-sched.c
|
||||
--- linux-3.2.44/tools/perf/builtin-sched.c 2013-04-25 21:25:51.000000000 +0200
|
||||
+++ linux-3.2.44.patch/tools/perf/builtin-sched.c 2013-05-06 03:29:10.327408347 +0200
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "util/debug.h"
|
||||
|
||||
#include <sys/prctl.h>
|
||||
+#include <sys/resource.h>
|
||||
|
||||
#include <semaphore.h>
|
||||
#include <pthread.h>
|
File diff suppressed because it is too large
Load Diff
@ -1,113 +0,0 @@
|
||||
diff -Naur linux-2.6.37/drivers/hid/hid-aureal.c linux-2.6.37.patch/drivers/hid/hid-aureal.c
|
||||
--- linux-2.6.37/drivers/hid/hid-aureal.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ linux-2.6.37.patch/drivers/hid/hid-aureal.c 2011-01-07 22:35:31.413389936 +0100
|
||||
@@ -0,0 +1,60 @@
|
||||
+/*
|
||||
+ * HID driver for some sunplus "special" devices
|
||||
+ *
|
||||
+ * Copyright (c) 1999 Andreas Gal
|
||||
+ * Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
|
||||
+ * Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
|
||||
+ * Copyright (c) 2006-2007 Jiri Kosina
|
||||
+ * Copyright (c) 2007 Paul Walmsley
|
||||
+ * Copyright (c) 2008 Jiri Slaby
|
||||
+ * Copyright (c) 2010 Franco Catrin <fcatrin@gmail.com>
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * 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 of the License, or (at your option)
|
||||
+ * any later version.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/device.h>
|
||||
+#include <linux/hid.h>
|
||||
+#include <linux/module.h>
|
||||
+
|
||||
+#include "hid-ids.h"
|
||||
+
|
||||
+static __u8 *aureal_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||
+ unsigned int *rsize)
|
||||
+{
|
||||
+ if (*rsize >= 54 && rdesc[52] == 0x25 && rdesc[53] == 0x01) {
|
||||
+ dev_info(&hdev->dev, "fixing Aureal Cy se W-01RN USB_V3.1 "
|
||||
+ "report descriptor. Keyboard Logical Maximum = 101\n");
|
||||
+ rdesc[53] = 0x65;
|
||||
+ } return rdesc;
|
||||
+}
|
||||
+
|
||||
+static const struct hid_device_id aureal_devices[] = {
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_AUREAL, USB_DEVICE_ID_AUREAL_W01RN) },
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(hid, aureal_devices);
|
||||
+
|
||||
+static struct hid_driver aureal_driver = {
|
||||
+ .name = "aureal",
|
||||
+ .id_table = aureal_devices,
|
||||
+ .report_fixup = aureal_report_fixup,
|
||||
+};
|
||||
+
|
||||
+static int __init aureal_init(void)
|
||||
+{
|
||||
+ return hid_register_driver(&aureal_driver);
|
||||
+}
|
||||
+
|
||||
+static void __exit aureal_exit(void)
|
||||
+{
|
||||
+ hid_unregister_driver(&aureal_driver);
|
||||
+}
|
||||
+
|
||||
+module_init(aureal_init);
|
||||
+module_exit(aureal_exit);
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff -Naur linux-2.6.37/drivers/hid/hid-ids.h linux-2.6.37.patch/drivers/hid/hid-ids.h
|
||||
--- linux-2.6.37/drivers/hid/hid-ids.h 2011-01-05 01:50:19.000000000 +0100
|
||||
+++ linux-2.6.37.patch/drivers/hid/hid-ids.h 2011-01-07 22:35:31.414389949 +0100
|
||||
@@ -6,6 +6,7 @@
|
||||
* Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
|
||||
* Copyright (c) 2006-2007 Jiri Kosina
|
||||
* Copyright (c) 2007 Paul Walmsley
|
||||
+ * Copyright (c) 2010 Franco Catrin <fcatrin@gmail.com>
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -327,6 +328,9 @@
|
||||
#define USB_DEVICE_ID_KYE_ERGO_525V 0x0087
|
||||
#define USB_DEVICE_ID_KYE_GPEN_560 0x5003
|
||||
|
||||
+#define USB_VENDOR_ID_AUREAL 0x0755
|
||||
+#define USB_DEVICE_ID_AUREAL_W01RN 0x2626
|
||||
+
|
||||
#define USB_VENDOR_ID_LABTEC 0x1020
|
||||
#define USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD 0x0006
|
||||
|
||||
diff -Naur linux-2.6.37/drivers/hid/Kconfig linux-2.6.37.patch/drivers/hid/Kconfig
|
||||
--- linux-2.6.37/drivers/hid/Kconfig 2011-01-05 01:50:19.000000000 +0100
|
||||
+++ linux-2.6.37.patch/drivers/hid/Kconfig 2011-01-07 22:35:31.467390603 +0100
|
||||
@@ -87,6 +87,13 @@
|
||||
Say Y here if you want support for keyboards of Apple iBooks, PowerBooks,
|
||||
MacBooks, MacBook Pros and Apple Aluminum.
|
||||
|
||||
+config HID_AUREAL
|
||||
+ tristate "Aureal" if EMBEDDED
|
||||
+ depends on USB_HID
|
||||
+ default !EMBEDDED
|
||||
+ ---help---
|
||||
+ Support for Aureal Cy se W-01RN Remote Controller
|
||||
+
|
||||
config HID_BELKIN
|
||||
tristate "Belkin Flip KVM and Wireless keyboard" if EMBEDDED
|
||||
depends on USB_HID
|
||||
diff -Naur linux-2.6.37/drivers/hid/Makefile linux-2.6.37.patch/drivers/hid/Makefile
|
||||
--- linux-2.6.37/drivers/hid/Makefile 2011-01-05 01:50:19.000000000 +0100
|
||||
+++ linux-2.6.37.patch/drivers/hid/Makefile 2011-01-07 22:35:31.547391590 +0100
|
||||
@@ -29,6 +29,7 @@
|
||||
obj-$(CONFIG_HID_A4TECH) += hid-a4tech.o
|
||||
obj-$(CONFIG_HID_ACRUX_FF) += hid-axff.o
|
||||
obj-$(CONFIG_HID_APPLE) += hid-apple.o
|
||||
+obj-$(CONFIG_HID_AUREAL) += hid-aureal.o
|
||||
obj-$(CONFIG_HID_BELKIN) += hid-belkin.o
|
||||
obj-$(CONFIG_HID_CANDO) += hid-cando.o
|
||||
obj-$(CONFIG_HID_CHERRY) += hid-cherry.o
|
@ -1,148 +0,0 @@
|
||||
diff -Naur linux-3.2.7/drivers/hid/hid-ids.h linux-3.2.7.patch/drivers/hid/hid-ids.h
|
||||
--- linux-3.2.7/drivers/hid/hid-ids.h 2012-02-20 22:42:16.000000000 +0100
|
||||
+++ linux-3.2.7.patch/drivers/hid/hid-ids.h 2012-02-25 20:35:22.798844241 +0100
|
||||
@@ -577,6 +577,9 @@
|
||||
|
||||
#define USB_VENDOR_ID_PHILIPS 0x0471
|
||||
#define USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE 0x0617
|
||||
+#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1 0x206c
|
||||
+#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2 0x20cc
|
||||
+#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3 0x0613
|
||||
|
||||
#define USB_VENDOR_ID_PI_ENGINEERING 0x05f3
|
||||
#define USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL 0xff
|
||||
diff -Naur linux-3.2.7/drivers/hid/hid-spinelplus.c linux-3.2.7.patch/drivers/hid/hid-spinelplus.c
|
||||
--- linux-3.2.7/drivers/hid/hid-spinelplus.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ linux-3.2.7.patch/drivers/hid/hid-spinelplus.c 2012-02-25 20:36:10.002787970 +0100
|
||||
@@ -0,0 +1,104 @@
|
||||
+/*
|
||||
+ * HID driver for "PHILIPS MCE USB IR Receiver- Spinel plus" remotes
|
||||
+ *
|
||||
+ * Copyright (c) 2010 Panagiotis Skintzos
|
||||
+ *
|
||||
+ * Renamed to Spinel, cleanup and modified to also support
|
||||
+ * Spinel Plus 0471:20CC by Stephan Raue 2012.
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * 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 of the License, or (at your option)
|
||||
+ * any later version.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/device.h>
|
||||
+#include <linux/input.h>
|
||||
+#include <linux/hid.h>
|
||||
+#include <linux/module.h>
|
||||
+
|
||||
+#include "hid-ids.h"
|
||||
+
|
||||
+#define spinelplus_map_key(c) set_bit(EV_REP, hi->input->evbit); \
|
||||
+ hid_map_usage_clear(hi, usage, bit, max, EV_KEY, (c))
|
||||
+
|
||||
+static int spinelplus_input_mapping(struct hid_device *hdev,
|
||||
+ struct hid_input *hi, struct hid_field *field, struct hid_usage *usage,
|
||||
+ unsigned long **bit, int *max)
|
||||
+{
|
||||
+ switch (usage->hid) {
|
||||
+ case 0xffbc000d: spinelplus_map_key(KEY_MEDIA); break;
|
||||
+ case 0xffbc0024: spinelplus_map_key(KEY_MEDIA); break;
|
||||
+ case 0xffbc0027: spinelplus_map_key(KEY_ZOOM); break;
|
||||
+ case 0xffbc0033: spinelplus_map_key(KEY_HOME); break;
|
||||
+ case 0xffbc0035: spinelplus_map_key(KEY_CAMERA); break;
|
||||
+ case 0xffbc0036: spinelplus_map_key(KEY_EPG); break;
|
||||
+ case 0xffbc0037: spinelplus_map_key(KEY_DVD); break;
|
||||
+ case 0xffbc0038: spinelplus_map_key(KEY_HOME); break;
|
||||
+ case 0xffbc0039: spinelplus_map_key(KEY_MP3); break;
|
||||
+ case 0xffbc003a: spinelplus_map_key(KEY_VIDEO); break;
|
||||
+ case 0xffbc005a: spinelplus_map_key(KEY_TEXT); break;
|
||||
+ case 0xffbc005b: spinelplus_map_key(KEY_RED); break;
|
||||
+ case 0xffbc005c: spinelplus_map_key(KEY_GREEN); break;
|
||||
+ case 0xffbc005d: spinelplus_map_key(KEY_YELLOW); break;
|
||||
+ case 0xffbc005e: spinelplus_map_key(KEY_BLUE); break;
|
||||
+ default:
|
||||
+ return 0;
|
||||
+ }
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static int spinelplus_probe(struct hid_device *hdev,
|
||||
+ const struct hid_device_id *id)
|
||||
+{
|
||||
+ int ret;
|
||||
+ /* Connect only to hid input (not hiddev & hidraw)*/
|
||||
+ unsigned int cmask = HID_CONNECT_HIDINPUT;
|
||||
+
|
||||
+ ret = hid_parse(hdev);
|
||||
+ if (ret) {
|
||||
+ dev_err(&hdev->dev, "parse failed\n");
|
||||
+ goto err_free;
|
||||
+ }
|
||||
+
|
||||
+ ret = hid_hw_start(hdev, cmask);
|
||||
+ if (ret) {
|
||||
+ dev_err(&hdev->dev, "hw start failed\n");
|
||||
+ goto err_free;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+err_free:
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static const struct hid_device_id spinelplus_devices[] = {
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3) },
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(hid, spinelplus_devices);
|
||||
+
|
||||
+static struct hid_driver spinelplus_driver = {
|
||||
+ .name = "SpinelPlus",
|
||||
+ .id_table = spinelplus_devices,
|
||||
+ .input_mapping = spinelplus_input_mapping,
|
||||
+ .probe = spinelplus_probe,
|
||||
+};
|
||||
+
|
||||
+static int __init spinelplus_init(void)
|
||||
+{
|
||||
+ return hid_register_driver(&spinelplus_driver);
|
||||
+}
|
||||
+
|
||||
+static void __exit spinelplus_exit(void)
|
||||
+{
|
||||
+ hid_unregister_driver(&spinelplus_driver);
|
||||
+}
|
||||
+
|
||||
+module_init(spinelplus_init);
|
||||
+module_exit(spinelplus_exit);
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff -Naur linux-3.2.7/drivers/hid/Kconfig linux-3.2.7.patch/drivers/hid/Kconfig
|
||||
--- linux-3.2.7/drivers/hid/Kconfig 2012-02-20 22:42:16.000000000 +0100
|
||||
+++ linux-3.2.7.patch/drivers/hid/Kconfig 2012-02-25 20:34:59.490378243 +0100
|
||||
@@ -540,6 +540,12 @@
|
||||
---help---
|
||||
Support for Speedlink Vicious and Divine Cezanne mouse.
|
||||
|
||||
+config HID_SPINELPLUS
|
||||
+ tristate "Spinel Plus remote control"
|
||||
+ depends on USB_HID
|
||||
+ ---help---
|
||||
+ Say Y here if you have a Spinel Plus (0471:206c/20cc/0613) remote
|
||||
+
|
||||
config HID_SUNPLUS
|
||||
tristate "Sunplus wireless desktop"
|
||||
depends on USB_HID
|
||||
diff -Naur linux-3.2.7/drivers/hid/Makefile linux-3.2.7.patch/drivers/hid/Makefile
|
||||
--- linux-3.2.7/drivers/hid/Makefile 2012-02-20 22:42:16.000000000 +0100
|
||||
+++ linux-3.2.7.patch/drivers/hid/Makefile 2012-02-25 20:34:12.487438531 +0100
|
||||
@@ -67,6 +67,7 @@
|
||||
obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o
|
||||
obj-$(CONFIG_HID_SONY) += hid-sony.o
|
||||
obj-$(CONFIG_HID_SPEEDLINK) += hid-speedlink.o
|
||||
+obj-$(CONFIG_HID_SPINELPLUS) += hid-spinelplus.o
|
||||
obj-$(CONFIG_HID_SUNPLUS) += hid-sunplus.o
|
||||
obj-$(CONFIG_HID_GREENASIA) += hid-gaff.o
|
||||
obj-$(CONFIG_HID_THRUSTMASTER) += hid-tmff.o
|
@ -1,12 +0,0 @@
|
||||
diff -Naur linux-3.0/drivers/media/rc/nuvoton-cir.c linux-3.0.patch/drivers/media/rc/nuvoton-cir.c
|
||||
--- linux-3.0/drivers/media/rc/nuvoton-cir.c 2011-07-22 04:17:23.000000000 +0200
|
||||
+++ linux-3.0.patch/drivers/media/rc/nuvoton-cir.c 2011-07-22 21:30:48.374591146 +0200
|
||||
@@ -1110,7 +1110,7 @@
|
||||
rdev->dev.parent = &pdev->dev;
|
||||
rdev->driver_name = NVT_DRIVER_NAME;
|
||||
rdev->map_name = RC_MAP_RC6_MCE;
|
||||
- rdev->timeout = MS_TO_NS(100);
|
||||
+ rdev->timeout = US_TO_NS(1000);
|
||||
/* rx resolution is hardwired to 50us atm, 1, 25, 100 also possible */
|
||||
rdev->rx_resolution = US_TO_NS(CIR_SAMPLE_PERIOD);
|
||||
#if 0
|
@ -1,11 +0,0 @@
|
||||
--- linux-3.2.2.orig/drivers/media/rc/mceusb.c 2012-01-30 23:37:12.374473509 +0100
|
||||
+++ linux-3.2.2/drivers/media/rc/mceusb.c 2012-01-30 23:40:57.989652931 +0100
|
||||
@@ -350,6 +350,8 @@
|
||||
{ USB_DEVICE(VENDOR_FORMOSA, 0xe015) },
|
||||
/* Formosa21 / eHome Infrared Receiver */
|
||||
{ USB_DEVICE(VENDOR_FORMOSA, 0xe016) },
|
||||
+ /* Formosa21 / eHome Infrared Receiver */
|
||||
+ { USB_DEVICE(VENDOR_FORMOSA, 0xe042) },
|
||||
/* Formosa aim / Trust MCE Infrared Receiver */
|
||||
{ USB_DEVICE(VENDOR_FORMOSA, 0xe017),
|
||||
.driver_info = MCE_GEN2_NO_TX },
|
@ -1,12 +0,0 @@
|
||||
diff -Naur linux-3.2.7/drivers/media/rc/mceusb.c linux-3.2.7.patch/drivers/media/rc/mceusb.c
|
||||
--- linux-3.2.7/drivers/media/rc/mceusb.c 2012-02-20 22:42:16.000000000 +0100
|
||||
+++ linux-3.2.7.patch/drivers/media/rc/mceusb.c 2012-02-27 04:47:29.210888244 +0100
|
||||
@@ -361,6 +361,8 @@
|
||||
{ USB_DEVICE(VENDOR_FORMOSA, 0xe03c) },
|
||||
/* Formosa Industrial Computing */
|
||||
{ USB_DEVICE(VENDOR_FORMOSA, 0xe03e) },
|
||||
+ /* Formosa Industrial Computing AIM IR606 */
|
||||
+ { USB_DEVICE(VENDOR_FORMOSA, 0xe042) },
|
||||
/* Fintek eHome Infrared Transceiver (HP branded) */
|
||||
{ USB_DEVICE(VENDOR_FINTEK, 0x5168) },
|
||||
/* Fintek eHome Infrared Transceiver */
|
@ -1,84 +0,0 @@
|
||||
From 90732af5fa8dc91982c8a3381247567906986b4c Mon Sep 17 00:00:00 2001
|
||||
From: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
Date: Sun, 1 Apr 2012 20:26:45 +0300
|
||||
Subject: [PATCH 1/2] [media] ati_remote: allow specifying a default keymap
|
||||
selector function
|
||||
|
||||
Currently the ati_remote default keymap is selected directly based on
|
||||
the USB device id.
|
||||
|
||||
Add support for instead specifying a function returning the default
|
||||
keymap, allowing more complex selection logic to be added when needed.
|
||||
|
||||
This will be used for Medion X10 remotes in a following commit.
|
||||
|
||||
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
---
|
||||
drivers/media/rc/ati_remote.c | 36 ++++++++++++++++++++++++++----------
|
||||
1 file changed, 26 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/rc/ati_remote.c b/drivers/media/rc/ati_remote.c
|
||||
index baf907b..7a35f7a 100644
|
||||
--- a/drivers/media/rc/ati_remote.c
|
||||
+++ b/drivers/media/rc/ati_remote.c
|
||||
@@ -151,13 +151,23 @@ MODULE_PARM_DESC(mouse, "Enable mouse device, default = yes");
|
||||
#undef err
|
||||
#define err(format, arg...) printk(KERN_ERR format , ## arg)
|
||||
|
||||
+struct ati_receiver_type {
|
||||
+ /* either default_keymap or get_default_keymap should be set */
|
||||
+ const char *default_keymap;
|
||||
+ const char *(*get_default_keymap)(struct usb_interface *interface);
|
||||
+};
|
||||
+
|
||||
+static const struct ati_receiver_type type_ati = { .default_keymap = RC_MAP_ATI_X10 };
|
||||
+static const struct ati_receiver_type type_medion = { .default_keymap = RC_MAP_MEDION_X10 };
|
||||
+static const struct ati_receiver_type type_firefly = { .default_keymap = RC_MAP_SNAPSTREAM_FIREFLY };
|
||||
+
|
||||
static struct usb_device_id ati_remote_table[] = {
|
||||
- { USB_DEVICE(ATI_REMOTE_VENDOR_ID, LOLA_REMOTE_PRODUCT_ID), .driver_info = (unsigned long)RC_MAP_ATI_X10 },
|
||||
- { USB_DEVICE(ATI_REMOTE_VENDOR_ID, LOLA2_REMOTE_PRODUCT_ID), .driver_info = (unsigned long)RC_MAP_ATI_X10 },
|
||||
- { USB_DEVICE(ATI_REMOTE_VENDOR_ID, ATI_REMOTE_PRODUCT_ID), .driver_info = (unsigned long)RC_MAP_ATI_X10 },
|
||||
- { USB_DEVICE(ATI_REMOTE_VENDOR_ID, NVIDIA_REMOTE_PRODUCT_ID), .driver_info = (unsigned long)RC_MAP_ATI_X10 },
|
||||
- { USB_DEVICE(ATI_REMOTE_VENDOR_ID, MEDION_REMOTE_PRODUCT_ID), .driver_info = (unsigned long)RC_MAP_MEDION_X10 },
|
||||
- { USB_DEVICE(ATI_REMOTE_VENDOR_ID, FIREFLY_REMOTE_PRODUCT_ID), .driver_info = (unsigned long)RC_MAP_SNAPSTREAM_FIREFLY },
|
||||
+ { USB_DEVICE(ATI_REMOTE_VENDOR_ID, LOLA_REMOTE_PRODUCT_ID), .driver_info = (unsigned long)&type_ati },
|
||||
+ { USB_DEVICE(ATI_REMOTE_VENDOR_ID, LOLA2_REMOTE_PRODUCT_ID), .driver_info = (unsigned long)&type_ati },
|
||||
+ { USB_DEVICE(ATI_REMOTE_VENDOR_ID, ATI_REMOTE_PRODUCT_ID), .driver_info = (unsigned long)&type_ati },
|
||||
+ { USB_DEVICE(ATI_REMOTE_VENDOR_ID, NVIDIA_REMOTE_PRODUCT_ID), .driver_info = (unsigned long)&type_ati },
|
||||
+ { USB_DEVICE(ATI_REMOTE_VENDOR_ID, MEDION_REMOTE_PRODUCT_ID), .driver_info = (unsigned long)&type_medion },
|
||||
+ { USB_DEVICE(ATI_REMOTE_VENDOR_ID, FIREFLY_REMOTE_PRODUCT_ID), .driver_info = (unsigned long)&type_firefly },
|
||||
{} /* Terminating entry */
|
||||
};
|
||||
|
||||
@@ -766,6 +776,7 @@ static int ati_remote_probe(struct usb_interface *interface, const struct usb_de
|
||||
struct usb_device *udev = interface_to_usbdev(interface);
|
||||
struct usb_host_interface *iface_host = interface->cur_altsetting;
|
||||
struct usb_endpoint_descriptor *endpoint_in, *endpoint_out;
|
||||
+ struct ati_receiver_type *type = (struct ati_receiver_type *)id->driver_info;
|
||||
struct ati_remote *ati_remote;
|
||||
struct input_dev *input_dev;
|
||||
struct rc_dev *rc_dev;
|
||||
@@ -827,10 +838,15 @@ static int ati_remote_probe(struct usb_interface *interface, const struct usb_de
|
||||
snprintf(ati_remote->mouse_name, sizeof(ati_remote->mouse_name),
|
||||
"%s mouse", ati_remote->rc_name);
|
||||
|
||||
- if (id->driver_info)
|
||||
- rc_dev->map_name = (const char *)id->driver_info;
|
||||
- else
|
||||
- rc_dev->map_name = RC_MAP_ATI_X10;
|
||||
+ rc_dev->map_name = RC_MAP_ATI_X10; /* default map */
|
||||
+
|
||||
+ /* set default keymap according to receiver model */
|
||||
+ if (type) {
|
||||
+ if (type->default_keymap)
|
||||
+ rc_dev->map_name = type->default_keymap;
|
||||
+ else if (type->get_default_keymap)
|
||||
+ rc_dev->map_name = type->get_default_keymap(interface);
|
||||
+ }
|
||||
|
||||
ati_remote_rc_init(ati_remote);
|
||||
mutex_init(&ati_remote->open_mutex);
|
||||
--
|
||||
1.7.9.3
|
||||
|
@ -1,328 +0,0 @@
|
||||
From 52d570e9e2d4e7e5637e6f8343fb9643fc6edb8b Mon Sep 17 00:00:00 2001
|
||||
From: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
Date: Sun, 1 Apr 2012 20:36:07 +0300
|
||||
Subject: [PATCH 2/2] [media] ati_remote: add support for Medion X10
|
||||
Digitainer remote
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Add support for another Medion X10 remote. This was apparently
|
||||
originally used with the Medion Digitainer box, but is now sold
|
||||
separately without any Digitainer labeling.
|
||||
|
||||
A peculiarity of this remote is a scrollwheel in place of up/down
|
||||
buttons. Each direction is mapped to 8 different scancodes, each
|
||||
corresponding to 1..8 notches, allowing multiple notches to the same
|
||||
direction to be transmitted in a single scancode. The driver transforms
|
||||
the multi-notch scancodes to multiple events of the single-notch
|
||||
scancode.
|
||||
(0x70..0x77 = 1..8 notches down, 0x78..0x7f = 1..8 notches up)
|
||||
|
||||
Since the scrollwheel scancodes are the same that are used for mouse on
|
||||
some other X10 (ati_remote) remotes, the driver will now check whether
|
||||
the active keymap has a keycode defined for the single-notch scancode
|
||||
when a mouse/scrollwheel scancode (0x70..0x7f) is received. If set,
|
||||
scrollwheel is assumed, otherwise mouse is assumed.
|
||||
|
||||
This remote ships with a different receiver than the already supported
|
||||
Medion X10 remote, but they share the same USB ID. The only difference
|
||||
in the USB descriptors is that the Digitainer receiver has the Remote
|
||||
Wakeup bit set in bmAttributes of the Configuration Descriptor.
|
||||
Therefore that is used to select the default keymap.
|
||||
|
||||
Thanks to Stephan Raue from OpenELEC (www.openelec.tv) for providing me
|
||||
both a Medion X10 Digitainer remote+receiver and an already supported
|
||||
Medion X10 remote+receiver. Thanks to Martin Beyß for providing some
|
||||
useful information about the remote (including the "Digitainer" name).
|
||||
|
||||
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
---
|
||||
drivers/media/rc/ati_remote.c | 90 ++++++++++-----
|
||||
drivers/media/rc/keymaps/Makefile | 1 +
|
||||
.../media/rc/keymaps/rc-medion-x10-digitainer.c | 115 ++++++++++++++++++++
|
||||
include/media/rc-map.h | 1 +
|
||||
4 files changed, 179 insertions(+), 28 deletions(-)
|
||||
create mode 100644 drivers/media/rc/keymaps/rc-medion-x10-digitainer.c
|
||||
|
||||
diff --git a/drivers/media/rc/ati_remote.c b/drivers/media/rc/ati_remote.c
|
||||
index 7a35f7a..26fa043 100644
|
||||
--- a/drivers/media/rc/ati_remote.c
|
||||
+++ b/drivers/media/rc/ati_remote.c
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* USB ATI Remote support
|
||||
*
|
||||
- * Copyright (c) 2011 Anssi Hannula <anssi.hannula@iki.fi>
|
||||
+ * Copyright (c) 2011, 2012 Anssi Hannula <anssi.hannula@iki.fi>
|
||||
* Version 2.2.0 Copyright (c) 2004 Torrey Hoffman <thoffman@arnor.net>
|
||||
* Version 2.1.1 Copyright (c) 2002 Vladimir Dergachev
|
||||
*
|
||||
@@ -157,8 +157,20 @@ struct ati_receiver_type {
|
||||
const char *(*get_default_keymap)(struct usb_interface *interface);
|
||||
};
|
||||
|
||||
+static const char *get_medion_keymap(struct usb_interface *interface)
|
||||
+{
|
||||
+ struct usb_device *udev = interface_to_usbdev(interface);
|
||||
+
|
||||
+ /* The receiver shipped with the "Digitainer" variant helpfully has
|
||||
+ * a single additional bit set in its descriptor. */
|
||||
+ if (udev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_WAKEUP)
|
||||
+ return RC_MAP_MEDION_X10_DIGITAINER;
|
||||
+
|
||||
+ return RC_MAP_MEDION_X10;
|
||||
+}
|
||||
+
|
||||
static const struct ati_receiver_type type_ati = { .default_keymap = RC_MAP_ATI_X10 };
|
||||
-static const struct ati_receiver_type type_medion = { .default_keymap = RC_MAP_MEDION_X10 };
|
||||
+static const struct ati_receiver_type type_medion = { .get_default_keymap = get_medion_keymap };
|
||||
static const struct ati_receiver_type type_firefly = { .default_keymap = RC_MAP_SNAPSTREAM_FIREFLY };
|
||||
|
||||
static struct usb_device_id ati_remote_table[] = {
|
||||
@@ -455,6 +467,7 @@ static void ati_remote_input_report(struct urb *urb)
|
||||
int acc;
|
||||
int remote_num;
|
||||
unsigned char scancode;
|
||||
+ u32 wheel_keycode = KEY_RESERVED;
|
||||
int i;
|
||||
|
||||
/*
|
||||
@@ -494,26 +507,33 @@ static void ati_remote_input_report(struct urb *urb)
|
||||
*/
|
||||
scancode = data[2] & 0x7f;
|
||||
|
||||
- /* Look up event code index in the mouse translation table. */
|
||||
- for (i = 0; ati_remote_tbl[i].kind != KIND_END; i++) {
|
||||
- if (scancode == ati_remote_tbl[i].data) {
|
||||
- index = i;
|
||||
- break;
|
||||
+ dbginfo(&ati_remote->interface->dev,
|
||||
+ "channel 0x%02x; key data %02x, scancode %02x\n",
|
||||
+ remote_num, data[2], scancode);
|
||||
+
|
||||
+ if (scancode >= 0x70) {
|
||||
+ /*
|
||||
+ * This is either a mouse or scrollwheel event, depending on
|
||||
+ * the remote/keymap.
|
||||
+ * Get the keycode assigned to scancode 0x78/0x70. If it is
|
||||
+ * set, assume this is a scrollwheel up/down event.
|
||||
+ */
|
||||
+ wheel_keycode = rc_g_keycode_from_table(ati_remote->rdev,
|
||||
+ scancode & 0x78);
|
||||
+
|
||||
+ if (wheel_keycode == KEY_RESERVED) {
|
||||
+ /* scrollwheel was not mapped, assume mouse */
|
||||
+
|
||||
+ /* Look up event code index in the mouse translation table. */
|
||||
+ for (i = 0; ati_remote_tbl[i].kind != KIND_END; i++) {
|
||||
+ if (scancode == ati_remote_tbl[i].data) {
|
||||
+ index = i;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
- if (index >= 0) {
|
||||
- dbginfo(&ati_remote->interface->dev,
|
||||
- "channel 0x%02x; mouse data %02x; index %d; keycode %d\n",
|
||||
- remote_num, data[2], index, ati_remote_tbl[index].code);
|
||||
- if (!dev)
|
||||
- return; /* no mouse device */
|
||||
- } else
|
||||
- dbginfo(&ati_remote->interface->dev,
|
||||
- "channel 0x%02x; key data %02x, scancode %02x\n",
|
||||
- remote_num, data[2], scancode);
|
||||
-
|
||||
-
|
||||
if (index >= 0 && ati_remote_tbl[index].kind == KIND_LITERAL) {
|
||||
input_event(dev, ati_remote_tbl[index].type,
|
||||
ati_remote_tbl[index].code,
|
||||
@@ -552,15 +572,29 @@ static void ati_remote_input_report(struct urb *urb)
|
||||
|
||||
if (index < 0) {
|
||||
/* Not a mouse event, hand it to rc-core. */
|
||||
-
|
||||
- /*
|
||||
- * We don't use the rc-core repeat handling yet as
|
||||
- * it would cause ghost repeats which would be a
|
||||
- * regression for this driver.
|
||||
- */
|
||||
- rc_keydown_notimeout(ati_remote->rdev, scancode,
|
||||
- data[2]);
|
||||
- rc_keyup(ati_remote->rdev);
|
||||
+ int count = 1;
|
||||
+
|
||||
+ if (wheel_keycode != KEY_RESERVED) {
|
||||
+ /*
|
||||
+ * This is a scrollwheel event, send the
|
||||
+ * scroll up (0x78) / down (0x70) scancode
|
||||
+ * repeatedly as many times as indicated by
|
||||
+ * rest of the scancode.
|
||||
+ */
|
||||
+ count = (scancode & 0x07) + 1;
|
||||
+ scancode &= 0x78;
|
||||
+ }
|
||||
+
|
||||
+ while (count--) {
|
||||
+ /*
|
||||
+ * We don't use the rc-core repeat handling yet as
|
||||
+ * it would cause ghost repeats which would be a
|
||||
+ * regression for this driver.
|
||||
+ */
|
||||
+ rc_keydown_notimeout(ati_remote->rdev, scancode,
|
||||
+ data[2]);
|
||||
+ rc_keyup(ati_remote->rdev);
|
||||
+ }
|
||||
return;
|
||||
}
|
||||
|
||||
diff --git a/drivers/media/rc/keymaps/Makefile b/drivers/media/rc/keymaps/Makefile
|
||||
index 36e4d5e..c1d977c 100644
|
||||
--- a/drivers/media/rc/keymaps/Makefile
|
||||
+++ b/drivers/media/rc/keymaps/Makefile
|
||||
@@ -49,6 +49,7 @@ obj-$(CONFIG_RC_MAP) += rc-adstech-dvb-t-pci.o \
|
||||
rc-lme2510.o \
|
||||
rc-manli.o \
|
||||
rc-medion-x10.o \
|
||||
+ rc-medion-x10-digitainer.o \
|
||||
rc-msi-digivox-ii.o \
|
||||
rc-msi-digivox-iii.o \
|
||||
rc-msi-tvanywhere.o \
|
||||
diff --git a/drivers/media/rc/keymaps/rc-medion-x10-digitainer.c b/drivers/media/rc/keymaps/rc-medion-x10-digitainer.c
|
||||
new file mode 100644
|
||||
index 0000000..0a5ce84
|
||||
--- /dev/null
|
||||
+++ b/drivers/media/rc/keymaps/rc-medion-x10-digitainer.c
|
||||
@@ -0,0 +1,115 @@
|
||||
+/*
|
||||
+ * Medion X10 RF remote keytable (Digitainer variant)
|
||||
+ *
|
||||
+ * Copyright (C) 2012 Anssi Hannula <anssi.hannula@iki.fi>
|
||||
+ *
|
||||
+ * This keymap is for a variant that has a distinctive scrollwheel instead of
|
||||
+ * up/down buttons (tested with P/N 40009936 / 20018268), reportedly
|
||||
+ * originally shipped with Medion Digitainer but now sold separately simply as
|
||||
+ * an "X10" remote.
|
||||
+ *
|
||||
+ * 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 of the License, 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 this program; if not, write to the Free Software Foundation, Inc.,
|
||||
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <media/rc-map.h>
|
||||
+
|
||||
+static struct rc_map_table medion_x10_digitainer[] = {
|
||||
+ { 0x02, KEY_POWER },
|
||||
+
|
||||
+ { 0x2c, KEY_TV },
|
||||
+ { 0x2d, KEY_VIDEO },
|
||||
+ { 0x04, KEY_DVD }, /* CD/DVD */
|
||||
+ { 0x16, KEY_TEXT }, /* "teletext" icon, i.e. a screen with lines */
|
||||
+ { 0x06, KEY_AUDIO },
|
||||
+ { 0x2e, KEY_RADIO },
|
||||
+ { 0x31, KEY_EPG }, /* a screen with an open book */
|
||||
+ { 0x05, KEY_IMAGES }, /* Photo */
|
||||
+ { 0x2f, KEY_INFO },
|
||||
+
|
||||
+ { 0x78, KEY_UP }, /* scrollwheel up 1 notch */
|
||||
+ /* 0x79..0x7f: 2-8 notches, driver repeats 0x78 entry */
|
||||
+
|
||||
+ { 0x70, KEY_DOWN }, /* scrollwheel down 1 notch */
|
||||
+ /* 0x71..0x77: 2-8 notches, driver repeats 0x70 entry */
|
||||
+
|
||||
+ { 0x19, KEY_MENU },
|
||||
+ { 0x1d, KEY_LEFT },
|
||||
+ { 0x1e, KEY_OK }, /* scrollwheel press */
|
||||
+ { 0x1f, KEY_RIGHT },
|
||||
+ { 0x20, KEY_BACK },
|
||||
+
|
||||
+ { 0x09, KEY_VOLUMEUP },
|
||||
+ { 0x08, KEY_VOLUMEDOWN },
|
||||
+ { 0x00, KEY_MUTE },
|
||||
+
|
||||
+ { 0x1b, KEY_SELECT }, /* also has "U" rotated 90 degrees CCW */
|
||||
+
|
||||
+ { 0x0b, KEY_CHANNELUP },
|
||||
+ { 0x0c, KEY_CHANNELDOWN },
|
||||
+ { 0x1c, KEY_LAST },
|
||||
+
|
||||
+ { 0x32, KEY_RED }, /* also Audio */
|
||||
+ { 0x33, KEY_GREEN }, /* also Subtitle */
|
||||
+ { 0x34, KEY_YELLOW }, /* also Angle */
|
||||
+ { 0x35, KEY_BLUE }, /* also Title */
|
||||
+
|
||||
+ { 0x28, KEY_STOP },
|
||||
+ { 0x29, KEY_PAUSE },
|
||||
+ { 0x25, KEY_PLAY },
|
||||
+ { 0x21, KEY_PREVIOUS },
|
||||
+ { 0x18, KEY_CAMERA },
|
||||
+ { 0x23, KEY_NEXT },
|
||||
+ { 0x24, KEY_REWIND },
|
||||
+ { 0x27, KEY_RECORD },
|
||||
+ { 0x26, KEY_FORWARD },
|
||||
+
|
||||
+ { 0x0d, KEY_1 },
|
||||
+ { 0x0e, KEY_2 },
|
||||
+ { 0x0f, KEY_3 },
|
||||
+ { 0x10, KEY_4 },
|
||||
+ { 0x11, KEY_5 },
|
||||
+ { 0x12, KEY_6 },
|
||||
+ { 0x13, KEY_7 },
|
||||
+ { 0x14, KEY_8 },
|
||||
+ { 0x15, KEY_9 },
|
||||
+ { 0x17, KEY_0 },
|
||||
+};
|
||||
+
|
||||
+static struct rc_map_list medion_x10_digitainer_map = {
|
||||
+ .map = {
|
||||
+ .scan = medion_x10_digitainer,
|
||||
+ .size = ARRAY_SIZE(medion_x10_digitainer),
|
||||
+ .rc_type = RC_TYPE_OTHER,
|
||||
+ .name = RC_MAP_MEDION_X10_DIGITAINER,
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+static int __init init_rc_map_medion_x10_digitainer(void)
|
||||
+{
|
||||
+ return rc_map_register(&medion_x10_digitainer_map);
|
||||
+}
|
||||
+
|
||||
+static void __exit exit_rc_map_medion_x10_digitainer(void)
|
||||
+{
|
||||
+ rc_map_unregister(&medion_x10_digitainer_map);
|
||||
+}
|
||||
+
|
||||
+module_init(init_rc_map_medion_x10_digitainer)
|
||||
+module_exit(exit_rc_map_medion_x10_digitainer)
|
||||
+
|
||||
+MODULE_DESCRIPTION("Medion X10 RF remote keytable (Digitainer variant)");
|
||||
+MODULE_AUTHOR("Anssi Hannula <anssi.hannula@iki.fi>");
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/include/media/rc-map.h b/include/media/rc-map.h
|
||||
index f688bde..902d29d 100644
|
||||
--- a/include/media/rc-map.h
|
||||
+++ b/include/media/rc-map.h
|
||||
@@ -110,6 +110,7 @@ void rc_map_init(void);
|
||||
#define RC_MAP_LME2510 "rc-lme2510"
|
||||
#define RC_MAP_MANLI "rc-manli"
|
||||
#define RC_MAP_MEDION_X10 "rc-medion-x10"
|
||||
+#define RC_MAP_MEDION_X10_DIGITAINER "rc-medion-x10-digitainer"
|
||||
#define RC_MAP_MSI_DIGIVOX_II "rc-msi-digivox-ii"
|
||||
#define RC_MAP_MSI_DIGIVOX_III "rc-msi-digivox-iii"
|
||||
#define RC_MAP_MSI_TVANYWHERE_PLUS "rc-msi-tvanywhere-plus"
|
||||
--
|
||||
1.7.9.3
|
||||
|
@ -1,207 +0,0 @@
|
||||
From ba993a6e4af8ff0e3a2f865836ff9330e5ffa219 Mon Sep 17 00:00:00 2001
|
||||
From: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
Date: Mon, 23 Apr 2012 00:25:14 +0300
|
||||
Subject: [PATCH 3/4] [media] ati_remote: add keymap for Medion X10 OR2x
|
||||
remotes
|
||||
|
||||
Add another Medion X10 remote keymap. This is for the Medion OR2x
|
||||
remotes with the Windows MCE button.
|
||||
|
||||
The receiver shipped with this remote has the same USB ID as the other
|
||||
Medion receivers, but the name is different and is therefore used to
|
||||
detect this variant.
|
||||
|
||||
[TODO: testing information]
|
||||
|
||||
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
---
|
||||
drivers/media/rc/ati_remote.c | 30 ++++++-
|
||||
drivers/media/rc/keymaps/Makefile | 1 +
|
||||
drivers/media/rc/keymaps/rc-medion-x10-or2x.c | 108 +++++++++++++++++++++++++
|
||||
include/media/rc-map.h | 1 +
|
||||
4 files changed, 136 insertions(+), 4 deletions(-)
|
||||
create mode 100644 drivers/media/rc/keymaps/rc-medion-x10-or2x.c
|
||||
|
||||
diff --git a/drivers/media/rc/ati_remote.c b/drivers/media/rc/ati_remote.c
|
||||
index 26fa043..2c70352 100644
|
||||
--- a/drivers/media/rc/ati_remote.c
|
||||
+++ b/drivers/media/rc/ati_remote.c
|
||||
@@ -161,11 +161,33 @@ static const char *get_medion_keymap(struct usb_interface *interface)
|
||||
{
|
||||
struct usb_device *udev = interface_to_usbdev(interface);
|
||||
|
||||
- /* The receiver shipped with the "Digitainer" variant helpfully has
|
||||
- * a single additional bit set in its descriptor. */
|
||||
- if (udev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_WAKEUP)
|
||||
- return RC_MAP_MEDION_X10_DIGITAINER;
|
||||
+ /*
|
||||
+ * There are many different Medion remotes shipped with a receiver
|
||||
+ * with the same usb id, but the receivers have subtle differences
|
||||
+ * in the USB descriptors allowing us to detect them.
|
||||
+ */
|
||||
+
|
||||
+ if (udev->manufacturer && udev->product) {
|
||||
+ if (udev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_WAKEUP) {
|
||||
+
|
||||
+ if (!strcmp(udev->manufacturer, "X10 Wireless Technology Inc")
|
||||
+ && !strcmp(udev->product, "USB Receiver"))
|
||||
+ return RC_MAP_MEDION_X10_DIGITAINER;
|
||||
+
|
||||
+ if (!strcmp(udev->manufacturer, "X10 WTI")
|
||||
+ && !strcmp(udev->product, "RF receiver"))
|
||||
+ return RC_MAP_MEDION_X10_OR2X;
|
||||
+ } else {
|
||||
+
|
||||
+ if (!strcmp(udev->manufacturer, "X10 Wireless Technology Inc")
|
||||
+ && !strcmp(udev->product, "USB Receiver"))
|
||||
+ return RC_MAP_MEDION_X10;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
+ dev_info(&interface->dev,
|
||||
+ "Unknown Medion X10 receiver, using default ati_remote Medion keymap\n");
|
||||
+
|
||||
return RC_MAP_MEDION_X10;
|
||||
}
|
||||
|
||||
diff --git a/drivers/media/rc/keymaps/Makefile b/drivers/media/rc/keymaps/Makefile
|
||||
index c1d977c..975e130 100644
|
||||
--- a/drivers/media/rc/keymaps/Makefile
|
||||
+++ b/drivers/media/rc/keymaps/Makefile
|
||||
@@ -50,6 +50,7 @@ obj-$(CONFIG_RC_MAP) += rc-adstech-dvb-t-pci.o \
|
||||
rc-manli.o \
|
||||
rc-medion-x10.o \
|
||||
rc-medion-x10-digitainer.o \
|
||||
+ rc-medion-x10-or2x.o \
|
||||
rc-msi-digivox-ii.o \
|
||||
rc-msi-digivox-iii.o \
|
||||
rc-msi-tvanywhere.o \
|
||||
diff --git a/drivers/media/rc/keymaps/rc-medion-x10-or2x.c b/drivers/media/rc/keymaps/rc-medion-x10-or2x.c
|
||||
new file mode 100644
|
||||
index 0000000..b077300
|
||||
--- /dev/null
|
||||
+++ b/drivers/media/rc/keymaps/rc-medion-x10-or2x.c
|
||||
@@ -0,0 +1,108 @@
|
||||
+/*
|
||||
+ * Medion X10 OR22/OR24 RF remote keytable
|
||||
+ *
|
||||
+ * Copyright (C) 2012 Anssi Hannula <anssi.hannula@iki.fi>
|
||||
+ *
|
||||
+ * This keymap is for several Medion X10 remotes that have the Windows MCE
|
||||
+ * button. This has been tested with a "RF VISTA Remote Control", OR24V,
|
||||
+ * P/N 20035335, but should work with other variants that have the same
|
||||
+ * buttons, such as OR22V and OR24E.
|
||||
+ *
|
||||
+ * 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 of the License, 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 this program; if not, write to the Free Software Foundation, Inc.,
|
||||
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <media/rc-map.h>
|
||||
+
|
||||
+static struct rc_map_table medion_x10_or2x[] = {
|
||||
+ { 0x02, KEY_POWER },
|
||||
+ { 0x16, KEY_TEXT }, /* "T" in a box, for teletext */
|
||||
+
|
||||
+ { 0x09, KEY_VOLUMEUP },
|
||||
+ { 0x08, KEY_VOLUMEDOWN },
|
||||
+ { 0x00, KEY_MUTE },
|
||||
+ { 0x0b, KEY_CHANNELUP },
|
||||
+ { 0x0c, KEY_CHANNELDOWN },
|
||||
+
|
||||
+ { 0x32, KEY_RED },
|
||||
+ { 0x33, KEY_GREEN },
|
||||
+ { 0x34, KEY_YELLOW },
|
||||
+ { 0x35, KEY_BLUE },
|
||||
+
|
||||
+ { 0x18, KEY_PVR }, /* record symbol inside a tv symbol */
|
||||
+ { 0x04, KEY_DVD }, /* disc symbol */
|
||||
+ { 0x31, KEY_EPG }, /* a tv schedule symbol */
|
||||
+ { 0x1c, KEY_TV }, /* play symbol inside a tv symbol */
|
||||
+ { 0x20, KEY_BACK },
|
||||
+ { 0x2f, KEY_INFO },
|
||||
+
|
||||
+ { 0x1a, KEY_UP },
|
||||
+ { 0x22, KEY_DOWN },
|
||||
+ { 0x1d, KEY_LEFT },
|
||||
+ { 0x1f, KEY_RIGHT },
|
||||
+ { 0x1e, KEY_OK },
|
||||
+
|
||||
+ { 0x1b, KEY_MEDIA }, /* Windows MCE button */
|
||||
+
|
||||
+ { 0x21, KEY_PREVIOUS },
|
||||
+ { 0x23, KEY_NEXT },
|
||||
+ { 0x24, KEY_REWIND },
|
||||
+ { 0x26, KEY_FORWARD },
|
||||
+ { 0x25, KEY_PLAY },
|
||||
+ { 0x28, KEY_STOP },
|
||||
+ { 0x29, KEY_PAUSE },
|
||||
+ { 0x27, KEY_RECORD },
|
||||
+
|
||||
+ { 0x0d, KEY_1 },
|
||||
+ { 0x0e, KEY_2 },
|
||||
+ { 0x0f, KEY_3 },
|
||||
+ { 0x10, KEY_4 },
|
||||
+ { 0x11, KEY_5 },
|
||||
+ { 0x12, KEY_6 },
|
||||
+ { 0x13, KEY_7 },
|
||||
+ { 0x14, KEY_8 },
|
||||
+ { 0x15, KEY_9 },
|
||||
+ { 0x17, KEY_0 },
|
||||
+ { 0x30, KEY_CLEAR },
|
||||
+ { 0x36, KEY_ENTER },
|
||||
+ { 0x37, KEY_NUMERIC_STAR },
|
||||
+ { 0x38, KEY_NUMERIC_POUND },
|
||||
+};
|
||||
+
|
||||
+static struct rc_map_list medion_x10_or2x_map = {
|
||||
+ .map = {
|
||||
+ .scan = medion_x10_or2x,
|
||||
+ .size = ARRAY_SIZE(medion_x10_or2x),
|
||||
+ .rc_type = RC_TYPE_OTHER,
|
||||
+ .name = RC_MAP_MEDION_X10_OR2X,
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+static int __init init_rc_map_medion_x10_or2x(void)
|
||||
+{
|
||||
+ return rc_map_register(&medion_x10_or2x_map);
|
||||
+}
|
||||
+
|
||||
+static void __exit exit_rc_map_medion_x10_or2x(void)
|
||||
+{
|
||||
+ rc_map_unregister(&medion_x10_or2x_map);
|
||||
+}
|
||||
+
|
||||
+module_init(init_rc_map_medion_x10_or2x)
|
||||
+module_exit(exit_rc_map_medion_x10_or2x)
|
||||
+
|
||||
+MODULE_DESCRIPTION("Medion X10 OR22/OR24 RF remote keytable");
|
||||
+MODULE_AUTHOR("Anssi Hannula <anssi.hannula@iki.fi>");
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/include/media/rc-map.h b/include/media/rc-map.h
|
||||
index 902d29d..20970ae 100644
|
||||
--- a/include/media/rc-map.h
|
||||
+++ b/include/media/rc-map.h
|
||||
@@ -111,6 +111,7 @@ void rc_map_init(void);
|
||||
#define RC_MAP_MANLI "rc-manli"
|
||||
#define RC_MAP_MEDION_X10 "rc-medion-x10"
|
||||
#define RC_MAP_MEDION_X10_DIGITAINER "rc-medion-x10-digitainer"
|
||||
+#define RC_MAP_MEDION_X10_OR2X "rc-medion-x10-or2x"
|
||||
#define RC_MAP_MSI_DIGIVOX_II "rc-msi-digivox-ii"
|
||||
#define RC_MAP_MSI_DIGIVOX_III "rc-msi-digivox-iii"
|
||||
#define RC_MAP_MSI_TVANYWHERE_PLUS "rc-msi-tvanywhere-plus"
|
||||
--
|
||||
1.7.10
|
||||
|
@ -1,48 +0,0 @@
|
||||
From 3c90ed099a00fc9913665fab0ed3c4382a1b4d64 Mon Sep 17 00:00:00 2001
|
||||
From: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
Date: Mon, 23 Apr 2012 00:37:39 +0300
|
||||
Subject: [PATCH 4/4] [media] ati_remote: add regular up/down buttons to
|
||||
Medion Digitainer keymap
|
||||
|
||||
There are many different Medion X10 remotes that need slightly different
|
||||
keymaps. We may not yet have all the needed keymaps, in which case a
|
||||
wrong keymap may be used. This happened with Medion X10 OR2x remotes
|
||||
before the keymap for them was added, causing the ati_remote driver to
|
||||
select the Medion Digitainer keymap instead. Unfortunately, the Medion
|
||||
Digitainer keymap doesn't have the standard X10 up/down scancodes
|
||||
assigned to KEY_UP and KEY_DOWN keycodes, making wrongly assigned
|
||||
remotes mostly unusable.
|
||||
|
||||
Add the regular KEY_UP and KEY_DOWN scancodes to the Medion X10
|
||||
Digitainer keymap, making any Medion remote mostly usable even when
|
||||
wrongly used with that keymap (standard buttons, such as
|
||||
up/down/left/right, 0-9, play/stop/pause, have the same scancode in all
|
||||
the X10 remotes).
|
||||
|
||||
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
---
|
||||
drivers/media/rc/keymaps/rc-medion-x10-digitainer.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/drivers/media/rc/keymaps/rc-medion-x10-digitainer.c b/drivers/media/rc/keymaps/rc-medion-x10-digitainer.c
|
||||
index 0a5ce84..d405d8c 100644
|
||||
--- a/drivers/media/rc/keymaps/rc-medion-x10-digitainer.c
|
||||
+++ b/drivers/media/rc/keymaps/rc-medion-x10-digitainer.c
|
||||
@@ -86,6 +86,14 @@ static struct rc_map_table medion_x10_digitainer[] = {
|
||||
{ 0x14, KEY_8 },
|
||||
{ 0x15, KEY_9 },
|
||||
{ 0x17, KEY_0 },
|
||||
+
|
||||
+ /* these do not actually exist on this remote, but these scancodes
|
||||
+ * exist on all other Medion X10 remotes and adding them here allows
|
||||
+ * such remotes to be adequately usable with this keymap in case
|
||||
+ * this keymap is wrongly used with them (which is quite possible as
|
||||
+ * there are lots of different Medion X10 remotesi): */
|
||||
+ { 0x1a, KEY_UP },
|
||||
+ { 0x22, KEY_DOWN },
|
||||
};
|
||||
|
||||
static struct rc_map_list medion_x10_digitainer_map = {
|
||||
--
|
||||
1.7.10
|
||||
|
@ -1,12 +0,0 @@
|
||||
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;
|
||||
}
|
||||
|
@ -1,845 +0,0 @@
|
||||
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.
|
@ -1,649 +0,0 @@
|
||||
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 {
|
@ -1,12 +0,0 @@
|
||||
diff -Naur linux-3.2.1/drivers/media/dvb/frontends/stb0899_drv.c linux-3.2.1.patch/drivers/media/dvb/frontends/stb0899_drv.c
|
||||
--- linux-3.2.1/drivers/media/dvb/frontends/stb0899_drv.c 2012-01-12 20:42:45.000000000 +0100
|
||||
+++ linux-3.2.1.patch/drivers/media/dvb/frontends/stb0899_drv.c 2012-01-23 10:47:29.311211860 +0100
|
||||
@@ -1614,7 +1614,7 @@
|
||||
.frequency_max = 2150000,
|
||||
.frequency_stepsize = 0,
|
||||
.frequency_tolerance = 0,
|
||||
- .symbol_rate_min = 5000000,
|
||||
+ .symbol_rate_min = 1000000,
|
||||
.symbol_rate_max = 45000000,
|
||||
|
||||
.caps = FE_CAN_INVERSION_AUTO |
|
File diff suppressed because it is too large
Load Diff
@ -1,90 +0,0 @@
|
||||
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
|
@ -1,141 +0,0 @@
|
||||
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
|
@ -1,46 +0,0 @@
|
||||
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 },
|
||||
+ },
|
||||
}
|
||||
};
|
||||
|
@ -1,389 +0,0 @@
|
||||
From 8ab3362665a699bd54fc489ff7fb6372678b94c1 Mon Sep 17 00:00:00 2001
|
||||
From: Holger Nelson <hnelson@hnelson.de>
|
||||
Date: Wed, 28 Dec 2011 18:55:41 -0300
|
||||
Subject: [PATCH] [media] em28xx: Reworked probe code to get rid of some hacks
|
||||
|
||||
Reworked device probing to get rid of hacks to guess the maximum size of
|
||||
dvb iso transfer packets. The new code also selects the first alternate
|
||||
config which supports the largest possible iso transfers for dvb.
|
||||
|
||||
[mchehab@redhat.com: Fix a few checkpatch.pl CodingStyle compliants]
|
||||
Signed-off-by: Holger Nelson <hnelson@hnelson.de>
|
||||
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
---
|
||||
drivers/media/video/em28xx/em28xx-audio.c | 2 +-
|
||||
drivers/media/video/em28xx/em28xx-cards.c | 148 ++++++++++++++---------------
|
||||
drivers/media/video/em28xx/em28xx-core.c | 59 +-----------
|
||||
drivers/media/video/em28xx/em28xx-dvb.c | 4 +-
|
||||
drivers/media/video/em28xx/em28xx-reg.h | 5 +
|
||||
drivers/media/video/em28xx/em28xx.h | 2 +
|
||||
6 files changed, 84 insertions(+), 136 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/video/em28xx/em28xx-audio.c b/drivers/media/video/em28xx/em28xx-audio.c
|
||||
index cff0768..e2a7b77 100644
|
||||
--- a/drivers/media/video/em28xx/em28xx-audio.c
|
||||
+++ b/drivers/media/video/em28xx/em28xx-audio.c
|
||||
@@ -193,7 +193,7 @@ static int em28xx_init_audio_isoc(struct em28xx *dev)
|
||||
|
||||
urb->dev = dev->udev;
|
||||
urb->context = dev;
|
||||
- urb->pipe = usb_rcvisocpipe(dev->udev, 0x83);
|
||||
+ urb->pipe = usb_rcvisocpipe(dev->udev, EM28XX_EP_AUDIO);
|
||||
urb->transfer_flags = URB_ISO_ASAP;
|
||||
urb->transfer_buffer = dev->adev.transfer_buffer[i];
|
||||
urb->interval = 1;
|
||||
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
|
||||
index b95e661..0adaf84 100644
|
||||
--- a/drivers/media/video/em28xx/em28xx-cards.c
|
||||
+++ b/drivers/media/video/em28xx/em28xx-cards.c
|
||||
@@ -3111,12 +3111,11 @@ unregister_dev:
|
||||
static int em28xx_usb_probe(struct usb_interface *interface,
|
||||
const struct usb_device_id *id)
|
||||
{
|
||||
- const struct usb_endpoint_descriptor *endpoint;
|
||||
struct usb_device *udev;
|
||||
struct em28xx *dev = NULL;
|
||||
int retval;
|
||||
- bool is_audio_only = false, has_audio = false;
|
||||
- int i, nr, isoc_pipe;
|
||||
+ bool has_audio = false, has_video = false, has_dvb = false;
|
||||
+ int i, nr;
|
||||
const int ifnum = interface->altsetting[0].desc.bInterfaceNumber;
|
||||
char *speed;
|
||||
char descr[255] = "";
|
||||
@@ -3148,54 +3147,65 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
||||
goto err;
|
||||
}
|
||||
|
||||
+ /* allocate memory for our device state and initialize it */
|
||||
+ dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
||||
+ if (dev == NULL) {
|
||||
+ em28xx_err(DRIVER_NAME ": out of memory!\n");
|
||||
+ retval = -ENOMEM;
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
+ /* compute alternate max packet sizes */
|
||||
+ dev->alt_max_pkt_size = kmalloc(sizeof(dev->alt_max_pkt_size[0]) *
|
||||
+ interface->num_altsetting, GFP_KERNEL);
|
||||
+ if (dev->alt_max_pkt_size == NULL) {
|
||||
+ em28xx_errdev("out of memory!\n");
|
||||
+ kfree(dev);
|
||||
+ retval = -ENOMEM;
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
/* Get endpoints */
|
||||
for (i = 0; i < interface->num_altsetting; i++) {
|
||||
int ep;
|
||||
|
||||
for (ep = 0; ep < interface->altsetting[i].desc.bNumEndpoints; ep++) {
|
||||
- struct usb_host_endpoint *e;
|
||||
- e = &interface->altsetting[i].endpoint[ep];
|
||||
-
|
||||
- if (e->desc.bEndpointAddress == 0x83)
|
||||
- has_audio = true;
|
||||
+ const struct usb_endpoint_descriptor *e;
|
||||
+ int sizedescr, size;
|
||||
+
|
||||
+ e = &interface->altsetting[i].endpoint[ep].desc;
|
||||
+
|
||||
+ sizedescr = le16_to_cpu(e->wMaxPacketSize);
|
||||
+ size = sizedescr & 0x7ff;
|
||||
+
|
||||
+ if (udev->speed == USB_SPEED_HIGH)
|
||||
+ size = size * hb_mult(sizedescr);
|
||||
+
|
||||
+ if (usb_endpoint_xfer_isoc(e) &&
|
||||
+ usb_endpoint_dir_in(e)) {
|
||||
+ switch (e->bEndpointAddress) {
|
||||
+ case EM28XX_EP_AUDIO:
|
||||
+ has_audio = true;
|
||||
+ break;
|
||||
+ case EM28XX_EP_ANALOG:
|
||||
+ has_video = true;
|
||||
+ dev->alt_max_pkt_size[i] = size;
|
||||
+ break;
|
||||
+ case EM28XX_EP_DIGITAL:
|
||||
+ has_dvb = true;
|
||||
+ if (size > dev->dvb_max_pkt_size) {
|
||||
+ dev->dvb_max_pkt_size = size;
|
||||
+ dev->dvb_alt = i;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
- endpoint = &interface->cur_altsetting->endpoint[0].desc;
|
||||
-
|
||||
- /* check if the device has the iso in endpoint at the correct place */
|
||||
- if (usb_endpoint_xfer_isoc(endpoint)
|
||||
- &&
|
||||
- (interface->altsetting[1].endpoint[0].desc.wMaxPacketSize == 940)) {
|
||||
- /* It's a newer em2874/em2875 device */
|
||||
- isoc_pipe = 0;
|
||||
- } else {
|
||||
- int check_interface = 1;
|
||||
- isoc_pipe = 1;
|
||||
- endpoint = &interface->cur_altsetting->endpoint[1].desc;
|
||||
- if (!usb_endpoint_xfer_isoc(endpoint))
|
||||
- check_interface = 0;
|
||||
-
|
||||
- if (usb_endpoint_dir_out(endpoint))
|
||||
- check_interface = 0;
|
||||
-
|
||||
- if (!check_interface) {
|
||||
- if (has_audio) {
|
||||
- is_audio_only = true;
|
||||
- } else {
|
||||
- em28xx_err(DRIVER_NAME " video device (%04x:%04x): "
|
||||
- "interface %i, class %i found.\n",
|
||||
- le16_to_cpu(udev->descriptor.idVendor),
|
||||
- le16_to_cpu(udev->descriptor.idProduct),
|
||||
- ifnum,
|
||||
- interface->altsetting[0].desc.bInterfaceClass);
|
||||
- em28xx_err(DRIVER_NAME " This is an anciliary "
|
||||
- "interface not used by the driver\n");
|
||||
-
|
||||
- retval = -ENODEV;
|
||||
- goto err;
|
||||
- }
|
||||
- }
|
||||
+ if (!(has_audio || has_video || has_dvb)) {
|
||||
+ retval = -ENODEV;
|
||||
+ goto err_free;
|
||||
}
|
||||
|
||||
switch (udev->speed) {
|
||||
@@ -3221,6 +3231,7 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
||||
strlcat(descr, " ", sizeof(descr));
|
||||
strlcat(descr, udev->product, sizeof(descr));
|
||||
}
|
||||
+
|
||||
if (*descr)
|
||||
strlcat(descr, " ", sizeof(descr));
|
||||
|
||||
@@ -3237,6 +3248,14 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
||||
printk(KERN_INFO DRIVER_NAME
|
||||
": Audio Vendor Class interface %i found\n",
|
||||
ifnum);
|
||||
+ if (has_video)
|
||||
+ printk(KERN_INFO DRIVER_NAME
|
||||
+ ": Video interface %i found\n",
|
||||
+ ifnum);
|
||||
+ if (has_dvb)
|
||||
+ printk(KERN_INFO DRIVER_NAME
|
||||
+ ": DVB interface %i found\n",
|
||||
+ ifnum);
|
||||
|
||||
/*
|
||||
* Make sure we have 480 Mbps of bandwidth, otherwise things like
|
||||
@@ -3248,22 +3267,14 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
||||
printk(DRIVER_NAME ": Device must be connected to a high-speed"
|
||||
" USB 2.0 port.\n");
|
||||
retval = -ENODEV;
|
||||
- goto err;
|
||||
- }
|
||||
-
|
||||
- /* allocate memory for our device state and initialize it */
|
||||
- dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
||||
- if (dev == NULL) {
|
||||
- em28xx_err(DRIVER_NAME ": out of memory!\n");
|
||||
- retval = -ENOMEM;
|
||||
- goto err;
|
||||
+ goto err_free;
|
||||
}
|
||||
|
||||
snprintf(dev->name, sizeof(dev->name), "em28xx #%d", nr);
|
||||
dev->devno = nr;
|
||||
dev->model = id->driver_info;
|
||||
dev->alt = -1;
|
||||
- dev->is_audio_only = is_audio_only;
|
||||
+ dev->is_audio_only = has_audio && !(has_video || has_dvb);
|
||||
dev->has_alsa_audio = has_audio;
|
||||
dev->audio_ifnum = ifnum;
|
||||
|
||||
@@ -3276,26 +3287,7 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
||||
}
|
||||
}
|
||||
|
||||
- /* compute alternate max packet sizes */
|
||||
dev->num_alt = interface->num_altsetting;
|
||||
- dev->alt_max_pkt_size = kmalloc(32 * dev->num_alt, GFP_KERNEL);
|
||||
-
|
||||
- if (dev->alt_max_pkt_size == NULL) {
|
||||
- em28xx_errdev("out of memory!\n");
|
||||
- kfree(dev);
|
||||
- retval = -ENOMEM;
|
||||
- goto err;
|
||||
- }
|
||||
-
|
||||
- for (i = 0; i < dev->num_alt ; i++) {
|
||||
- u16 tmp = le16_to_cpu(interface->altsetting[i].endpoint[isoc_pipe].desc.wMaxPacketSize);
|
||||
- unsigned int size = tmp & 0x7ff;
|
||||
-
|
||||
- if (udev->speed == USB_SPEED_HIGH)
|
||||
- size = size * hb_mult(tmp);
|
||||
-
|
||||
- dev->alt_max_pkt_size[i] = size;
|
||||
- }
|
||||
|
||||
if ((card[nr] >= 0) && (card[nr] < em28xx_bcount))
|
||||
dev->model = card[nr];
|
||||
@@ -3308,10 +3300,7 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
||||
mutex_lock(&dev->lock);
|
||||
retval = em28xx_init_dev(&dev, udev, interface, nr);
|
||||
if (retval) {
|
||||
- mutex_unlock(&dev->lock);
|
||||
- kfree(dev->alt_max_pkt_size);
|
||||
- kfree(dev);
|
||||
- goto err;
|
||||
+ goto unlock_and_free;
|
||||
}
|
||||
|
||||
request_modules(dev);
|
||||
@@ -3330,6 +3319,13 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
||||
|
||||
return 0;
|
||||
|
||||
+unlock_and_free:
|
||||
+ mutex_unlock(&dev->lock);
|
||||
+
|
||||
+err_free:
|
||||
+ kfree(dev->alt_max_pkt_size);
|
||||
+ kfree(dev);
|
||||
+
|
||||
err:
|
||||
clear_bit(nr, &em28xx_devused);
|
||||
|
||||
diff --git a/drivers/media/video/em28xx/em28xx-core.c b/drivers/media/video/em28xx/em28xx-core.c
|
||||
index 2982a06..0aacc96 100644
|
||||
--- a/drivers/media/video/em28xx/em28xx-core.c
|
||||
+++ b/drivers/media/video/em28xx/em28xx-core.c
|
||||
@@ -1070,7 +1070,8 @@ int em28xx_init_isoc(struct em28xx *dev, int max_packets,
|
||||
should also be using 'desc.bInterval'
|
||||
*/
|
||||
pipe = usb_rcvisocpipe(dev->udev,
|
||||
- dev->mode == EM28XX_ANALOG_MODE ? 0x82 : 0x84);
|
||||
+ dev->mode == EM28XX_ANALOG_MODE ?
|
||||
+ EM28XX_EP_ANALOG : EM28XX_EP_DIGITAL);
|
||||
|
||||
usb_fill_int_urb(urb, dev->udev, pipe,
|
||||
dev->isoc_ctl.transfer_buffer[i], sb_size,
|
||||
@@ -1108,62 +1109,6 @@ int em28xx_init_isoc(struct em28xx *dev, int max_packets,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(em28xx_init_isoc);
|
||||
|
||||
-/* Determine the packet size for the DVB stream for the given device
|
||||
- (underlying value programmed into the eeprom) */
|
||||
-int em28xx_isoc_dvb_max_packetsize(struct em28xx *dev)
|
||||
-{
|
||||
- unsigned int chip_cfg2;
|
||||
- unsigned int packet_size;
|
||||
-
|
||||
- switch (dev->chip_id) {
|
||||
- case CHIP_ID_EM2710:
|
||||
- case CHIP_ID_EM2750:
|
||||
- case CHIP_ID_EM2800:
|
||||
- case CHIP_ID_EM2820:
|
||||
- case CHIP_ID_EM2840:
|
||||
- case CHIP_ID_EM2860:
|
||||
- /* No DVB support */
|
||||
- return -EINVAL;
|
||||
- case CHIP_ID_EM2870:
|
||||
- case CHIP_ID_EM2883:
|
||||
- /* TS max packet size stored in bits 1-0 of R01 */
|
||||
- chip_cfg2 = em28xx_read_reg(dev, EM28XX_R01_CHIPCFG2);
|
||||
- switch (chip_cfg2 & EM28XX_CHIPCFG2_TS_PACKETSIZE_MASK) {
|
||||
- case EM28XX_CHIPCFG2_TS_PACKETSIZE_188:
|
||||
- packet_size = 188;
|
||||
- break;
|
||||
- case EM28XX_CHIPCFG2_TS_PACKETSIZE_376:
|
||||
- packet_size = 376;
|
||||
- break;
|
||||
- case EM28XX_CHIPCFG2_TS_PACKETSIZE_564:
|
||||
- packet_size = 564;
|
||||
- break;
|
||||
- case EM28XX_CHIPCFG2_TS_PACKETSIZE_752:
|
||||
- packet_size = 752;
|
||||
- break;
|
||||
- }
|
||||
- break;
|
||||
- case CHIP_ID_EM2874:
|
||||
- /*
|
||||
- * FIXME: for now assumes 564 like it was before, but the
|
||||
- * em2874 code should be added to return the proper value
|
||||
- */
|
||||
- packet_size = 564;
|
||||
- break;
|
||||
- case CHIP_ID_EM2884:
|
||||
- case CHIP_ID_EM28174:
|
||||
- default:
|
||||
- /*
|
||||
- * FIXME: same as em2874. 564 was enough for 22 Mbit DVB-T
|
||||
- * but not enough for 44 Mbit DVB-C.
|
||||
- */
|
||||
- packet_size = 752;
|
||||
- }
|
||||
-
|
||||
- return packet_size;
|
||||
-}
|
||||
-EXPORT_SYMBOL_GPL(em28xx_isoc_dvb_max_packetsize);
|
||||
-
|
||||
/*
|
||||
* em28xx_wake_i2c()
|
||||
* configure i2c attached devices
|
||||
diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c
|
||||
index ac55de9..9449423 100644
|
||||
--- a/drivers/media/video/em28xx/em28xx-dvb.c
|
||||
+++ b/drivers/media/video/em28xx/em28xx-dvb.c
|
||||
@@ -164,12 +164,12 @@ static int em28xx_start_streaming(struct em28xx_dvb *dvb)
|
||||
struct em28xx *dev = dvb->adapter.priv;
|
||||
int max_dvb_packet_size;
|
||||
|
||||
- usb_set_interface(dev->udev, 0, 1);
|
||||
+ usb_set_interface(dev->udev, 0, dev->dvb_alt);
|
||||
rc = em28xx_set_mode(dev, EM28XX_DIGITAL_MODE);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
- max_dvb_packet_size = em28xx_isoc_dvb_max_packetsize(dev);
|
||||
+ max_dvb_packet_size = dev->dvb_max_pkt_size;
|
||||
if (max_dvb_packet_size < 0)
|
||||
return max_dvb_packet_size;
|
||||
dprintk(1, "Using %d buffers each with %d bytes\n",
|
||||
diff --git a/drivers/media/video/em28xx/em28xx-reg.h b/drivers/media/video/em28xx/em28xx-reg.h
|
||||
index 66f7923..2f62685 100644
|
||||
--- a/drivers/media/video/em28xx/em28xx-reg.h
|
||||
+++ b/drivers/media/video/em28xx/em28xx-reg.h
|
||||
@@ -12,6 +12,11 @@
|
||||
#define EM_GPO_2 (1 << 2)
|
||||
#define EM_GPO_3 (1 << 3)
|
||||
|
||||
+/* em28xx endpoints */
|
||||
+#define EM28XX_EP_ANALOG 0x82
|
||||
+#define EM28XX_EP_AUDIO 0x83
|
||||
+#define EM28XX_EP_DIGITAL 0x84
|
||||
+
|
||||
/* em2800 registers */
|
||||
#define EM2800_R08_AUDIOSRC 0x08
|
||||
|
||||
diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h
|
||||
index 2dbb12c..7c3ebe2 100644
|
||||
--- a/drivers/media/video/em28xx/em28xx.h
|
||||
+++ b/drivers/media/video/em28xx/em28xx.h
|
||||
@@ -598,6 +598,8 @@ struct em28xx {
|
||||
int max_pkt_size; /* max packet size of isoc transaction */
|
||||
int num_alt; /* Number of alternative settings */
|
||||
unsigned int *alt_max_pkt_size; /* array of wMaxPacketSize */
|
||||
+ int dvb_alt; /* alternate for DVB */
|
||||
+ unsigned int dvb_max_pkt_size; /* wMaxPacketSize for DVB */
|
||||
struct urb *urb[EM28XX_NUM_BUFS]; /* urb for isoc transfers */
|
||||
char *transfer_buffer[EM28XX_NUM_BUFS]; /* transfer buffers for isoc
|
||||
transfer */
|
||||
--
|
||||
1.7.6.5
|
||||
|
||||
|
@ -1,25 +0,0 @@
|
||||
This patch adds a module-device-table-entry to the
|
||||
technisat-usb2-driver which will help udev to on-demand load the
|
||||
driver. This was obviously forgotten during initial commit.
|
||||
|
||||
Signed-off-by: Patrick Boettcher <pboettcher@kernellabs.com>
|
||||
---
|
||||
drivers/media/dvb/dvb-usb/technisat-usb2.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/media/dvb/dvb-usb/technisat-usb2.c b/drivers/media/dvb/dvb-usb/technisat-usb2.c
|
||||
index acefaa8..7a8c8c1 100644
|
||||
--- a/drivers/media/dvb/dvb-usb/technisat-usb2.c
|
||||
+++ b/drivers/media/dvb/dvb-usb/technisat-usb2.c
|
||||
@@ -677,6 +677,7 @@ static struct usb_device_id technisat_usb2_id_table[] = {
|
||||
{ USB_DEVICE(USB_VID_TECHNISAT, USB_PID_TECHNISAT_USB2_DVB_S2) },
|
||||
{ 0 } /* Terminating entry */
|
||||
};
|
||||
+MODULE_DEVICE_TABLE(usb, technisat_usb2_id_table);
|
||||
|
||||
/* device description */
|
||||
static struct dvb_usb_device_properties technisat_usb2_devices = {
|
||||
--
|
||||
1.7.9.5
|
||||
|
||||
--
|
@ -1,13 +0,0 @@
|
||||
diff -Naur linux-3.2-rc7/net/bluetooth/hci_event.c linux-3.2-rc7.patch/net/bluetooth/hci_event.c
|
||||
--- linux-3.2-rc7/net/bluetooth/hci_event.c 2011-12-24 06:51:06.000000000 +0100
|
||||
+++ linux-3.2-rc7.patch/net/bluetooth/hci_event.c 2012-01-01 15:50:48.745287438 +0100
|
||||
@@ -695,7 +695,8 @@
|
||||
if (rp->status)
|
||||
return;
|
||||
|
||||
- memcpy(hdev->extfeatures, rp->features, 8);
|
||||
+ if (rp->page == 1)
|
||||
+ memcpy(hdev->extfeatures, rp->features, 8);
|
||||
|
||||
hci_req_complete(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES, rp->status);
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
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
|
||||
|
||||
|
@ -1,59 +0,0 @@
|
||||
From cca7718a9902a4d5cffbf158b5853980a08ef930 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Lissy <alexandrelissy@free.fr>
|
||||
Date: Sun, 2 Sep 2012 20:35:20 +0200
|
||||
Subject: [PATCH] fix: iMon Knob event interpretation issues
|
||||
|
||||
Events for the iMon Knob pad where not correctly interpreted, resulting
|
||||
in buggy mouse movements (cursor going straight out of the screen), key
|
||||
pad only generating KEY_RIGHT and KEY_DOWN events. A reproducer is:
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
char rel_x = 0x00; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
|
||||
rel_x = 0x0f; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
|
||||
rel_x |= ~0x0f; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
(running on x86 or amd64)
|
||||
$ ./test
|
||||
rel_x:0 @test.c:6
|
||||
rel_x:15 @test.c:7
|
||||
rel_x:-1 @test.c:8
|
||||
|
||||
(running on armv6)
|
||||
rel_x:0 @test.c:6
|
||||
rel_x:15 @test.c:7
|
||||
rel_x:255 @test.c:8
|
||||
|
||||
Forcing the rel_x and rel_y variables as signed char fixes the issue.
|
||||
---
|
||||
drivers/media/rc/imon.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c
|
||||
index 5dd0386..9d30ca9 100644
|
||||
--- a/drivers/media/rc/imon.c
|
||||
+++ b/drivers/media/rc/imon.c
|
||||
@@ -1225,7 +1225,7 @@ static u32 imon_panel_key_lookup(u64 code)
|
||||
static bool imon_mouse_event(struct imon_context *ictx,
|
||||
unsigned char *buf, int len)
|
||||
{
|
||||
- char rel_x = 0x00, rel_y = 0x00;
|
||||
+ signed char rel_x = 0x00, rel_y = 0x00;
|
||||
u8 right_shift = 1;
|
||||
bool mouse_input = true;
|
||||
int dir = 0;
|
||||
@@ -1301,7 +1301,7 @@ static void imon_touch_event(struct imon_context *ictx, unsigned char *buf)
|
||||
static void imon_pad_to_keys(struct imon_context *ictx, unsigned char *buf)
|
||||
{
|
||||
int dir = 0;
|
||||
- char rel_x = 0x00, rel_y = 0x00;
|
||||
+ signed char rel_x = 0x00, rel_y = 0x00;
|
||||
u16 timeout, threshold;
|
||||
u32 scancode = KEY_RESERVED;
|
||||
unsigned long flags;
|
||||
--
|
||||
1.7.9.5
|
||||
|
@ -1,20 +0,0 @@
|
||||
diff -Naur linux-2.6.34-rc7/init/main.c linux-2.6.34-rc7.patch/init/main.c
|
||||
--- linux-2.6.34-rc7/init/main.c 2010-05-10 03:36:28.000000000 +0200
|
||||
+++ linux-2.6.34-rc7.patch/init/main.c 2010-05-15 12:28:34.767241760 +0200
|
||||
@@ -886,8 +886,14 @@
|
||||
do_basic_setup();
|
||||
|
||||
/* Open the /dev/console on the rootfs, this should never fail */
|
||||
- if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
|
||||
- printk(KERN_WARNING "Warning: unable to open an initial console.\n");
|
||||
+ char *console = "/dev_console";
|
||||
+
|
||||
+ if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0) {
|
||||
+ sys_mknod(console, S_IFCHR|0600, (TTYAUX_MAJOR<<8)|1);
|
||||
+ if (sys_open(console, O_RDWR, 0) < 0)
|
||||
+ printk(KERN_WARNING "Warning: unable to open an initial console.\n");
|
||||
+ sys_unlink(console);
|
||||
+ }
|
||||
|
||||
(void) sys_dup(0);
|
||||
(void) sys_dup(0);
|
@ -1,12 +0,0 @@
|
||||
diff -Naur linux-3.6.11/tools/perf/Makefile linux-3.6.11.patch/tools/perf/Makefile
|
||||
--- linux-3.6.11/tools/perf/Makefile 2012-12-17 18:27:45.000000000 +0100
|
||||
+++ linux-3.6.11.patch/tools/perf/Makefile 2013-03-06 16:30:43.107805512 +0100
|
||||
@@ -496,8 +496,6 @@
|
||||
msg := $(warning newt not found, disables TUI support. Please install newt-devel or libnewt-dev);
|
||||
BASIC_CFLAGS += -DNO_NEWT_SUPPORT
|
||||
else
|
||||
- # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
|
||||
- BASIC_CFLAGS += -I/usr/include/slang
|
||||
EXTLIBS += -lnewt -lslang
|
||||
LIB_OBJS += $(OUTPUT)ui/setup.o
|
||||
LIB_OBJS += $(OUTPUT)ui/browser.o
|
File diff suppressed because it is too large
Load Diff
@ -1,160 +0,0 @@
|
||||
diff -Naur linux-3.2.7/drivers/hid/hid-ids.h linux-3.2.7.patch/drivers/hid/hid-ids.h
|
||||
--- linux-3.2.7/drivers/hid/hid-ids.h 2012-02-20 22:42:16.000000000 +0100
|
||||
+++ linux-3.2.7.patch/drivers/hid/hid-ids.h 2012-02-25 20:35:22.798844241 +0100
|
||||
@@ -577,6 +577,9 @@
|
||||
|
||||
#define USB_VENDOR_ID_PHILIPS 0x0471
|
||||
#define USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE 0x0617
|
||||
+#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1 0x206c
|
||||
+#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2 0x20cc
|
||||
+#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3 0x0613
|
||||
|
||||
#define USB_VENDOR_ID_PI_ENGINEERING 0x05f3
|
||||
#define USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL 0xff
|
||||
diff -Naur linux-3.2.7/drivers/hid/hid-spinelplus.c linux-3.2.7.patch/drivers/hid/hid-spinelplus.c
|
||||
--- linux-3.2.7/drivers/hid/hid-spinelplus.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ linux-3.2.7.patch/drivers/hid/hid-spinelplus.c 2012-02-25 20:36:10.002787970 +0100
|
||||
@@ -0,0 +1,104 @@
|
||||
+/*
|
||||
+ * HID driver for "PHILIPS MCE USB IR Receiver- Spinel plus" remotes
|
||||
+ *
|
||||
+ * Copyright (c) 2010 Panagiotis Skintzos
|
||||
+ *
|
||||
+ * Renamed to Spinel, cleanup and modified to also support
|
||||
+ * Spinel Plus 0471:20CC by Stephan Raue 2012.
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * 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 of the License, or (at your option)
|
||||
+ * any later version.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/device.h>
|
||||
+#include <linux/input.h>
|
||||
+#include <linux/hid.h>
|
||||
+#include <linux/module.h>
|
||||
+
|
||||
+#include "hid-ids.h"
|
||||
+
|
||||
+#define spinelplus_map_key(c) set_bit(EV_REP, hi->input->evbit); \
|
||||
+ hid_map_usage_clear(hi, usage, bit, max, EV_KEY, (c))
|
||||
+
|
||||
+static int spinelplus_input_mapping(struct hid_device *hdev,
|
||||
+ struct hid_input *hi, struct hid_field *field, struct hid_usage *usage,
|
||||
+ unsigned long **bit, int *max)
|
||||
+{
|
||||
+ switch (usage->hid) {
|
||||
+ case 0xffbc000d: spinelplus_map_key(KEY_MEDIA); break;
|
||||
+ case 0xffbc0024: spinelplus_map_key(KEY_MEDIA); break;
|
||||
+ case 0xffbc0027: spinelplus_map_key(KEY_ZOOM); break;
|
||||
+ case 0xffbc0033: spinelplus_map_key(KEY_HOME); break;
|
||||
+ case 0xffbc0035: spinelplus_map_key(KEY_CAMERA); break;
|
||||
+ case 0xffbc0036: spinelplus_map_key(KEY_EPG); break;
|
||||
+ case 0xffbc0037: spinelplus_map_key(KEY_DVD); break;
|
||||
+ case 0xffbc0038: spinelplus_map_key(KEY_HOME); break;
|
||||
+ case 0xffbc0039: spinelplus_map_key(KEY_MP3); break;
|
||||
+ case 0xffbc003a: spinelplus_map_key(KEY_VIDEO); break;
|
||||
+ case 0xffbc005a: spinelplus_map_key(KEY_TEXT); break;
|
||||
+ case 0xffbc005b: spinelplus_map_key(KEY_RED); break;
|
||||
+ case 0xffbc005c: spinelplus_map_key(KEY_GREEN); break;
|
||||
+ case 0xffbc005d: spinelplus_map_key(KEY_YELLOW); break;
|
||||
+ case 0xffbc005e: spinelplus_map_key(KEY_BLUE); break;
|
||||
+ default:
|
||||
+ return 0;
|
||||
+ }
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static int spinelplus_probe(struct hid_device *hdev,
|
||||
+ const struct hid_device_id *id)
|
||||
+{
|
||||
+ int ret;
|
||||
+ /* Connect only to hid input (not hiddev & hidraw)*/
|
||||
+ unsigned int cmask = HID_CONNECT_HIDINPUT;
|
||||
+
|
||||
+ ret = hid_parse(hdev);
|
||||
+ if (ret) {
|
||||
+ dev_err(&hdev->dev, "parse failed\n");
|
||||
+ goto err_free;
|
||||
+ }
|
||||
+
|
||||
+ ret = hid_hw_start(hdev, cmask);
|
||||
+ if (ret) {
|
||||
+ dev_err(&hdev->dev, "hw start failed\n");
|
||||
+ goto err_free;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+err_free:
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static const struct hid_device_id spinelplus_devices[] = {
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3) },
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(hid, spinelplus_devices);
|
||||
+
|
||||
+static struct hid_driver spinelplus_driver = {
|
||||
+ .name = "SpinelPlus",
|
||||
+ .id_table = spinelplus_devices,
|
||||
+ .input_mapping = spinelplus_input_mapping,
|
||||
+ .probe = spinelplus_probe,
|
||||
+};
|
||||
+
|
||||
+static int __init spinelplus_init(void)
|
||||
+{
|
||||
+ return hid_register_driver(&spinelplus_driver);
|
||||
+}
|
||||
+
|
||||
+static void __exit spinelplus_exit(void)
|
||||
+{
|
||||
+ hid_unregister_driver(&spinelplus_driver);
|
||||
+}
|
||||
+
|
||||
+module_init(spinelplus_init);
|
||||
+module_exit(spinelplus_exit);
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff -Naur linux-3.2.7/drivers/hid/Kconfig linux-3.2.7.patch/drivers/hid/Kconfig
|
||||
--- linux-3.2.7/drivers/hid/Kconfig 2012-02-20 22:42:16.000000000 +0100
|
||||
+++ linux-3.2.7.patch/drivers/hid/Kconfig 2012-02-25 20:34:59.490378243 +0100
|
||||
@@ -540,6 +540,12 @@
|
||||
---help---
|
||||
Support for Speedlink Vicious and Divine Cezanne mouse.
|
||||
|
||||
+config HID_SPINELPLUS
|
||||
+ tristate "Spinel Plus remote control"
|
||||
+ depends on USB_HID
|
||||
+ ---help---
|
||||
+ Say Y here if you have a Spinel Plus (0471:206c/20cc/0613) remote
|
||||
+
|
||||
config HID_SUNPLUS
|
||||
tristate "Sunplus wireless desktop"
|
||||
depends on USB_HID
|
||||
diff -Naur linux-3.2.7/drivers/hid/Makefile linux-3.2.7.patch/drivers/hid/Makefile
|
||||
--- linux-3.2.7/drivers/hid/Makefile 2012-02-20 22:42:16.000000000 +0100
|
||||
+++ linux-3.2.7.patch/drivers/hid/Makefile 2012-02-25 20:34:12.487438531 +0100
|
||||
@@ -67,6 +67,7 @@
|
||||
obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o
|
||||
obj-$(CONFIG_HID_SONY) += hid-sony.o
|
||||
obj-$(CONFIG_HID_SPEEDLINK) += hid-speedlink.o
|
||||
+obj-$(CONFIG_HID_SPINELPLUS) += hid-spinelplus.o
|
||||
obj-$(CONFIG_HID_SUNPLUS) += hid-sunplus.o
|
||||
obj-$(CONFIG_HID_GREENASIA) += hid-gaff.o
|
||||
obj-$(CONFIG_HID_THRUSTMASTER) += hid-tmff.o
|
||||
--- linux-3.6.6/drivers/hid/hid-core.c 2012-11-05 08:57:06.000000000 +0000
|
||||
+++ linux-3.6.6/drivers/hid/hid-core.c 2012-11-16 15:41:44.560399777 +0000
|
||||
@@ -1653,6 +1653,9 @@
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) },
|
@ -1,12 +0,0 @@
|
||||
diff -Naur linux-3.0/drivers/media/rc/nuvoton-cir.c linux-3.0.patch/drivers/media/rc/nuvoton-cir.c
|
||||
--- linux-3.0/drivers/media/rc/nuvoton-cir.c 2011-07-22 04:17:23.000000000 +0200
|
||||
+++ linux-3.0.patch/drivers/media/rc/nuvoton-cir.c 2011-07-22 21:30:48.374591146 +0200
|
||||
@@ -1110,7 +1110,7 @@
|
||||
rdev->dev.parent = &pdev->dev;
|
||||
rdev->driver_name = NVT_DRIVER_NAME;
|
||||
rdev->map_name = RC_MAP_RC6_MCE;
|
||||
- rdev->timeout = MS_TO_NS(100);
|
||||
+ rdev->timeout = US_TO_NS(1000);
|
||||
/* rx resolution is hardwired to 50us atm, 1, 25, 100 also possible */
|
||||
rdev->rx_resolution = US_TO_NS(CIR_SAMPLE_PERIOD);
|
||||
#if 0
|
@ -1,11 +0,0 @@
|
||||
--- linux-3.2.2.orig/drivers/media/rc/mceusb.c 2012-01-30 23:37:12.374473509 +0100
|
||||
+++ linux-3.2.2/drivers/media/rc/mceusb.c 2012-01-30 23:40:57.989652931 +0100
|
||||
@@ -350,6 +350,8 @@
|
||||
{ USB_DEVICE(VENDOR_FORMOSA, 0xe015) },
|
||||
/* Formosa21 / eHome Infrared Receiver */
|
||||
{ USB_DEVICE(VENDOR_FORMOSA, 0xe016) },
|
||||
+ /* Formosa21 / eHome Infrared Receiver */
|
||||
+ { USB_DEVICE(VENDOR_FORMOSA, 0xe042) },
|
||||
/* Formosa aim / Trust MCE Infrared Receiver */
|
||||
{ USB_DEVICE(VENDOR_FORMOSA, 0xe017),
|
||||
.driver_info = MCE_GEN2_NO_TX },
|
@ -1,20 +0,0 @@
|
||||
diff -Naur linux-3.6.7/drivers/media/rc/mceusb.c linux-3.6.7.patch/drivers/media/rc/mceusb.c
|
||||
--- linux-3.6.7/drivers/media/rc/mceusb.c 2012-11-29 04:45:51.142129739 +0100
|
||||
+++ linux-3.6.7.patch/drivers/media/rc/mceusb.c 2012-11-29 04:51:30.982828558 +0100
|
||||
@@ -200,6 +200,7 @@
|
||||
#define VENDOR_TIVO 0x105a
|
||||
#define VENDOR_CONEXANT 0x0572
|
||||
#define VENDOR_TWISTEDMELON 0x2596
|
||||
+#define VENDOR_ADAPTEC 0x03f3
|
||||
|
||||
enum mceusb_model_type {
|
||||
MCE_GEN2 = 0, /* Most boards */
|
||||
@@ -400,6 +401,8 @@
|
||||
{ USB_DEVICE(VENDOR_TWISTEDMELON, 0x8016) },
|
||||
/* Twisted Melon Inc. - Manta Transceiver */
|
||||
{ USB_DEVICE(VENDOR_TWISTEDMELON, 0x8042) },
|
||||
+ /* Adaptec / HP eHome Receiver */
|
||||
+ { USB_DEVICE(VENDOR_ADAPTEC, 0x0094) },
|
||||
/* Terminating entry */
|
||||
{ }
|
||||
};
|
@ -1,22 +0,0 @@
|
||||
--- linux/drivers/media/rc/ir-rc6-decoder.c 2012-11-25 22:08:13.148418669 -0800
|
||||
+++ linux.patch/drivers/media/rc/ir-rc6-decoder.c 2012-11-25 22:07:48.864417975 -0800
|
||||
@@ -39,7 +39,6 @@
|
||||
#define RC6_STARTBIT_MASK 0x08 /* for the header bits */
|
||||
#define RC6_6A_MCE_TOGGLE_MASK 0x8000 /* for the body bits */
|
||||
#define RC6_6A_LCC_MASK 0xffff0000 /* RC6-6A-32 long customer code mask */
|
||||
-#define RC6_6A_MCE_CC 0x800f0000 /* MCE customer code */
|
||||
#ifndef CHAR_BIT
|
||||
#define CHAR_BIT 8 /* Normally in <limits.h> */
|
||||
#endif
|
||||
@@ -242,9 +241,8 @@ again:
|
||||
}
|
||||
|
||||
scancode = data->body;
|
||||
- if (data->count == RC6_6A_32_NBITS &&
|
||||
- (scancode & RC6_6A_LCC_MASK) == RC6_6A_MCE_CC) {
|
||||
- /* MCE RC */
|
||||
+ if (data->count == RC6_6A_32_NBITS) {
|
||||
+ /* MCE compatible RC */
|
||||
toggle = (scancode & RC6_6A_MCE_TOGGLE_MASK) ? 1 : 0;
|
||||
scancode &= ~RC6_6A_MCE_TOGGLE_MASK;
|
||||
} else {
|
@ -1,13 +0,0 @@
|
||||
diff -Naur linux-3.9.4/drivers/media/rc/mceusb.c linux-3.9.4.patch/drivers/media/rc/mceusb.c
|
||||
--- linux-3.9.4/drivers/media/rc/mceusb.c 2013-05-24 20:45:59.000000000 +0200
|
||||
+++ linux-3.9.4.patch/drivers/media/rc/mceusb.c 2013-05-27 12:28:12.811230633 +0200
|
||||
@@ -309,6 +309,9 @@
|
||||
/* SMK/I-O Data GV-MC7/RCKIT Receiver */
|
||||
{ USB_DEVICE(VENDOR_SMK, 0x0353),
|
||||
.driver_info = MCE_GEN2_NO_TX },
|
||||
+ /* SMK Manufacturing, Inc. Receiver */
|
||||
+ { USB_DEVICE(VENDOR_SMK, 0x0357),
|
||||
+ .driver_info = MCE_GEN2_NO_TX },
|
||||
/* Tatung eHome Infrared Transceiver */
|
||||
{ USB_DEVICE(VENDOR_TATUNG, 0x9150) },
|
||||
/* Shuttle eHome Infrared Transceiver */
|
@ -1,59 +0,0 @@
|
||||
From cca7718a9902a4d5cffbf158b5853980a08ef930 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Lissy <alexandrelissy@free.fr>
|
||||
Date: Sun, 2 Sep 2012 20:35:20 +0200
|
||||
Subject: [PATCH] fix: iMon Knob event interpretation issues
|
||||
|
||||
Events for the iMon Knob pad where not correctly interpreted, resulting
|
||||
in buggy mouse movements (cursor going straight out of the screen), key
|
||||
pad only generating KEY_RIGHT and KEY_DOWN events. A reproducer is:
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
char rel_x = 0x00; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
|
||||
rel_x = 0x0f; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
|
||||
rel_x |= ~0x0f; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
(running on x86 or amd64)
|
||||
$ ./test
|
||||
rel_x:0 @test.c:6
|
||||
rel_x:15 @test.c:7
|
||||
rel_x:-1 @test.c:8
|
||||
|
||||
(running on armv6)
|
||||
rel_x:0 @test.c:6
|
||||
rel_x:15 @test.c:7
|
||||
rel_x:255 @test.c:8
|
||||
|
||||
Forcing the rel_x and rel_y variables as signed char fixes the issue.
|
||||
---
|
||||
drivers/media/rc/imon.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c
|
||||
index 5dd0386..9d30ca9 100644
|
||||
--- a/drivers/media/rc/imon.c
|
||||
+++ b/drivers/media/rc/imon.c
|
||||
@@ -1225,7 +1225,7 @@ static u32 imon_panel_key_lookup(u64 code)
|
||||
static bool imon_mouse_event(struct imon_context *ictx,
|
||||
unsigned char *buf, int len)
|
||||
{
|
||||
- char rel_x = 0x00, rel_y = 0x00;
|
||||
+ signed char rel_x = 0x00, rel_y = 0x00;
|
||||
u8 right_shift = 1;
|
||||
bool mouse_input = true;
|
||||
int dir = 0;
|
||||
@@ -1301,7 +1301,7 @@ static void imon_touch_event(struct imon_context *ictx, unsigned char *buf)
|
||||
static void imon_pad_to_keys(struct imon_context *ictx, unsigned char *buf)
|
||||
{
|
||||
int dir = 0;
|
||||
- char rel_x = 0x00, rel_y = 0x00;
|
||||
+ signed char rel_x = 0x00, rel_y = 0x00;
|
||||
u16 timeout, threshold;
|
||||
u32 scancode = KEY_RESERVED;
|
||||
unsigned long flags;
|
||||
--
|
||||
1.7.9.5
|
||||
|
@ -1,11 +0,0 @@
|
||||
diff -Naur linux-3.7.5/drivers/input/joystick/xpad.c linux-3.7.5.patch/drivers/input/joystick/xpad.c
|
||||
--- linux-3.7.5/drivers/input/joystick/xpad.c 2013-01-28 05:50:55.000000000 +0100
|
||||
+++ linux-3.7.5.patch/drivers/input/joystick/xpad.c 2013-01-30 05:14:21.434759231 +0100
|
||||
@@ -166,7 +166,6 @@
|
||||
{ 0x0f0d, 0x0016, "Hori Real Arcade Pro.EX", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
||||
{ 0x0f0d, 0x000d, "Hori Fighting Stick EX2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
||||
{ 0x1689, 0xfd00, "Razer Onza Tournament Edition", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
|
||||
- { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
|
||||
{ 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN }
|
||||
};
|
||||
|
@ -1,46 +0,0 @@
|
||||
diff -Naur linux-3.6.11/drivers/media/dvb/dvb-usb/rtl28xxu.c linux-3.6.11.patch/drivers/media/dvb/dvb-usb/rtl28xxu.c
|
||||
--- linux-3.6.11/drivers/media/dvb/dvb-usb/rtl28xxu.c 2012-12-17 18:27:45.000000000 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/dvb/dvb-usb/rtl28xxu.c 2013-06-09 13:59:45.099765027 +0200
|
||||
@@ -1154,6 +1154,7 @@
|
||||
RTL2831U_0BDA_2831,
|
||||
RTL2831U_14AA_0160,
|
||||
RTL2831U_14AA_0161,
|
||||
+ RTL2832U_1F4D_A803,
|
||||
RTL2832U_0CCD_00A9,
|
||||
RTL2832U_1F4D_B803,
|
||||
RTL2832U_0CCD_00B3,
|
||||
@@ -1169,6 +1170,8 @@
|
||||
USB_DEVICE(USB_VID_WIDEVIEW, USB_PID_FREECOM_DVBT_2)},
|
||||
|
||||
/* RTL2832U */
|
||||
+ [RTL2832U_1F4D_A803] = {
|
||||
+ USB_DEVICE(USB_VID_GTEK, USB_PID_AUGUST_DVB_T205_STICK)},
|
||||
[RTL2832U_0CCD_00A9] = {
|
||||
USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_BLACK_REV1)},
|
||||
[RTL2832U_1F4D_B803] = {
|
||||
@@ -1288,9 +1291,15 @@
|
||||
|
||||
.i2c_algo = &rtl28xxu_i2c_algo,
|
||||
|
||||
- .num_device_descs = 3,
|
||||
+ .num_device_descs = 4,
|
||||
.devices = {
|
||||
{
|
||||
+ .name = "August DVB-T205",
|
||||
+ .warm_ids = {
|
||||
+ &rtl28xxu_table[RTL2832U_1F4D_A803],
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
.name = "Terratec Cinergy T Stick Black",
|
||||
.warm_ids = {
|
||||
&rtl28xxu_table[RTL2832U_0CCD_00A9],
|
||||
diff -Naur linux-3.6.11/drivers/media/dvb/dvb-usb/dvb-usb-ids.h linux-3.6.11.patch/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
|
||||
--- linux-3.6.11/drivers/media/dvb/dvb-usb/dvb-usb-ids.h 2012-12-17 18:27:45.000000000 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/dvb/dvb-usb/dvb-usb-ids.h 2013-06-09 13:59:47.127739532 +0200
|
||||
@@ -358,4 +358,5 @@
|
||||
#define USB_PID_TECHNISAT_USB2_HDCI_V2 0x0002
|
||||
#define USB_PID_TECHNISAT_AIRSTAR_TELESTICK_2 0x0004
|
||||
#define USB_PID_TECHNISAT_USB2_DVB_S2 0x0500
|
||||
+#define USB_PID_AUGUST_DVB_T205_STICK 0xa803
|
||||
#endif
|
@ -1,12 +0,0 @@
|
||||
diff -Naur linux-3.2.1/drivers/media/dvb/frontends/stb0899_drv.c linux-3.2.1.patch/drivers/media/dvb/frontends/stb0899_drv.c
|
||||
--- linux-3.2.1/drivers/media/dvb/frontends/stb0899_drv.c 2012-01-12 20:42:45.000000000 +0100
|
||||
+++ linux-3.2.1.patch/drivers/media/dvb/frontends/stb0899_drv.c 2012-01-23 10:47:29.311211860 +0100
|
||||
@@ -1614,7 +1614,7 @@
|
||||
.frequency_max = 2150000,
|
||||
.frequency_stepsize = 0,
|
||||
.frequency_tolerance = 0,
|
||||
- .symbol_rate_min = 5000000,
|
||||
+ .symbol_rate_min = 1000000,
|
||||
.symbol_rate_max = 45000000,
|
||||
|
||||
.caps = FE_CAN_INVERSION_AUTO |
|
@ -1,132 +0,0 @@
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/ati_remote.c linux-3.6.11.patch/drivers/media/rc/ati_remote.c
|
||||
--- linux-3.6.11/drivers/media/rc/ati_remote.c 2012-12-28 22:53:15.840572260 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/ati_remote.c 2012-12-28 22:53:29.113472164 +0100
|
||||
@@ -877,11 +877,11 @@
|
||||
ati_remote = kzalloc(sizeof (struct ati_remote), GFP_KERNEL);
|
||||
rc_dev = rc_allocate_device();
|
||||
if (!ati_remote || !rc_dev)
|
||||
- goto fail1;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
/* Allocate URB buffers, URBs */
|
||||
if (ati_remote_alloc_buffers(udev, ati_remote))
|
||||
- goto fail2;
|
||||
+ goto exit_free_buffers;
|
||||
|
||||
ati_remote->endpoint_in = endpoint_in;
|
||||
ati_remote->endpoint_out = endpoint_out;
|
||||
@@ -929,12 +929,12 @@
|
||||
/* Device Hardware Initialization - fills in ati_remote->idev from udev. */
|
||||
err = ati_remote_initialize(ati_remote);
|
||||
if (err)
|
||||
- goto fail3;
|
||||
+ goto exit_kill_urbs;
|
||||
|
||||
/* Set up and register rc device */
|
||||
err = rc_register_device(ati_remote->rdev);
|
||||
if (err)
|
||||
- goto fail3;
|
||||
+ goto exit_kill_urbs;
|
||||
|
||||
/* use our delay for rc_dev */
|
||||
ati_remote->rdev->input_dev->rep[REP_DELAY] = repeat_delay;
|
||||
@@ -943,26 +943,31 @@
|
||||
if (mouse) {
|
||||
input_dev = input_allocate_device();
|
||||
if (!input_dev)
|
||||
- goto fail4;
|
||||
+ goto exit_unregister_device;
|
||||
|
||||
ati_remote->idev = input_dev;
|
||||
ati_remote_input_init(ati_remote);
|
||||
err = input_register_device(input_dev);
|
||||
|
||||
if (err)
|
||||
- goto fail5;
|
||||
+ goto exit_free_input_device;
|
||||
}
|
||||
|
||||
usb_set_intfdata(interface, ati_remote);
|
||||
return 0;
|
||||
|
||||
- fail5: input_free_device(input_dev);
|
||||
- fail4: rc_unregister_device(rc_dev);
|
||||
+ exit_free_input_device:
|
||||
+ input_free_device(input_dev);
|
||||
+ exit_unregister_device:
|
||||
+ rc_unregister_device(rc_dev);
|
||||
rc_dev = NULL;
|
||||
- fail3: usb_kill_urb(ati_remote->irq_urb);
|
||||
+ exit_kill_urbs:
|
||||
+ usb_kill_urb(ati_remote->irq_urb);
|
||||
usb_kill_urb(ati_remote->out_urb);
|
||||
- fail2: ati_remote_free_buffers(ati_remote);
|
||||
- fail1: rc_free_device(rc_dev);
|
||||
+ exit_free_buffers:
|
||||
+ ati_remote_free_buffers(ati_remote);
|
||||
+ exit_free_dev_rdev:
|
||||
+ rc_free_device(rc_dev);
|
||||
kfree(ati_remote);
|
||||
return err;
|
||||
}
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/ene_ir.c linux-3.6.11.patch/drivers/media/rc/ene_ir.c
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/fintek-cir.c linux-3.6.11.patch/drivers/media/rc/fintek-cir.c
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/gpio-ir-recv.c linux-3.6.11.patch/drivers/media/rc/gpio-ir-recv.c
|
||||
--- linux-3.6.11/drivers/media/rc/gpio-ir-recv.c 2012-12-28 22:53:15.839572268 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/rc/gpio-ir-recv.c 2012-12-28 22:53:29.115472147 +0100
|
||||
@@ -79,7 +79,7 @@
|
||||
rcdev = rc_allocate_device();
|
||||
if (!rcdev) {
|
||||
rc = -ENOMEM;
|
||||
- goto err_allocate_device;
|
||||
+ goto exit_free_dev;
|
||||
}
|
||||
|
||||
rcdev->priv = gpio_dev;
|
||||
@@ -104,15 +104,15 @@
|
||||
|
||||
rc = gpio_request(pdata->gpio_nr, "gpio-ir-recv");
|
||||
if (rc < 0)
|
||||
- goto err_gpio_request;
|
||||
+ goto exit_free_rdev;
|
||||
rc = gpio_direction_input(pdata->gpio_nr);
|
||||
if (rc < 0)
|
||||
- goto err_gpio_direction_input;
|
||||
+ goto exit_free_gpio;
|
||||
|
||||
rc = rc_register_device(rcdev);
|
||||
if (rc < 0) {
|
||||
dev_err(&pdev->dev, "failed to register rc device\n");
|
||||
- goto err_register_rc_device;
|
||||
+ goto exit_free_gpio;
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, gpio_dev);
|
||||
@@ -122,20 +122,19 @@
|
||||
IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
|
||||
"gpio-ir-recv-irq", gpio_dev);
|
||||
if (rc < 0)
|
||||
- goto err_request_irq;
|
||||
+ goto exit_unregister_device;
|
||||
|
||||
return 0;
|
||||
|
||||
-err_request_irq:
|
||||
+exit_unregister_device:
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
rc_unregister_device(rcdev);
|
||||
-err_register_rc_device:
|
||||
-err_gpio_direction_input:
|
||||
+exit_free_gpio:
|
||||
gpio_free(pdata->gpio_nr);
|
||||
-err_gpio_request:
|
||||
+exit_free_rdev:
|
||||
rc_free_device(rcdev);
|
||||
rcdev = NULL;
|
||||
-err_allocate_device:
|
||||
+exit_free_dev:
|
||||
kfree(gpio_dev);
|
||||
return rc;
|
||||
}
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/ite-cir.c linux-3.6.11.patch/drivers/media/rc/ite-cir.c
|
||||
diff -Naur linux-3.6.11/drivers/media/rc/nuvoton-cir.c linux-3.6.11.patch/drivers/media/rc/nuvoton-cir.c
|
5788
packages/linux/patches/3.6.11/linux-210-dvbsky.patch
vendored
5788
packages/linux/patches/3.6.11/linux-210-dvbsky.patch
vendored
File diff suppressed because it is too large
Load Diff
@ -1,141 +0,0 @@
|
||||
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
|
@ -1,53 +0,0 @@
|
||||
diff -Naur linux-3.6.6/drivers/media/dvb/dvb-usb/dw2102.c linux-3.6.6.patch/drivers/media/dvb/dvb-usb/dw2102.c
|
||||
--- linux-3.6.6/drivers/media/dvb/dvb-usb/dw2102.c 2012-06-20 00:18:30.000000000 +0200
|
||||
+++ linux-3.6.6.patch/drivers/media/dvb/dvb-usb/dw2102.c 2012-06-28 14:08:50.721691934 +0200
|
||||
@@ -1179,6 +1179,13 @@ static int su3000_frontend_attach(struct dvb_usb_adapter *d)
|
||||
u8 ibuf[] = { 0 };
|
||||
|
||||
if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0)
|
||||
+ err("command 0x0e transfer failed.");
|
||||
+
|
||||
+ 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.");
|
||||
|
||||
obuf[0] = 0xe;
|
||||
@@ -1444,6 +1451,7 @@ enum dw2102_table_entry {
|
||||
PROF_7500,
|
||||
GENIATECH_SU3000,
|
||||
TERRATEC_CINERGY_S2,
|
||||
+ TERRATEC_CINERGY_S2_R2,
|
||||
TEVII_S480_1,
|
||||
TEVII_S480_2,
|
||||
X3M_SPC1400HD,
|
||||
@@ -1462,6 +1470,7 @@ static struct usb_device_id dw2102_table[] = {
|
||||
[PROF_7500] = {USB_DEVICE(0x3034, 0x7500)},
|
||||
[GENIATECH_SU3000] = {USB_DEVICE(0x1f4d, 0x3000)},
|
||||
[TERRATEC_CINERGY_S2] = {USB_DEVICE(USB_VID_TERRATEC, 0x00a8)},
|
||||
+ [TERRATEC_CINERGY_S2_R2] = {USB_DEVICE(USB_VID_TERRATEC, 0x00b0)},
|
||||
[TEVII_S480_1] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_1)},
|
||||
[TEVII_S480_2] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_2)},
|
||||
[X3M_SPC1400HD] = {USB_DEVICE(0x1f4d, 0x3100)},
|
||||
@@ -1853,7 +1862,7 @@ static struct dvb_usb_device_properties su3000_properties = {
|
||||
}},
|
||||
}
|
||||
},
|
||||
- .num_device_descs = 3,
|
||||
+ .num_device_descs = 4,
|
||||
.devices = {
|
||||
{ "SU3000HD DVB-S USB2.0",
|
||||
{ &dw2102_table[GENIATECH_SU3000], NULL },
|
||||
@@ -1867,6 +1876,10 @@ static struct dvb_usb_device_properties su3000_properties = {
|
||||
{ &dw2102_table[X3M_SPC1400HD], NULL },
|
||||
{ NULL },
|
||||
},
|
||||
+ { "Terratec Cinergy S2 USB HD Rev.2",
|
||||
+ { &dw2102_table[TERRATEC_CINERGY_S2_R2], NULL },
|
||||
+ { NULL },
|
||||
+ },
|
||||
}
|
||||
};
|
||||
|
@ -1,25 +0,0 @@
|
||||
This patch adds a module-device-table-entry to the
|
||||
technisat-usb2-driver which will help udev to on-demand load the
|
||||
driver. This was obviously forgotten during initial commit.
|
||||
|
||||
Signed-off-by: Patrick Boettcher <pboettcher@kernellabs.com>
|
||||
---
|
||||
drivers/media/dvb/dvb-usb/technisat-usb2.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/media/dvb/dvb-usb/technisat-usb2.c b/drivers/media/dvb/dvb-usb/technisat-usb2.c
|
||||
index acefaa8..7a8c8c1 100644
|
||||
--- a/drivers/media/dvb/dvb-usb/technisat-usb2.c
|
||||
+++ b/drivers/media/dvb/dvb-usb/technisat-usb2.c
|
||||
@@ -677,6 +677,7 @@ static struct usb_device_id technisat_usb2_id_table[] = {
|
||||
{ USB_DEVICE(USB_VID_TECHNISAT, USB_PID_TECHNISAT_USB2_DVB_S2) },
|
||||
{ 0 } /* Terminating entry */
|
||||
};
|
||||
+MODULE_DEVICE_TABLE(usb, technisat_usb2_id_table);
|
||||
|
||||
/* device description */
|
||||
static struct dvb_usb_device_properties technisat_usb2_devices = {
|
||||
--
|
||||
1.7.9.5
|
||||
|
||||
--
|
@ -1,61 +0,0 @@
|
||||
--- linux-3.6.11/drivers/media/dvb/frontends/stb0899_drv.c 2012-12-31 08:29:52.975869000 +0100
|
||||
+++ linux-3.6.11.patch/drivers/media/dvb/frontends/stb0899_drv.c 2012-12-31 08:39:29.963853000 +0100
|
||||
@@ -971,6 +971,16 @@
|
||||
|
||||
*strength = stb0899_table_lookup(stb0899_dvbsrf_tab, ARRAY_SIZE(stb0899_dvbsrf_tab) - 1, val);
|
||||
*strength += 750;
|
||||
+
|
||||
+ const int MIN_STRENGTH_DVBS = 0;
|
||||
+ const int MAX_STRENGTH_DVBS = 680;
|
||||
+ if (*strength < MIN_STRENGTH_DVBS)
|
||||
+ *strength = 0;
|
||||
+ else if(*strength > MAX_STRENGTH_DVBS)
|
||||
+ *strength = 0xFFFF;
|
||||
+ else
|
||||
+ *strength = (*strength - MIN_STRENGTH_DVBS) * 0xFFFF / (MAX_STRENGTH_DVBS - MIN_STRENGTH_DVBS);
|
||||
+
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "AGCIQVALUE = 0x%02x, C = %d * 0.1 dBm",
|
||||
val & 0xff, *strength);
|
||||
}
|
||||
@@ -983,6 +993,7 @@
|
||||
|
||||
*strength = stb0899_table_lookup(stb0899_dvbs2rf_tab, ARRAY_SIZE(stb0899_dvbs2rf_tab) - 1, val);
|
||||
*strength += 950;
|
||||
+ *strength = *strength << 4;
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "IF_AGC_GAIN = 0x%04x, C = %d * 0.1 dBm",
|
||||
val & 0x3fff, *strength);
|
||||
}
|
||||
@@ -1016,6 +1027,16 @@
|
||||
val = MAKEWORD16(buf[0], buf[1]);
|
||||
|
||||
*snr = stb0899_table_lookup(stb0899_cn_tab, ARRAY_SIZE(stb0899_cn_tab) - 1, val);
|
||||
+
|
||||
+ const int MIN_SNR_DVBS = 0;
|
||||
+ const int MAX_SNR_DVBS = 200;
|
||||
+ if (*snr < MIN_SNR_DVBS)
|
||||
+ *snr = 0;
|
||||
+ else if(*snr > MAX_SNR_DVBS)
|
||||
+ *snr = 0xFFFF;
|
||||
+ else
|
||||
+ *snr = (*snr - MIN_SNR_DVBS) * 0xFFFF / (MAX_SNR_DVBS - MIN_SNR_DVBS);
|
||||
+
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "NIR = 0x%02x%02x = %u, C/N = %d * 0.1 dBm\n",
|
||||
buf[0], buf[1], val, *snr);
|
||||
}
|
||||
@@ -1040,6 +1061,16 @@
|
||||
val = (quantn - estn) / 10;
|
||||
}
|
||||
*snr = val;
|
||||
+
|
||||
+ const int MIN_SNR_DVBS2 = 10;
|
||||
+ const int MAX_SNR_DVBS2 = 70;
|
||||
+ if (*snr < MIN_SNR_DVBS2)
|
||||
+ *snr = 0;
|
||||
+ else if(*snr > MAX_SNR_DVBS2)
|
||||
+ *snr = 0xFFFF;
|
||||
+ else
|
||||
+ *snr = (*snr - MIN_SNR_DVBS2) * 0xFFFF / (MAX_SNR_DVBS2 - MIN_SNR_DVBS2);
|
||||
+
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "Es/N0 quant = %d (%d) estimate = %u (%d), C/N = %d * 0.1 dBm",
|
||||
quant, quantn, est, estn, val);
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,12 +0,0 @@
|
||||
diff -uNr linux-3.6.4-orig/arch/x86/kernel/tsc.c linux-3.6.4-new/arch/x86/kernel/tsc.c
|
||||
--- linux-3.6.4-orig/arch/x86/kernel/tsc.c 2012-11-03 14:19:55.000000000 +0100
|
||||
+++ linux-3.6.4-new/arch/x86/kernel/tsc.c 2012-11-03 14:23:05.000000000 +0100
|
||||
@@ -374,7 +374,7 @@
|
||||
goto success;
|
||||
}
|
||||
}
|
||||
- pr_err("Fast TSC calibration failed\n");
|
||||
+ pr_info("Fast TSC calibration failed\n");
|
||||
return 0;
|
||||
|
||||
success:
|
@ -1,20 +0,0 @@
|
||||
diff -Naur linux-2.6.34-rc7/init/main.c linux-2.6.34-rc7.patch/init/main.c
|
||||
--- linux-2.6.34-rc7/init/main.c 2010-05-10 03:36:28.000000000 +0200
|
||||
+++ linux-2.6.34-rc7.patch/init/main.c 2010-05-15 12:28:34.767241760 +0200
|
||||
@@ -886,8 +886,14 @@
|
||||
do_basic_setup();
|
||||
|
||||
/* Open the /dev/console on the rootfs, this should never fail */
|
||||
- if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
|
||||
- printk(KERN_WARNING "Warning: unable to open an initial console.\n");
|
||||
+ char *console = "/dev_console";
|
||||
+
|
||||
+ if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0) {
|
||||
+ sys_mknod(console, S_IFCHR|0600, (TTYAUX_MAJOR<<8)|1);
|
||||
+ if (sys_open(console, O_RDWR, 0) < 0)
|
||||
+ printk(KERN_WARNING "Warning: unable to open an initial console.\n");
|
||||
+ sys_unlink(console);
|
||||
+ }
|
||||
|
||||
(void) sys_dup(0);
|
||||
(void) sys_dup(0);
|
@ -1,17 +0,0 @@
|
||||
diff -Naur linux-3.9.4/tools/perf/Makefile linux-3.9.4.patch/tools/perf/Makefile
|
||||
--- linux-3.9.4/tools/perf/Makefile 2013-05-24 20:45:59.000000000 +0200
|
||||
+++ linux-3.9.4.patch/tools/perf/Makefile 2013-05-30 23:57:04.135031372 +0200
|
||||
@@ -668,12 +668,10 @@
|
||||
endif
|
||||
|
||||
ifndef NO_NEWT
|
||||
- FLAGS_NEWT=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -lnewt
|
||||
+ FLAGS_NEWT=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -lnewt -lslang
|
||||
ifneq ($(call try-cc,$(SOURCE_NEWT),$(FLAGS_NEWT),libnewt),y)
|
||||
msg := $(warning newt not found, disables TUI support. Please install newt-devel or libnewt-dev);
|
||||
else
|
||||
- # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
|
||||
- BASIC_CFLAGS += -I/usr/include/slang
|
||||
BASIC_CFLAGS += -DNEWT_SUPPORT
|
||||
EXTLIBS += -lnewt -lslang
|
||||
LIB_OBJS += $(OUTPUT)ui/browser.o
|
File diff suppressed because it is too large
Load Diff
@ -1,161 +0,0 @@
|
||||
diff -Naur linux-3.8.4/drivers/hid/hid-core.c linux-3.8.4.patch/drivers/hid/hid-core.c
|
||||
--- linux-3.8.4/drivers/hid/hid-core.c 2013-03-20 21:11:19.000000000 +0100
|
||||
+++ linux-3.8.4.patch/drivers/hid/hid-core.c 2013-03-26 20:16:01.134847253 +0100
|
||||
@@ -1676,6 +1676,9 @@
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },
|
||||
#if IS_ENABLED(CONFIG_HID_ROCCAT)
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
|
||||
diff -Naur linux-3.8.4/drivers/hid/hid-ids.h linux-3.8.4.patch/drivers/hid/hid-ids.h
|
||||
--- linux-3.8.4/drivers/hid/hid-ids.h 2013-03-20 21:11:19.000000000 +0100
|
||||
+++ linux-3.8.4.patch/drivers/hid/hid-ids.h 2013-03-26 20:11:51.442654398 +0100
|
||||
@@ -655,6 +655,9 @@
|
||||
|
||||
#define USB_VENDOR_ID_PHILIPS 0x0471
|
||||
#define USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE 0x0617
|
||||
+#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1 0x206c
|
||||
+#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2 0x20cc
|
||||
+#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3 0x0613
|
||||
|
||||
#define USB_VENDOR_ID_PI_ENGINEERING 0x05f3
|
||||
#define USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL 0xff
|
||||
diff -Naur linux-3.8.4/drivers/hid/hid-spinelplus.c linux-3.8.4.patch/drivers/hid/hid-spinelplus.c
|
||||
--- linux-3.8.4/drivers/hid/hid-spinelplus.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ linux-3.8.4.patch/drivers/hid/hid-spinelplus.c 2013-03-26 20:11:51.442654398 +0100
|
||||
@@ -0,0 +1,104 @@
|
||||
+/*
|
||||
+ * HID driver for "PHILIPS MCE USB IR Receiver- Spinel plus" remotes
|
||||
+ *
|
||||
+ * Copyright (c) 2010 Panagiotis Skintzos
|
||||
+ *
|
||||
+ * Renamed to Spinel, cleanup and modified to also support
|
||||
+ * Spinel Plus 0471:20CC by Stephan Raue 2012.
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * 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 of the License, or (at your option)
|
||||
+ * any later version.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/device.h>
|
||||
+#include <linux/input.h>
|
||||
+#include <linux/hid.h>
|
||||
+#include <linux/module.h>
|
||||
+
|
||||
+#include "hid-ids.h"
|
||||
+
|
||||
+#define spinelplus_map_key(c) set_bit(EV_REP, hi->input->evbit); \
|
||||
+ hid_map_usage_clear(hi, usage, bit, max, EV_KEY, (c))
|
||||
+
|
||||
+static int spinelplus_input_mapping(struct hid_device *hdev,
|
||||
+ struct hid_input *hi, struct hid_field *field, struct hid_usage *usage,
|
||||
+ unsigned long **bit, int *max)
|
||||
+{
|
||||
+ switch (usage->hid) {
|
||||
+ case 0xffbc000d: spinelplus_map_key(KEY_MEDIA); break;
|
||||
+ case 0xffbc0024: spinelplus_map_key(KEY_MEDIA); break;
|
||||
+ case 0xffbc0027: spinelplus_map_key(KEY_ZOOM); break;
|
||||
+ case 0xffbc0033: spinelplus_map_key(KEY_HOME); break;
|
||||
+ case 0xffbc0035: spinelplus_map_key(KEY_CAMERA); break;
|
||||
+ case 0xffbc0036: spinelplus_map_key(KEY_EPG); break;
|
||||
+ case 0xffbc0037: spinelplus_map_key(KEY_DVD); break;
|
||||
+ case 0xffbc0038: spinelplus_map_key(KEY_HOME); break;
|
||||
+ case 0xffbc0039: spinelplus_map_key(KEY_MP3); break;
|
||||
+ case 0xffbc003a: spinelplus_map_key(KEY_VIDEO); break;
|
||||
+ case 0xffbc005a: spinelplus_map_key(KEY_TEXT); break;
|
||||
+ case 0xffbc005b: spinelplus_map_key(KEY_RED); break;
|
||||
+ case 0xffbc005c: spinelplus_map_key(KEY_GREEN); break;
|
||||
+ case 0xffbc005d: spinelplus_map_key(KEY_YELLOW); break;
|
||||
+ case 0xffbc005e: spinelplus_map_key(KEY_BLUE); break;
|
||||
+ default:
|
||||
+ return 0;
|
||||
+ }
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static int spinelplus_probe(struct hid_device *hdev,
|
||||
+ const struct hid_device_id *id)
|
||||
+{
|
||||
+ int ret;
|
||||
+ /* Connect only to hid input (not hiddev & hidraw)*/
|
||||
+ unsigned int cmask = HID_CONNECT_HIDINPUT;
|
||||
+
|
||||
+ ret = hid_parse(hdev);
|
||||
+ if (ret) {
|
||||
+ dev_err(&hdev->dev, "parse failed\n");
|
||||
+ goto err_free;
|
||||
+ }
|
||||
+
|
||||
+ ret = hid_hw_start(hdev, cmask);
|
||||
+ if (ret) {
|
||||
+ dev_err(&hdev->dev, "hw start failed\n");
|
||||
+ goto err_free;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+err_free:
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static const struct hid_device_id spinelplus_devices[] = {
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3) },
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(hid, spinelplus_devices);
|
||||
+
|
||||
+static struct hid_driver spinelplus_driver = {
|
||||
+ .name = "SpinelPlus",
|
||||
+ .id_table = spinelplus_devices,
|
||||
+ .input_mapping = spinelplus_input_mapping,
|
||||
+ .probe = spinelplus_probe,
|
||||
+};
|
||||
+
|
||||
+static int __init spinelplus_init(void)
|
||||
+{
|
||||
+ return hid_register_driver(&spinelplus_driver);
|
||||
+}
|
||||
+
|
||||
+static void __exit spinelplus_exit(void)
|
||||
+{
|
||||
+ hid_unregister_driver(&spinelplus_driver);
|
||||
+}
|
||||
+
|
||||
+module_init(spinelplus_init);
|
||||
+module_exit(spinelplus_exit);
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff -Naur linux-3.8.4/drivers/hid/Kconfig linux-3.8.4.patch/drivers/hid/Kconfig
|
||||
--- linux-3.8.4/drivers/hid/Kconfig 2013-03-20 21:11:19.000000000 +0100
|
||||
+++ linux-3.8.4.patch/drivers/hid/Kconfig 2013-03-26 20:11:51.443654394 +0100
|
||||
@@ -596,6 +596,12 @@
|
||||
---help---
|
||||
Support for Speedlink Vicious and Divine Cezanne mouse.
|
||||
|
||||
+config HID_SPINELPLUS
|
||||
+ tristate "Spinel Plus remote control"
|
||||
+ depends on USB_HID
|
||||
+ ---help---
|
||||
+ Say Y here if you have a Spinel Plus (0471:206c/20cc/0613) remote
|
||||
+
|
||||
config HID_SUNPLUS
|
||||
tristate "Sunplus wireless desktop"
|
||||
depends on USB_HID
|
||||
diff -Naur linux-3.8.4/drivers/hid/Makefile linux-3.8.4.patch/drivers/hid/Makefile
|
||||
--- linux-3.8.4/drivers/hid/Makefile 2013-03-20 21:11:19.000000000 +0100
|
||||
+++ linux-3.8.4.patch/drivers/hid/Makefile 2013-03-26 20:11:51.443654394 +0100
|
||||
@@ -101,6 +101,7 @@
|
||||
obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o
|
||||
obj-$(CONFIG_HID_SONY) += hid-sony.o
|
||||
obj-$(CONFIG_HID_SPEEDLINK) += hid-speedlink.o
|
||||
+obj-$(CONFIG_HID_SPINELPLUS) += hid-spinelplus.o
|
||||
obj-$(CONFIG_HID_SUNPLUS) += hid-sunplus.o
|
||||
obj-$(CONFIG_HID_GREENASIA) += hid-gaff.o
|
||||
obj-$(CONFIG_HID_THRUSTMASTER) += hid-tmff.o
|
@ -1,12 +0,0 @@
|
||||
diff -Naur linux-3.0/drivers/media/rc/nuvoton-cir.c linux-3.0.patch/drivers/media/rc/nuvoton-cir.c
|
||||
--- linux-3.0/drivers/media/rc/nuvoton-cir.c 2011-07-22 04:17:23.000000000 +0200
|
||||
+++ linux-3.0.patch/drivers/media/rc/nuvoton-cir.c 2011-07-22 21:30:48.374591146 +0200
|
||||
@@ -1110,7 +1110,7 @@
|
||||
rdev->dev.parent = &pdev->dev;
|
||||
rdev->driver_name = NVT_DRIVER_NAME;
|
||||
rdev->map_name = RC_MAP_RC6_MCE;
|
||||
- rdev->timeout = MS_TO_NS(100);
|
||||
+ rdev->timeout = US_TO_NS(1000);
|
||||
/* rx resolution is hardwired to 50us atm, 1, 25, 100 also possible */
|
||||
rdev->rx_resolution = US_TO_NS(CIR_SAMPLE_PERIOD);
|
||||
#if 0
|
@ -1,11 +0,0 @@
|
||||
--- linux-3.2.2.orig/drivers/media/rc/mceusb.c 2012-01-30 23:37:12.374473509 +0100
|
||||
+++ linux-3.2.2/drivers/media/rc/mceusb.c 2012-01-30 23:40:57.989652931 +0100
|
||||
@@ -350,6 +350,8 @@
|
||||
{ USB_DEVICE(VENDOR_FORMOSA, 0xe015) },
|
||||
/* Formosa21 / eHome Infrared Receiver */
|
||||
{ USB_DEVICE(VENDOR_FORMOSA, 0xe016) },
|
||||
+ /* Formosa21 / eHome Infrared Receiver */
|
||||
+ { USB_DEVICE(VENDOR_FORMOSA, 0xe042) },
|
||||
/* Formosa aim / Trust MCE Infrared Receiver */
|
||||
{ USB_DEVICE(VENDOR_FORMOSA, 0xe017),
|
||||
.driver_info = MCE_GEN2_NO_TX },
|
@ -1,20 +0,0 @@
|
||||
diff -Naur linux-3.6.7/drivers/media/rc/mceusb.c linux-3.6.7.patch/drivers/media/rc/mceusb.c
|
||||
--- linux-3.6.7/drivers/media/rc/mceusb.c 2012-11-29 04:45:51.142129739 +0100
|
||||
+++ linux-3.6.7.patch/drivers/media/rc/mceusb.c 2012-11-29 04:51:30.982828558 +0100
|
||||
@@ -200,6 +200,7 @@
|
||||
#define VENDOR_TIVO 0x105a
|
||||
#define VENDOR_CONEXANT 0x0572
|
||||
#define VENDOR_TWISTEDMELON 0x2596
|
||||
+#define VENDOR_ADAPTEC 0x03f3
|
||||
|
||||
enum mceusb_model_type {
|
||||
MCE_GEN2 = 0, /* Most boards */
|
||||
@@ -400,6 +401,8 @@
|
||||
{ USB_DEVICE(VENDOR_TWISTEDMELON, 0x8016) },
|
||||
/* Twisted Melon Inc. - Manta Transceiver */
|
||||
{ USB_DEVICE(VENDOR_TWISTEDMELON, 0x8042) },
|
||||
+ /* Adaptec / HP eHome Receiver */
|
||||
+ { USB_DEVICE(VENDOR_ADAPTEC, 0x0094) },
|
||||
/* Terminating entry */
|
||||
{ }
|
||||
};
|
@ -1,22 +0,0 @@
|
||||
--- linux/drivers/media/rc/ir-rc6-decoder.c 2012-11-25 22:08:13.148418669 -0800
|
||||
+++ linux.patch/drivers/media/rc/ir-rc6-decoder.c 2012-11-25 22:07:48.864417975 -0800
|
||||
@@ -39,7 +39,6 @@
|
||||
#define RC6_STARTBIT_MASK 0x08 /* for the header bits */
|
||||
#define RC6_6A_MCE_TOGGLE_MASK 0x8000 /* for the body bits */
|
||||
#define RC6_6A_LCC_MASK 0xffff0000 /* RC6-6A-32 long customer code mask */
|
||||
-#define RC6_6A_MCE_CC 0x800f0000 /* MCE customer code */
|
||||
#ifndef CHAR_BIT
|
||||
#define CHAR_BIT 8 /* Normally in <limits.h> */
|
||||
#endif
|
||||
@@ -242,9 +241,8 @@ again:
|
||||
}
|
||||
|
||||
scancode = data->body;
|
||||
- if (data->count == RC6_6A_32_NBITS &&
|
||||
- (scancode & RC6_6A_LCC_MASK) == RC6_6A_MCE_CC) {
|
||||
- /* MCE RC */
|
||||
+ if (data->count == RC6_6A_32_NBITS) {
|
||||
+ /* MCE compatible RC */
|
||||
toggle = (scancode & RC6_6A_MCE_TOGGLE_MASK) ? 1 : 0;
|
||||
scancode &= ~RC6_6A_MCE_TOGGLE_MASK;
|
||||
} else {
|
@ -1,13 +0,0 @@
|
||||
diff -Naur linux-3.9.4/drivers/media/rc/mceusb.c linux-3.9.4.patch/drivers/media/rc/mceusb.c
|
||||
--- linux-3.9.4/drivers/media/rc/mceusb.c 2013-05-24 20:45:59.000000000 +0200
|
||||
+++ linux-3.9.4.patch/drivers/media/rc/mceusb.c 2013-05-27 12:28:12.811230633 +0200
|
||||
@@ -309,6 +309,9 @@
|
||||
/* SMK/I-O Data GV-MC7/RCKIT Receiver */
|
||||
{ USB_DEVICE(VENDOR_SMK, 0x0353),
|
||||
.driver_info = MCE_GEN2_NO_TX },
|
||||
+ /* SMK Manufacturing, Inc. Receiver */
|
||||
+ { USB_DEVICE(VENDOR_SMK, 0x0357),
|
||||
+ .driver_info = MCE_GEN2_NO_TX },
|
||||
/* Tatung eHome Infrared Transceiver */
|
||||
{ USB_DEVICE(VENDOR_TATUNG, 0x9150) },
|
||||
/* Shuttle eHome Infrared Transceiver */
|
@ -1,59 +0,0 @@
|
||||
From cca7718a9902a4d5cffbf158b5853980a08ef930 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Lissy <alexandrelissy@free.fr>
|
||||
Date: Sun, 2 Sep 2012 20:35:20 +0200
|
||||
Subject: [PATCH] fix: iMon Knob event interpretation issues
|
||||
|
||||
Events for the iMon Knob pad where not correctly interpreted, resulting
|
||||
in buggy mouse movements (cursor going straight out of the screen), key
|
||||
pad only generating KEY_RIGHT and KEY_DOWN events. A reproducer is:
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
char rel_x = 0x00; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
|
||||
rel_x = 0x0f; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
|
||||
rel_x |= ~0x0f; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
(running on x86 or amd64)
|
||||
$ ./test
|
||||
rel_x:0 @test.c:6
|
||||
rel_x:15 @test.c:7
|
||||
rel_x:-1 @test.c:8
|
||||
|
||||
(running on armv6)
|
||||
rel_x:0 @test.c:6
|
||||
rel_x:15 @test.c:7
|
||||
rel_x:255 @test.c:8
|
||||
|
||||
Forcing the rel_x and rel_y variables as signed char fixes the issue.
|
||||
---
|
||||
drivers/media/rc/imon.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c
|
||||
index 5dd0386..9d30ca9 100644
|
||||
--- a/drivers/media/rc/imon.c
|
||||
+++ b/drivers/media/rc/imon.c
|
||||
@@ -1225,7 +1225,7 @@ static u32 imon_panel_key_lookup(u64 code)
|
||||
static bool imon_mouse_event(struct imon_context *ictx,
|
||||
unsigned char *buf, int len)
|
||||
{
|
||||
- char rel_x = 0x00, rel_y = 0x00;
|
||||
+ signed char rel_x = 0x00, rel_y = 0x00;
|
||||
u8 right_shift = 1;
|
||||
bool mouse_input = true;
|
||||
int dir = 0;
|
||||
@@ -1301,7 +1301,7 @@ static void imon_touch_event(struct imon_context *ictx, unsigned char *buf)
|
||||
static void imon_pad_to_keys(struct imon_context *ictx, unsigned char *buf)
|
||||
{
|
||||
int dir = 0;
|
||||
- char rel_x = 0x00, rel_y = 0x00;
|
||||
+ signed char rel_x = 0x00, rel_y = 0x00;
|
||||
u16 timeout, threshold;
|
||||
u32 scancode = KEY_RESERVED;
|
||||
unsigned long flags;
|
||||
--
|
||||
1.7.9.5
|
||||
|
@ -1,11 +0,0 @@
|
||||
diff -Naur linux-3.8.4/drivers/input/joystick/xpad.c linux-3.8.4.patch/drivers/input/joystick/xpad.c
|
||||
--- linux-3.8.4/drivers/input/joystick/xpad.c 2013-03-20 21:11:19.000000000 +0100
|
||||
+++ linux-3.8.4.patch/drivers/input/joystick/xpad.c 2013-03-26 20:24:29.273978355 +0100
|
||||
@@ -174,7 +174,6 @@
|
||||
{ 0x1bad, 0xf901, "Gamestop Xbox 360 Controller", 0, XTYPE_XBOX360 },
|
||||
{ 0x1bad, 0xf903, "Tron Xbox 360 controller", 0, XTYPE_XBOX360 },
|
||||
{ 0x24c6, 0x5300, "PowerA MINI PROEX Controller", 0, XTYPE_XBOX360 },
|
||||
- { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
|
||||
{ 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN }
|
||||
};
|
||||
|
@ -1,12 +0,0 @@
|
||||
diff -Naur linux-3.7.2/drivers/media/dvb-frontends/stb0899_drv.c linux-3.7.2.patch/drivers/media/dvb-frontends/stb0899_drv.c
|
||||
--- linux-3.7.2/drivers/media/dvb-frontends/stb0899_drv.c 2013-01-11 18:19:28.000000000 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/dvb-frontends/stb0899_drv.c 2013-01-16 10:25:43.479645317 +0100
|
||||
@@ -1581,7 +1581,7 @@
|
||||
.frequency_max = 2150000,
|
||||
.frequency_stepsize = 0,
|
||||
.frequency_tolerance = 0,
|
||||
- .symbol_rate_min = 5000000,
|
||||
+ .symbol_rate_min = 1000000,
|
||||
.symbol_rate_max = 45000000,
|
||||
|
||||
.caps = FE_CAN_INVERSION_AUTO |
|
@ -1,416 +0,0 @@
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/ati_remote.c linux-3.7.2.patch/drivers/media/rc/ati_remote.c
|
||||
--- linux-3.7.2/drivers/media/rc/ati_remote.c 2013-01-11 18:19:28.000000000 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/ati_remote.c 2013-01-16 11:36:43.015842239 +0100
|
||||
@@ -872,11 +872,11 @@
|
||||
ati_remote = kzalloc(sizeof (struct ati_remote), GFP_KERNEL);
|
||||
rc_dev = rc_allocate_device();
|
||||
if (!ati_remote || !rc_dev)
|
||||
- goto fail1;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
/* Allocate URB buffers, URBs */
|
||||
if (ati_remote_alloc_buffers(udev, ati_remote))
|
||||
- goto fail2;
|
||||
+ goto exit_free_buffers;
|
||||
|
||||
ati_remote->endpoint_in = endpoint_in;
|
||||
ati_remote->endpoint_out = endpoint_out;
|
||||
@@ -924,12 +924,12 @@
|
||||
/* Device Hardware Initialization - fills in ati_remote->idev from udev. */
|
||||
err = ati_remote_initialize(ati_remote);
|
||||
if (err)
|
||||
- goto fail3;
|
||||
+ goto exit_kill_urbs;
|
||||
|
||||
/* Set up and register rc device */
|
||||
err = rc_register_device(ati_remote->rdev);
|
||||
if (err)
|
||||
- goto fail3;
|
||||
+ goto exit_kill_urbs;
|
||||
|
||||
/* use our delay for rc_dev */
|
||||
ati_remote->rdev->input_dev->rep[REP_DELAY] = repeat_delay;
|
||||
@@ -939,7 +939,7 @@
|
||||
input_dev = input_allocate_device();
|
||||
if (!input_dev) {
|
||||
err = -ENOMEM;
|
||||
- goto fail4;
|
||||
+ goto exit_unregister_device;
|
||||
}
|
||||
|
||||
ati_remote->idev = input_dev;
|
||||
@@ -947,19 +947,24 @@
|
||||
err = input_register_device(input_dev);
|
||||
|
||||
if (err)
|
||||
- goto fail5;
|
||||
+ goto exit_free_input_device;
|
||||
}
|
||||
|
||||
usb_set_intfdata(interface, ati_remote);
|
||||
return 0;
|
||||
|
||||
- fail5: input_free_device(input_dev);
|
||||
- fail4: rc_unregister_device(rc_dev);
|
||||
+ exit_free_input_device:
|
||||
+ input_free_device(input_dev);
|
||||
+ exit_unregister_device:
|
||||
+ rc_unregister_device(rc_dev);
|
||||
rc_dev = NULL;
|
||||
- fail3: usb_kill_urb(ati_remote->irq_urb);
|
||||
+ exit_kill_urbs:
|
||||
+ usb_kill_urb(ati_remote->irq_urb);
|
||||
usb_kill_urb(ati_remote->out_urb);
|
||||
- fail2: ati_remote_free_buffers(ati_remote);
|
||||
- fail1: rc_free_device(rc_dev);
|
||||
+ exit_free_buffers:
|
||||
+ ati_remote_free_buffers(ati_remote);
|
||||
+ exit_free_dev_rdev:
|
||||
+ rc_free_device(rc_dev);
|
||||
kfree(ati_remote);
|
||||
return err;
|
||||
}
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/ene_ir.c linux-3.7.2.patch/drivers/media/rc/ene_ir.c
|
||||
--- linux-3.7.2/drivers/media/rc/ene_ir.c 2013-01-16 11:32:57.717491063 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/ene_ir.c 2013-01-16 11:33:19.804329904 +0100
|
||||
@@ -1003,7 +1003,7 @@
|
||||
dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL);
|
||||
rdev = rc_allocate_device();
|
||||
if (!dev || !rdev)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
/* validate resources */
|
||||
error = -ENODEV;
|
||||
@@ -1014,10 +1014,10 @@
|
||||
|
||||
if (!pnp_port_valid(pnp_dev, 0) ||
|
||||
pnp_port_len(pnp_dev, 0) < ENE_IO_SIZE)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
if (!pnp_irq_valid(pnp_dev, 0))
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
spin_lock_init(&dev->hw_lock);
|
||||
|
||||
@@ -1033,7 +1033,7 @@
|
||||
/* detect hardware version and features */
|
||||
error = ene_hw_detect(dev);
|
||||
if (error)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
if (!dev->hw_learning_and_tx_capable && txsim) {
|
||||
dev->hw_learning_and_tx_capable = true;
|
||||
@@ -1078,27 +1078,27 @@
|
||||
/* claim the resources */
|
||||
error = -EBUSY;
|
||||
if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) {
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
dev->irq = pnp_irq(pnp_dev, 0);
|
||||
if (request_irq(dev->irq, ene_isr,
|
||||
IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) {
|
||||
- goto failure2;
|
||||
+ goto exit_release_hw_io;
|
||||
}
|
||||
|
||||
error = rc_register_device(rdev);
|
||||
if (error < 0)
|
||||
- goto failure3;
|
||||
+ goto exit_free_irq;
|
||||
|
||||
pr_notice("driver has been successfully loaded\n");
|
||||
return 0;
|
||||
|
||||
-failure3:
|
||||
+exit_free_irq:
|
||||
free_irq(dev->irq, dev);
|
||||
-failure2:
|
||||
+exit_release_hw_io:
|
||||
release_region(dev->hw_io, ENE_IO_SIZE);
|
||||
-failure:
|
||||
+exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(dev);
|
||||
return error;
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/fintek-cir.c linux-3.7.2.patch/drivers/media/rc/fintek-cir.c
|
||||
--- linux-3.7.2/drivers/media/rc/fintek-cir.c 2013-01-11 18:19:28.000000000 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/fintek-cir.c 2013-01-16 11:33:19.804329904 +0100
|
||||
@@ -500,18 +500,18 @@
|
||||
/* input device for IR remote (and tx) */
|
||||
rdev = rc_allocate_device();
|
||||
if (!rdev)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
ret = -ENODEV;
|
||||
/* validate pnp resources */
|
||||
if (!pnp_port_valid(pdev, 0)) {
|
||||
dev_err(&pdev->dev, "IR PNP Port not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
if (!pnp_irq_valid(pdev, 0)) {
|
||||
dev_err(&pdev->dev, "IR PNP IRQ not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
fintek->cir_addr = pnp_port_start(pdev, 0);
|
||||
@@ -528,7 +528,7 @@
|
||||
|
||||
ret = fintek_hw_detect(fintek);
|
||||
if (ret)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
/* Initialize CIR & CIR Wake Logical Devices */
|
||||
fintek_config_mode_enable(fintek);
|
||||
@@ -561,15 +561,15 @@
|
||||
/* now claim resources */
|
||||
if (!request_region(fintek->cir_addr,
|
||||
fintek->cir_port_len, FINTEK_DRIVER_NAME))
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
if (request_irq(fintek->cir_irq, fintek_cir_isr, IRQF_SHARED,
|
||||
FINTEK_DRIVER_NAME, (void *)fintek))
|
||||
- goto failure2;
|
||||
+ goto exit_free_cir_addr;
|
||||
|
||||
ret = rc_register_device(rdev);
|
||||
if (ret)
|
||||
- goto failure3;
|
||||
+ goto exit_free_irq;
|
||||
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
fintek->rdev = rdev;
|
||||
@@ -579,11 +579,11 @@
|
||||
|
||||
return 0;
|
||||
|
||||
-failure3:
|
||||
+exit_free_irq:
|
||||
free_irq(fintek->cir_irq, fintek);
|
||||
-failure2:
|
||||
+exit_free_cir_addr:
|
||||
release_region(fintek->cir_addr, fintek->cir_port_len);
|
||||
-failure:
|
||||
+exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(fintek);
|
||||
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/gpio-ir-recv.c linux-3.7.2.patch/drivers/media/rc/gpio-ir-recv.c
|
||||
--- linux-3.7.2/drivers/media/rc/gpio-ir-recv.c 2013-01-11 18:19:28.000000000 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/gpio-ir-recv.c 2013-01-16 11:33:19.805329897 +0100
|
||||
@@ -79,7 +79,7 @@
|
||||
rcdev = rc_allocate_device();
|
||||
if (!rcdev) {
|
||||
rc = -ENOMEM;
|
||||
- goto err_allocate_device;
|
||||
+ goto exit_free_dev;
|
||||
}
|
||||
|
||||
rcdev->priv = gpio_dev;
|
||||
@@ -104,15 +104,15 @@
|
||||
|
||||
rc = gpio_request(pdata->gpio_nr, "gpio-ir-recv");
|
||||
if (rc < 0)
|
||||
- goto err_gpio_request;
|
||||
+ goto exit_free_rdev;
|
||||
rc = gpio_direction_input(pdata->gpio_nr);
|
||||
if (rc < 0)
|
||||
- goto err_gpio_direction_input;
|
||||
+ goto exit_free_gpio;
|
||||
|
||||
rc = rc_register_device(rcdev);
|
||||
if (rc < 0) {
|
||||
dev_err(&pdev->dev, "failed to register rc device\n");
|
||||
- goto err_register_rc_device;
|
||||
+ goto exit_free_gpio;
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, gpio_dev);
|
||||
@@ -122,20 +122,19 @@
|
||||
IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
|
||||
"gpio-ir-recv-irq", gpio_dev);
|
||||
if (rc < 0)
|
||||
- goto err_request_irq;
|
||||
+ goto exit_unregister_device;
|
||||
|
||||
return 0;
|
||||
|
||||
-err_request_irq:
|
||||
+exit_unregister_device:
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
rc_unregister_device(rcdev);
|
||||
-err_register_rc_device:
|
||||
-err_gpio_direction_input:
|
||||
+exit_free_gpio:
|
||||
gpio_free(pdata->gpio_nr);
|
||||
-err_gpio_request:
|
||||
+exit_free_rdev:
|
||||
rc_free_device(rcdev);
|
||||
rcdev = NULL;
|
||||
-err_allocate_device:
|
||||
+exit_free_dev:
|
||||
kfree(gpio_dev);
|
||||
return rc;
|
||||
}
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/ite-cir.c linux-3.7.2.patch/drivers/media/rc/ite-cir.c
|
||||
--- linux-3.7.2/drivers/media/rc/ite-cir.c 2013-01-11 18:19:28.000000000 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/ite-cir.c 2013-01-16 11:41:13.627855777 +0100
|
||||
@@ -1472,7 +1472,7 @@
|
||||
/* input device for IR remote (and tx) */
|
||||
rdev = rc_allocate_device();
|
||||
if (!rdev)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
itdev->rdev = rdev;
|
||||
|
||||
ret = -ENODEV;
|
||||
@@ -1498,12 +1498,12 @@
|
||||
if (!pnp_port_valid(pdev, io_rsrc_no) ||
|
||||
pnp_port_len(pdev, io_rsrc_no) != dev_desc->io_region_size) {
|
||||
dev_err(&pdev->dev, "IR PNP Port not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
if (!pnp_irq_valid(pdev, 0)) {
|
||||
dev_err(&pdev->dev, "PNP IRQ not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
/* store resource values */
|
||||
@@ -1595,25 +1595,25 @@
|
||||
/* now claim resources */
|
||||
if (!request_region(itdev->cir_addr,
|
||||
dev_desc->io_region_size, ITE_DRIVER_NAME))
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
if (request_irq(itdev->cir_irq, ite_cir_isr, IRQF_SHARED,
|
||||
ITE_DRIVER_NAME, (void *)itdev))
|
||||
- goto failure2;
|
||||
+ goto exit_release_cir_addr;
|
||||
|
||||
ret = rc_register_device(rdev);
|
||||
if (ret)
|
||||
- goto failure3;
|
||||
+ goto exit_free_irq;
|
||||
|
||||
ite_pr(KERN_NOTICE, "driver has been successfully loaded\n");
|
||||
|
||||
return 0;
|
||||
|
||||
-failure3:
|
||||
+exit_free_irq:
|
||||
free_irq(itdev->cir_irq, itdev);
|
||||
-failure2:
|
||||
+exit_release_cir_addr:
|
||||
release_region(itdev->cir_addr, itdev->params.io_region_size);
|
||||
-failure:
|
||||
+exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(itdev);
|
||||
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/nuvoton-cir.c linux-3.7.2.patch/drivers/media/rc/nuvoton-cir.c
|
||||
--- linux-3.7.2/drivers/media/rc/nuvoton-cir.c 2013-01-11 18:19:28.000000000 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/nuvoton-cir.c 2013-01-16 11:33:19.806329890 +0100
|
||||
@@ -989,25 +989,25 @@
|
||||
/* input device for IR remote (and tx) */
|
||||
rdev = rc_allocate_device();
|
||||
if (!rdev)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
ret = -ENODEV;
|
||||
/* validate pnp resources */
|
||||
if (!pnp_port_valid(pdev, 0) ||
|
||||
pnp_port_len(pdev, 0) < CIR_IOREG_LENGTH) {
|
||||
dev_err(&pdev->dev, "IR PNP Port not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
if (!pnp_irq_valid(pdev, 0)) {
|
||||
dev_err(&pdev->dev, "PNP IRQ not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
if (!pnp_port_valid(pdev, 1) ||
|
||||
pnp_port_len(pdev, 1) < CIR_IOREG_LENGTH) {
|
||||
dev_err(&pdev->dev, "Wake PNP Port not valid!\n");
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
}
|
||||
|
||||
nvt->cir_addr = pnp_port_start(pdev, 0);
|
||||
@@ -1030,7 +1030,7 @@
|
||||
|
||||
ret = nvt_hw_detect(nvt);
|
||||
if (ret)
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
/* Initialize CIR & CIR Wake Logical Devices */
|
||||
nvt_efm_enable(nvt);
|
||||
@@ -1073,23 +1073,23 @@
|
||||
/* now claim resources */
|
||||
if (!request_region(nvt->cir_addr,
|
||||
CIR_IOREG_LENGTH, NVT_DRIVER_NAME))
|
||||
- goto failure;
|
||||
+ goto exit_free_dev_rdev;
|
||||
|
||||
if (request_irq(nvt->cir_irq, nvt_cir_isr, IRQF_SHARED,
|
||||
NVT_DRIVER_NAME, (void *)nvt))
|
||||
- goto failure2;
|
||||
+ goto exit_release_cir_addr;
|
||||
|
||||
if (!request_region(nvt->cir_wake_addr,
|
||||
CIR_IOREG_LENGTH, NVT_DRIVER_NAME))
|
||||
- goto failure3;
|
||||
+ goto exit_free_irq;
|
||||
|
||||
if (request_irq(nvt->cir_wake_irq, nvt_cir_wake_isr, IRQF_SHARED,
|
||||
NVT_DRIVER_NAME, (void *)nvt))
|
||||
- goto failure4;
|
||||
+ goto exit_release_cir_wake_addr;
|
||||
|
||||
ret = rc_register_device(rdev);
|
||||
if (ret)
|
||||
- goto failure5;
|
||||
+ goto exit_free_wake_irq;
|
||||
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
nvt->rdev = rdev;
|
||||
@@ -1101,15 +1101,15 @@
|
||||
|
||||
return 0;
|
||||
|
||||
-failure5:
|
||||
+exit_free_wake_irq:
|
||||
free_irq(nvt->cir_wake_irq, nvt);
|
||||
-failure4:
|
||||
+exit_release_cir_wake_addr:
|
||||
release_region(nvt->cir_wake_addr, CIR_IOREG_LENGTH);
|
||||
-failure3:
|
||||
+exit_free_irq:
|
||||
free_irq(nvt->cir_irq, nvt);
|
||||
-failure2:
|
||||
+exit_release_cir_addr:
|
||||
release_region(nvt->cir_addr, CIR_IOREG_LENGTH);
|
||||
-failure:
|
||||
+exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(nvt);
|
||||
|
@ -1,53 +0,0 @@
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/fintek-cir.c linux-3.7.2.patch/drivers/media/rc/fintek-cir.c
|
||||
--- linux-3.7.2/drivers/media/rc/fintek-cir.c 2013-01-16 11:43:34.103841326 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/fintek-cir.c 2013-01-16 11:43:48.022744456 +0100
|
||||
@@ -557,6 +557,8 @@
|
||||
/* rx resolution is hardwired to 50us atm, 1, 25, 100 also possible */
|
||||
rdev->rx_resolution = US_TO_NS(CIR_SAMPLE_PERIOD);
|
||||
|
||||
+ fintek->rdev = rdev;
|
||||
+
|
||||
ret = -EBUSY;
|
||||
/* now claim resources */
|
||||
if (!request_region(fintek->cir_addr,
|
||||
@@ -572,7 +574,7 @@
|
||||
goto exit_free_irq;
|
||||
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
- fintek->rdev = rdev;
|
||||
+
|
||||
fit_pr(KERN_NOTICE, "driver has been successfully loaded\n");
|
||||
if (debug)
|
||||
cir_dump_regs(fintek);
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/ite-cir.c linux-3.7.2.patch/drivers/media/rc/ite-cir.c
|
||||
--- linux-3.7.2/drivers/media/rc/ite-cir.c 2013-01-16 11:43:34.103841326 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/ite-cir.c 2013-01-16 11:43:48.023744450 +0100
|
||||
@@ -1591,6 +1591,8 @@
|
||||
rdev->driver_name = ITE_DRIVER_NAME;
|
||||
rdev->map_name = RC_MAP_RC6_MCE;
|
||||
|
||||
+ itdev->rdev = rdev;
|
||||
+
|
||||
ret = -EBUSY;
|
||||
/* now claim resources */
|
||||
if (!request_region(itdev->cir_addr,
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/nuvoton-cir.c linux-3.7.2.patch/drivers/media/rc/nuvoton-cir.c
|
||||
--- linux-3.7.2/drivers/media/rc/nuvoton-cir.c 2013-01-16 11:43:34.103841326 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/nuvoton-cir.c 2013-01-16 11:43:48.024744444 +0100
|
||||
@@ -1068,6 +1068,7 @@
|
||||
/* tx bits */
|
||||
rdev->tx_resolution = XYZ;
|
||||
#endif
|
||||
+ nvt->rdev = rdev;
|
||||
|
||||
ret = -EBUSY;
|
||||
/* now claim resources */
|
||||
@@ -1092,7 +1093,7 @@
|
||||
goto exit_free_wake_irq;
|
||||
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
- nvt->rdev = rdev;
|
||||
+
|
||||
nvt_pr(KERN_NOTICE, "driver has been successfully loaded\n");
|
||||
if (debug) {
|
||||
cir_dump_regs(nvt);
|
@ -1,173 +0,0 @@
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/ene_ir.c linux-3.7.2.patch/drivers/media/rc/ene_ir.c
|
||||
--- linux-3.7.2/drivers/media/rc/ene_ir.c 2013-01-16 11:45:44.284927519 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/ene_ir.c 2013-01-16 11:45:56.664840340 +0100
|
||||
@@ -1075,10 +1075,14 @@
|
||||
device_set_wakeup_capable(&pnp_dev->dev, true);
|
||||
device_set_wakeup_enable(&pnp_dev->dev, true);
|
||||
|
||||
+ error = rc_register_device(rdev);
|
||||
+ if (error < 0)
|
||||
+ goto exit_free_dev_rdev;
|
||||
+
|
||||
/* claim the resources */
|
||||
error = -EBUSY;
|
||||
if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) {
|
||||
- goto exit_free_dev_rdev;
|
||||
+ goto exit_unregister_device;
|
||||
}
|
||||
|
||||
dev->irq = pnp_irq(pnp_dev, 0);
|
||||
@@ -1087,17 +1091,13 @@
|
||||
goto exit_release_hw_io;
|
||||
}
|
||||
|
||||
- error = rc_register_device(rdev);
|
||||
- if (error < 0)
|
||||
- goto exit_free_irq;
|
||||
-
|
||||
pr_notice("driver has been successfully loaded\n");
|
||||
return 0;
|
||||
|
||||
-exit_free_irq:
|
||||
- free_irq(dev->irq, dev);
|
||||
exit_release_hw_io:
|
||||
release_region(dev->hw_io, ENE_IO_SIZE);
|
||||
+exit_unregister_device:
|
||||
+ rc_unregister_device(rdev);
|
||||
exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(dev);
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/ite-cir.c linux-3.7.2.patch/drivers/media/rc/ite-cir.c
|
||||
--- linux-3.7.2/drivers/media/rc/ite-cir.c 2013-01-16 11:45:44.283927524 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/ite-cir.c 2013-01-16 11:45:56.665840333 +0100
|
||||
@@ -1593,28 +1593,28 @@
|
||||
|
||||
itdev->rdev = rdev;
|
||||
|
||||
+ ret = rc_register_device(rdev);
|
||||
+ if (ret)
|
||||
+ goto exit_free_dev_rdev;
|
||||
+
|
||||
ret = -EBUSY;
|
||||
/* now claim resources */
|
||||
if (!request_region(itdev->cir_addr,
|
||||
dev_desc->io_region_size, ITE_DRIVER_NAME))
|
||||
- goto exit_free_dev_rdev;
|
||||
+ goto exit_unregister_device;
|
||||
|
||||
if (request_irq(itdev->cir_irq, ite_cir_isr, IRQF_SHARED,
|
||||
ITE_DRIVER_NAME, (void *)itdev))
|
||||
goto exit_release_cir_addr;
|
||||
|
||||
- ret = rc_register_device(rdev);
|
||||
- if (ret)
|
||||
- goto exit_free_irq;
|
||||
-
|
||||
ite_pr(KERN_NOTICE, "driver has been successfully loaded\n");
|
||||
|
||||
return 0;
|
||||
|
||||
-exit_free_irq:
|
||||
- free_irq(itdev->cir_irq, itdev);
|
||||
exit_release_cir_addr:
|
||||
release_region(itdev->cir_addr, itdev->params.io_region_size);
|
||||
+exit_unregister_device:
|
||||
+ rc_unregister_device(rdev);
|
||||
exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(itdev);
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/nuvoton-cir.c linux-3.7.2.patch/drivers/media/rc/nuvoton-cir.c
|
||||
--- linux-3.7.2/drivers/media/rc/nuvoton-cir.c 2013-01-16 11:45:44.283927524 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/nuvoton-cir.c 2013-01-16 11:45:56.665840333 +0100
|
||||
@@ -1070,11 +1070,15 @@
|
||||
#endif
|
||||
nvt->rdev = rdev;
|
||||
|
||||
+ ret = rc_register_device(rdev);
|
||||
+ if (ret)
|
||||
+ goto exit_free_dev_rdev;
|
||||
+
|
||||
ret = -EBUSY;
|
||||
/* now claim resources */
|
||||
if (!request_region(nvt->cir_addr,
|
||||
CIR_IOREG_LENGTH, NVT_DRIVER_NAME))
|
||||
- goto exit_free_dev_rdev;
|
||||
+ goto exit_unregister_device;
|
||||
|
||||
if (request_irq(nvt->cir_irq, nvt_cir_isr, IRQF_SHARED,
|
||||
NVT_DRIVER_NAME, (void *)nvt))
|
||||
@@ -1088,10 +1092,6 @@
|
||||
NVT_DRIVER_NAME, (void *)nvt))
|
||||
goto exit_release_cir_wake_addr;
|
||||
|
||||
- ret = rc_register_device(rdev);
|
||||
- if (ret)
|
||||
- goto exit_free_wake_irq;
|
||||
-
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
|
||||
nvt_pr(KERN_NOTICE, "driver has been successfully loaded\n");
|
||||
@@ -1102,14 +1102,14 @@
|
||||
|
||||
return 0;
|
||||
|
||||
-exit_free_wake_irq:
|
||||
- free_irq(nvt->cir_wake_irq, nvt);
|
||||
exit_release_cir_wake_addr:
|
||||
release_region(nvt->cir_wake_addr, CIR_IOREG_LENGTH);
|
||||
exit_free_irq:
|
||||
free_irq(nvt->cir_irq, nvt);
|
||||
exit_release_cir_addr:
|
||||
release_region(nvt->cir_addr, CIR_IOREG_LENGTH);
|
||||
+exit_unregister_device:
|
||||
+ rc_unregister_device(rdev);
|
||||
exit_free_dev_rdev:
|
||||
rc_free_device(rdev);
|
||||
kfree(nvt);
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/winbond-cir.c linux-3.7.2.patch/drivers/media/rc/winbond-cir.c
|
||||
--- linux-3.7.2/drivers/media/rc/winbond-cir.c 2013-01-16 11:45:44.283927524 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/winbond-cir.c 2013-01-16 11:45:56.666840325 +0100
|
||||
@@ -1024,11 +1024,15 @@
|
||||
data->dev->timeout = MS_TO_NS(100);
|
||||
data->dev->allowed_protos = RC_TYPE_ALL;
|
||||
|
||||
+ err = rc_register_device(data->dev);
|
||||
+ if (err)
|
||||
+ goto exit_free_rc;
|
||||
+
|
||||
if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) {
|
||||
dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
|
||||
data->wbase, data->wbase + WAKEUP_IOMEM_LEN - 1);
|
||||
err = -EBUSY;
|
||||
- goto exit_free_rc;
|
||||
+ goto exit_unregister_device;
|
||||
}
|
||||
|
||||
if (!request_region(data->ebase, EHFUNC_IOMEM_LEN, DRVNAME)) {
|
||||
@@ -1053,24 +1057,20 @@
|
||||
goto exit_release_sbase;
|
||||
}
|
||||
|
||||
- err = rc_register_device(data->dev);
|
||||
- if (err)
|
||||
- goto exit_free_irq;
|
||||
-
|
||||
device_init_wakeup(&device->dev, 1);
|
||||
|
||||
wbcir_init_hw(data);
|
||||
|
||||
return 0;
|
||||
|
||||
-exit_free_irq:
|
||||
- free_irq(data->irq, device);
|
||||
exit_release_sbase:
|
||||
release_region(data->sbase, SP_IOMEM_LEN);
|
||||
exit_release_ebase:
|
||||
release_region(data->ebase, EHFUNC_IOMEM_LEN);
|
||||
exit_release_wbase:
|
||||
release_region(data->wbase, WAKEUP_IOMEM_LEN);
|
||||
+exit_unregister_device:
|
||||
+ rc_unregister_device(data->dev);
|
||||
exit_free_rc:
|
||||
rc_free_device(data->dev);
|
||||
exit_unregister_led:
|
6153
packages/linux/patches/3.8.13/linux-210-dvbsky.patch
vendored
6153
packages/linux/patches/3.8.13/linux-210-dvbsky.patch
vendored
File diff suppressed because it is too large
Load Diff
@ -1,138 +0,0 @@
|
||||
diff -Naur linux-3.7.2/drivers/media/dvb-frontends/stb0899_algo.c linux-3.7.2.patch/drivers/media/dvb-frontends/stb0899_algo.c
|
||||
--- linux-3.7.2/drivers/media/dvb-frontends/stb0899_algo.c 2013-01-11 18:19:28.000000000 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/dvb-frontends/stb0899_algo.c 2013-01-16 10:28:33.633409961 +0100
|
||||
@@ -206,7 +206,6 @@
|
||||
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 @@
|
||||
|
||||
/* 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 @@
|
||||
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 @@
|
||||
{
|
||||
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 @@
|
||||
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 @@
|
||||
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 @@
|
||||
int lock = 0, index = 0, dataTime = 500, loop;
|
||||
u8 reg;
|
||||
|
||||
+ msleep(1);
|
||||
internal->status = NODATA;
|
||||
|
||||
/* RESET FEC */
|
||||
@@ -348,6 +352,7 @@
|
||||
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;
|
||||
@@ -363,6 +368,7 @@
|
||||
|
||||
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);
|
||||
@@ -390,20 +396,21 @@
|
||||
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) {
|
||||
@@ -417,9 +424,9 @@
|
||||
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,53 +0,0 @@
|
||||
diff -Naur linux-3.7.2/drivers/media/usb/dvb-usb/dw2102.c linux-3.7.2.patch/drivers/media/usb/dvb-usb/dw2102.c
|
||||
--- linux-3.7.2/drivers/media/usb/dvb-usb/dw2102.c 2013-01-11 18:19:28.000000000 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/usb/dvb-usb/dw2102.c 2013-01-16 10:35:01.131342123 +0100
|
||||
@@ -1179,6 +1179,13 @@
|
||||
u8 ibuf[] = { 0 };
|
||||
|
||||
if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0)
|
||||
+ err("command 0x0e transfer failed.");
|
||||
+
|
||||
+ 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.");
|
||||
|
||||
obuf[0] = 0xe;
|
||||
@@ -1444,6 +1451,7 @@
|
||||
PROF_7500,
|
||||
GENIATECH_SU3000,
|
||||
TERRATEC_CINERGY_S2,
|
||||
+ TERRATEC_CINERGY_S2_R2,
|
||||
TEVII_S480_1,
|
||||
TEVII_S480_2,
|
||||
X3M_SPC1400HD,
|
||||
@@ -1462,6 +1470,7 @@
|
||||
[PROF_7500] = {USB_DEVICE(0x3034, 0x7500)},
|
||||
[GENIATECH_SU3000] = {USB_DEVICE(0x1f4d, 0x3000)},
|
||||
[TERRATEC_CINERGY_S2] = {USB_DEVICE(USB_VID_TERRATEC, 0x00a8)},
|
||||
+ [TERRATEC_CINERGY_S2_R2] = {USB_DEVICE(USB_VID_TERRATEC, 0x00b0)},
|
||||
[TEVII_S480_1] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_1)},
|
||||
[TEVII_S480_2] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_2)},
|
||||
[X3M_SPC1400HD] = {USB_DEVICE(0x1f4d, 0x3100)},
|
||||
@@ -1853,7 +1862,7 @@
|
||||
}},
|
||||
}
|
||||
},
|
||||
- .num_device_descs = 3,
|
||||
+ .num_device_descs = 4,
|
||||
.devices = {
|
||||
{ "SU3000HD DVB-S USB2.0",
|
||||
{ &dw2102_table[GENIATECH_SU3000], NULL },
|
||||
@@ -1867,6 +1876,10 @@
|
||||
{ &dw2102_table[X3M_SPC1400HD], NULL },
|
||||
{ NULL },
|
||||
},
|
||||
+ { "Terratec Cinergy S2 USB HD Rev.2",
|
||||
+ { &dw2102_table[TERRATEC_CINERGY_S2_R2], NULL },
|
||||
+ { NULL },
|
||||
+ },
|
||||
}
|
||||
};
|
||||
|
@ -1,11 +0,0 @@
|
||||
--- a/drivers/media/usb/em28xx/em28xx-cards.c 2013-04-25 19:43:52.636526510 +0200
|
||||
+++ b/drivers/media/usb/em28xx/em28xx-cards.c 2013-04-25 19:44:08.784390961 +0200
|
||||
@@ -2073,6 +2073,8 @@
|
||||
.driver_info = EM2884_BOARD_TERRATEC_H5 },
|
||||
{ USB_DEVICE(0x0ccd, 0x10ad), /* H5 Rev. 2 */
|
||||
.driver_info = EM2884_BOARD_TERRATEC_H5 },
|
||||
+ { USB_DEVICE(0x0ccd, 0x10b6), /* H5 Rev. 3 */
|
||||
+ .driver_info = EM2884_BOARD_TERRATEC_H5 },
|
||||
{ USB_DEVICE(0x0ccd, 0x0084),
|
||||
.driver_info = EM2860_BOARD_TERRATEC_AV350 },
|
||||
{ USB_DEVICE(0x0ccd, 0x0096),
|
@ -1,15 +0,0 @@
|
||||
X-Git-Url: http://git.linuxtv.org
|
||||
|
||||
diff --git a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
|
||||
index 2d02471..ca54674 100644
|
||||
--- a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
|
||||
+++ b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
|
||||
@@ -1364,6 +1364,8 @@ static const struct usb_device_id rtl28xxu_id_table[] = {
|
||||
&rtl2832u_props, "Dexatek DK mini DVB-T Dongle", NULL) },
|
||||
{ DVB_USB_DEVICE(USB_VID_TERRATEC, 0x00d7,
|
||||
&rtl2832u_props, "TerraTec Cinergy T Stick+", NULL) },
|
||||
+ { DVB_USB_DEVICE(USB_VID_KWORLD_2, 0xd3a8,
|
||||
+ &rtl2832u_props, "ASUS My Cinema-U3100Mini Plus V2", NULL) },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, rtl28xxu_id_table);
|
@ -1,56 +0,0 @@
|
||||
From 10a5c9148ee6841004cb7e6f4b09022eba94c7be Mon Sep 17 00:00:00 2001
|
||||
From: Eddi De Pieri <eddi@depieri.net>
|
||||
Date: Sat, 22 Dec 2012 09:41:49 -0300
|
||||
Subject: [PATCH] [media] it913x: add support for Avermedia A835B
|
||||
|
||||
Add support for Avermedia A835B and variants.
|
||||
|
||||
Signed-off-by: Eddi De Pieri <eddi@depieri.net>
|
||||
Cc: Malcolm Priestley <tvboxspy@gmail.com>
|
||||
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
---
|
||||
drivers/media/dvb-core/dvb-usb-ids.h | 4 ++++
|
||||
drivers/media/usb/dvb-usb-v2/it913x.c | 12 ++++++++++++
|
||||
2 files changed, 16 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-usb-ids.h
|
||||
index c6720f2..7e1597d 100644
|
||||
--- a/drivers/media/dvb-core/dvb-usb-ids.h
|
||||
+++ b/drivers/media/dvb-core/dvb-usb-ids.h
|
||||
@@ -234,6 +234,10 @@
|
||||
#define USB_PID_AVERMEDIA_A815M 0x815a
|
||||
#define USB_PID_AVERMEDIA_A835 0xa835
|
||||
#define USB_PID_AVERMEDIA_B835 0xb835
|
||||
+#define USB_PID_AVERMEDIA_A835B_1835 0x1835
|
||||
+#define USB_PID_AVERMEDIA_A835B_2835 0x2835
|
||||
+#define USB_PID_AVERMEDIA_A835B_3835 0x3835
|
||||
+#define USB_PID_AVERMEDIA_A835B_4835 0x4835
|
||||
#define USB_PID_AVERMEDIA_1867 0x1867
|
||||
#define USB_PID_AVERMEDIA_A867 0xa867
|
||||
#define USB_PID_AVERMEDIA_TWINSTAR 0x0825
|
||||
diff --git a/drivers/media/usb/dvb-usb-v2/it913x.c b/drivers/media/usb/dvb-usb-v2/it913x.c
|
||||
index fbc0a84..744c9f9 100644
|
||||
--- a/drivers/media/usb/dvb-usb-v2/it913x.c
|
||||
+++ b/drivers/media/usb/dvb-usb-v2/it913x.c
|
||||
@@ -780,6 +780,18 @@ static const struct usb_device_id it913x_id_table[] = {
|
||||
{ DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135_9006,
|
||||
&it913x_properties, "ITE 9135(9006) Generic",
|
||||
RC_MAP_IT913X_V1) },
|
||||
+ { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_1835,
|
||||
+ &it913x_properties, "Avermedia A835B(1835)",
|
||||
+ RC_MAP_IT913X_V2) },
|
||||
+ { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_2835,
|
||||
+ &it913x_properties, "Avermedia A835B(2835)",
|
||||
+ RC_MAP_IT913X_V2) },
|
||||
+ { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_3835,
|
||||
+ &it913x_properties, "Avermedia A835B(3835)",
|
||||
+ RC_MAP_IT913X_V2) },
|
||||
+ { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_4835,
|
||||
+ &it913x_properties, "Avermedia A835B(4835)",
|
||||
+ RC_MAP_IT913X_V2) },
|
||||
{} /* Terminating entry */
|
||||
};
|
||||
|
||||
--
|
||||
1.7.2.5
|
||||
|
@ -1,33 +0,0 @@
|
||||
From 78a5e70919e9416344409e523e53221613776d80 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Inyukhin <shurick@sectorb.msk.ru>
|
||||
Date: Fri, 4 Jan 2013 18:19:02 -0300
|
||||
Subject: [PATCH] [media] rtl28xxu: add Gigabyte U7300 DVB-T Dongle
|
||||
|
||||
Device with ID 1b80:d393 is the Gigabyte U7300 DVB-T dongle.
|
||||
It contains decoder Realtek RTL2832U and tuner Fitipower FC0012.
|
||||
|
||||
[crope@iki.fi: fix trivial merge conflict]
|
||||
Signed-off-by: Alexander Inyukhin <shurick@sectorb.msk.ru>
|
||||
Signed-off-by: Antti Palosaari <crope@iki.fi>
|
||||
|
||||
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
---
|
||||
drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 2 ++
|
||||
1 files changed, 2 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
|
||||
index ca54674..39e2d7c 100644
|
||||
--- a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
|
||||
+++ b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
|
||||
@@ -1366,6 +1366,8 @@ static const struct usb_device_id rtl28xxu_id_table[] = {
|
||||
&rtl2832u_props, "TerraTec Cinergy T Stick+", NULL) },
|
||||
{ DVB_USB_DEVICE(USB_VID_KWORLD_2, 0xd3a8,
|
||||
&rtl2832u_props, "ASUS My Cinema-U3100Mini Plus V2", NULL) },
|
||||
+ { DVB_USB_DEVICE(USB_VID_KWORLD_2, 0xd393,
|
||||
+ &rtl2832u_props, "Gigabyte U7300 DVB-T Dongle", NULL) },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, rtl28xxu_id_table);
|
||||
--
|
||||
1.7.2.5
|
||||
|
12181
packages/linux/patches/3.8.13/linux-221-ngene-octopus.patch
vendored
12181
packages/linux/patches/3.8.13/linux-221-ngene-octopus.patch
vendored
File diff suppressed because it is too large
Load Diff
@ -1,62 +0,0 @@
|
||||
diff -Naur linux-3.7.2/drivers/media/dvb-frontends/stb0899_drv.c linux-3.7.2.patch/drivers/media/dvb-frontends/stb0899_drv.c
|
||||
--- linux-3.7.2/drivers/media/dvb-frontends/stb0899_drv.c 2013-01-11 18:19:28.000000000 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/dvb-frontends/stb0899_drv.c 2013-01-16 10:33:10.323380937 +0100
|
||||
@@ -971,6 +971,16 @@
|
||||
|
||||
*strength = stb0899_table_lookup(stb0899_dvbsrf_tab, ARRAY_SIZE(stb0899_dvbsrf_tab) - 1, val);
|
||||
*strength += 750;
|
||||
+
|
||||
+ const int MIN_STRENGTH_DVBS = 0;
|
||||
+ const int MAX_STRENGTH_DVBS = 680;
|
||||
+ if (*strength < MIN_STRENGTH_DVBS)
|
||||
+ *strength = 0;
|
||||
+ else if(*strength > MAX_STRENGTH_DVBS)
|
||||
+ *strength = 0xFFFF;
|
||||
+ else
|
||||
+ *strength = (*strength - MIN_STRENGTH_DVBS) * 0xFFFF / (MAX_STRENGTH_DVBS - MIN_STRENGTH_DVBS);
|
||||
+
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "AGCIQVALUE = 0x%02x, C = %d * 0.1 dBm",
|
||||
val & 0xff, *strength);
|
||||
}
|
||||
@@ -983,6 +993,7 @@
|
||||
|
||||
*strength = stb0899_table_lookup(stb0899_dvbs2rf_tab, ARRAY_SIZE(stb0899_dvbs2rf_tab) - 1, val);
|
||||
*strength += 950;
|
||||
+ *strength = *strength << 4;
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "IF_AGC_GAIN = 0x%04x, C = %d * 0.1 dBm",
|
||||
val & 0x3fff, *strength);
|
||||
}
|
||||
@@ -1016,6 +1027,16 @@
|
||||
val = MAKEWORD16(buf[0], buf[1]);
|
||||
|
||||
*snr = stb0899_table_lookup(stb0899_cn_tab, ARRAY_SIZE(stb0899_cn_tab) - 1, val);
|
||||
+
|
||||
+ const int MIN_SNR_DVBS = 0;
|
||||
+ const int MAX_SNR_DVBS = 200;
|
||||
+ if (*snr < MIN_SNR_DVBS)
|
||||
+ *snr = 0;
|
||||
+ else if(*snr > MAX_SNR_DVBS)
|
||||
+ *snr = 0xFFFF;
|
||||
+ else
|
||||
+ *snr = (*snr - MIN_SNR_DVBS) * 0xFFFF / (MAX_SNR_DVBS - MIN_SNR_DVBS);
|
||||
+
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "NIR = 0x%02x%02x = %u, C/N = %d * 0.1 dBm\n",
|
||||
buf[0], buf[1], val, *snr);
|
||||
}
|
||||
@@ -1040,6 +1061,16 @@
|
||||
val = (quantn - estn) / 10;
|
||||
}
|
||||
*snr = val;
|
||||
+
|
||||
+ const int MIN_SNR_DVBS2 = 10;
|
||||
+ const int MAX_SNR_DVBS2 = 70;
|
||||
+ if (*snr < MIN_SNR_DVBS2)
|
||||
+ *snr = 0;
|
||||
+ else if(*snr > MAX_SNR_DVBS2)
|
||||
+ *snr = 0xFFFF;
|
||||
+ else
|
||||
+ *snr = (*snr - MIN_SNR_DVBS2) * 0xFFFF / (MAX_SNR_DVBS2 - MIN_SNR_DVBS2);
|
||||
+
|
||||
dprintk(state->verbose, FE_DEBUG, 1, "Es/N0 quant = %d (%d) estimate = %u (%d), C/N = %d * 0.1 dBm",
|
||||
quant, quantn, est, estn, val);
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
diff -Naur linux-3.7.9/drivers/media/usb/dvb-usb/pctv452e.c linux-3.7.9.patch/drivers/media/usb/dvb-usb/pctv452e.c
|
||||
--- linux-3.7.9/drivers/media/usb/dvb-usb/pctv452e.c 2013-01-11 18:19:28.000000000 +0100
|
||||
+++ linux-3.7.9.patch/drivers/media/usb/dvb-usb/pctv452e.c 2013-01-16 10:35:01.131342123 +0100
|
||||
@@ -995,11 +995,11 @@
|
||||
/* parameter for the MPEG2-data transfer */
|
||||
.stream = {
|
||||
.type = USB_ISOC,
|
||||
- .count = 7,
|
||||
+ .count = 4,
|
||||
.endpoint = 0x02,
|
||||
.u = {
|
||||
.isoc = {
|
||||
- .framesperurb = 4,
|
||||
+ .framesperurb = 64,
|
||||
.framesize = 940,
|
||||
.interval = 1
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,12 +0,0 @@
|
||||
diff -uNr linux-3.6.4-orig/arch/x86/kernel/tsc.c linux-3.6.4-new/arch/x86/kernel/tsc.c
|
||||
--- linux-3.6.4-orig/arch/x86/kernel/tsc.c 2012-11-03 14:19:55.000000000 +0100
|
||||
+++ linux-3.6.4-new/arch/x86/kernel/tsc.c 2012-11-03 14:23:05.000000000 +0100
|
||||
@@ -374,7 +374,7 @@
|
||||
goto success;
|
||||
}
|
||||
}
|
||||
- pr_err("Fast TSC calibration failed\n");
|
||||
+ pr_info("Fast TSC calibration failed\n");
|
||||
return 0;
|
||||
|
||||
success:
|
File diff suppressed because it is too large
Load Diff
@ -1,76 +0,0 @@
|
||||
From a6024295fd3290a8c9c5519a03316081ee82378a Mon Sep 17 00:00:00 2001
|
||||
From: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
Date: Sat, 16 Feb 2013 17:42:46 +0200
|
||||
Subject: [PATCH] ALSA: hda - Avoid outputting HDMI audio before prepare() and
|
||||
after close()
|
||||
|
||||
Some HDMI codecs (at least NVIDIA 0x10de000b:0x10de0101:0x100100) start
|
||||
transmitting an empty audio stream as soon as PIN_OUT and AC_DIG1_ENABLE
|
||||
are enabled.
|
||||
|
||||
Since commit 6169b673618bf0b2518ce413b54925782a603f06 ("ALSA: hda -
|
||||
Always turn on pins for HDMI/DP") this happens at first open() time, and
|
||||
will continue even after close().
|
||||
|
||||
Additionally, some codecs (at least Intel PantherPoint HDMI) currently
|
||||
continue transmitting HDMI audio even after close() in case some actual
|
||||
audio was output after open() (this happens regardless of PIN_OUT).
|
||||
|
||||
Empty HDMI audio transmission when not intended has the effect that a
|
||||
possible HDMI audio sink/receiver may prefer the empty HDMI audio stream
|
||||
over an actual audio stream on its S/PDIF inputs.
|
||||
|
||||
To avoid the issue before first prepare(), set stream format to 0 on
|
||||
codec initialization. 0 is not a valid format value for HDMI and will
|
||||
prevent the audio stream from being output.
|
||||
|
||||
Additionally, at close() time, make sure that the stream is cleaned up.
|
||||
This will ensure that the format is reset to 0 at that time, preventing
|
||||
audio from being output in that case.
|
||||
|
||||
Thanks to OpenELEC developers and users for their help in investigating
|
||||
this issue on the affected NVIDIA "ION2" hardware. Testing of the final
|
||||
version on NVIDIA ION2 was done by OpenELEC user "MrXIII". Testing on
|
||||
Intel PantherPoint was done by myself.
|
||||
|
||||
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
Cc: stable@vger.kernel.org
|
||||
---
|
||||
sound/pci/hda/patch_hdmi.c | 14 ++++++++++++++
|
||||
1 file changed, 14 insertions(+)
|
||||
|
||||
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
|
||||
index 807a2aa..bcb83c7 100644
|
||||
--- a/sound/pci/hda/patch_hdmi.c
|
||||
+++ b/sound/pci/hda/patch_hdmi.c
|
||||
@@ -1253,6 +1253,14 @@ static int hdmi_add_cvt(struct hda_codec *codec, hda_nid_t cvt_nid)
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
+ /*
|
||||
+ * Some HDMI codecs (at least NVIDIA 0x10de000b:0x10de0101:0x100100)
|
||||
+ * start transmitting an empty audio stream as soon as PIN_OUT and
|
||||
+ * AC_DIG1_ENABLE are enabled, which happens at open() time.
|
||||
+ * To avoid that, set format to 0, which is not valid for HDMI.
|
||||
+ */
|
||||
+ snd_hda_codec_write(codec, cvt_nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
|
||||
+
|
||||
spec->num_cvts++;
|
||||
|
||||
return 0;
|
||||
@@ -1372,6 +1380,12 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo,
|
||||
struct hdmi_spec_per_pin *per_pin;
|
||||
|
||||
if (hinfo->nid) {
|
||||
+ /*
|
||||
+ * Make sure no empty audio is output after this point by
|
||||
+ * setting stream format to 0, which is not valid for HDMI.
|
||||
+ */
|
||||
+ __snd_hda_codec_cleanup_stream(codec, hinfo->nid, 1);
|
||||
+
|
||||
cvt_idx = cvt_nid_to_cvt_index(spec, hinfo->nid);
|
||||
if (snd_BUG_ON(cvt_idx < 0))
|
||||
return -EINVAL;
|
||||
--
|
||||
1.7.10
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,145 +0,0 @@
|
||||
From 3685a8f38f2c54bb6058c0e66ae0562f8ab84e66 Mon Sep 17 00:00:00 2001
|
||||
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Date: Thu, 17 Jan 2013 14:31:28 +0000
|
||||
Subject: drm/i915: Fix RGB color range property for PCH platforms
|
||||
|
||||
The RGB color range select bit on the DP/SDVO/HDMI registers
|
||||
disappeared when PCH was introduced, and instead a new PIPECONF bit
|
||||
was added that performs the same function.
|
||||
|
||||
Add a new INTEL_MODE_LIMITED_COLOR_RANGE private mode flag, and set
|
||||
it in the encoder mode_fixup if limited color range is requested.
|
||||
Set the the PIPECONF bit 13 based on the flag.
|
||||
|
||||
Experimentation showed that simply toggling the bit while the pipe is
|
||||
active doesn't work. We need to restart the pipe, which luckily already
|
||||
happens.
|
||||
|
||||
The DP/SDVO/HDMI bit 8 is marked MBZ in the docs, so avoid setting it,
|
||||
although it doesn't seem to do any harm in practice.
|
||||
|
||||
TODO:
|
||||
- the PIPECONF bit too seems to have disappeared from HSW. Need a
|
||||
volunteer to test if it's just a documentation issue or if it's really
|
||||
gone. If the bit is gone and no easy replacement is found, then I suppose
|
||||
we may need to use the pipe CSC unit to perform the range compression.
|
||||
|
||||
v2: Use mode private_flags instead of intel_encoder virtual functions
|
||||
v3: Moved the intel_dp color_range handling after bpc check to help
|
||||
later patches
|
||||
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=46800
|
||||
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
---
|
||||
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
|
||||
index 4c33bd2..2521617 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_reg.h
|
||||
+++ b/drivers/gpu/drm/i915/i915_reg.h
|
||||
@@ -2650,6 +2650,7 @@
|
||||
#define PIPECONF_INTERLACED_DBL_ILK (4 << 21) /* ilk/snb only */
|
||||
#define PIPECONF_PFIT_PF_INTERLACED_DBL_ILK (5 << 21) /* ilk/snb only */
|
||||
#define PIPECONF_CXSR_DOWNCLOCK (1<<16)
|
||||
+#define PIPECONF_COLOR_RANGE_SELECT (1 << 13)
|
||||
#define PIPECONF_BPP_MASK (0x000000e0)
|
||||
#define PIPECONF_BPP_8 (0<<5)
|
||||
#define PIPECONF_BPP_10 (1<<5)
|
||||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
|
||||
index e4c5067..b35902e 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
||||
@@ -5096,6 +5096,11 @@ static void ironlake_set_pipeconf(struct drm_crtc *crtc,
|
||||
else
|
||||
val |= PIPECONF_PROGRESSIVE;
|
||||
|
||||
+ if (adjusted_mode->private_flags & INTEL_MODE_LIMITED_COLOR_RANGE)
|
||||
+ val |= PIPECONF_COLOR_RANGE_SELECT;
|
||||
+ else
|
||||
+ val &= ~PIPECONF_COLOR_RANGE_SELECT;
|
||||
+
|
||||
I915_WRITE(PIPECONF(pipe), val);
|
||||
POSTING_READ(PIPECONF(pipe));
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
|
||||
index 5f12eb2..d995627 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
||||
@@ -763,6 +763,10 @@ intel_dp_mode_fixup(struct drm_encoder *encoder,
|
||||
return false;
|
||||
|
||||
bpp = adjusted_mode->private_flags & INTEL_MODE_DP_FORCE_6BPC ? 18 : 24;
|
||||
+
|
||||
+ if (intel_dp->color_range)
|
||||
+ adjusted_mode->private_flags |= INTEL_MODE_LIMITED_COLOR_RANGE;
|
||||
+
|
||||
mode_rate = intel_dp_link_required(adjusted_mode->clock, bpp);
|
||||
|
||||
for (clock = 0; clock <= max_clock; clock++) {
|
||||
@@ -967,7 +971,8 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
|
||||
else
|
||||
intel_dp->DP |= DP_PLL_FREQ_270MHZ;
|
||||
} else if (!HAS_PCH_CPT(dev) || is_cpu_edp(intel_dp)) {
|
||||
- intel_dp->DP |= intel_dp->color_range;
|
||||
+ if (!HAS_PCH_SPLIT(dev))
|
||||
+ intel_dp->DP |= intel_dp->color_range;
|
||||
|
||||
if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
|
||||
intel_dp->DP |= DP_SYNC_HS_HIGH;
|
||||
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
|
||||
index 54a034c..4df47be 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_drv.h
|
||||
+++ b/drivers/gpu/drm/i915/intel_drv.h
|
||||
@@ -109,6 +109,11 @@
|
||||
* timings in the mode to prevent the crtc fixup from overwriting them.
|
||||
* Currently only lvds needs that. */
|
||||
#define INTEL_MODE_CRTC_TIMINGS_SET (0x20)
|
||||
+/*
|
||||
+ * Set when limited 16-235 (as opposed to full 0-255) RGB color range is
|
||||
+ * to be used.
|
||||
+ */
|
||||
+#define INTEL_MODE_LIMITED_COLOR_RANGE (0x40)
|
||||
|
||||
static inline void
|
||||
intel_mode_set_pixel_multiplier(struct drm_display_mode *mode,
|
||||
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
|
||||
index 6387f9b..f194d75 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_hdmi.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
|
||||
@@ -766,6 +766,11 @@ bool intel_hdmi_mode_fixup(struct drm_encoder *encoder,
|
||||
const struct drm_display_mode *mode,
|
||||
struct drm_display_mode *adjusted_mode)
|
||||
{
|
||||
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
|
||||
+
|
||||
+ if (intel_hdmi->color_range)
|
||||
+ adjusted_mode->private_flags |= INTEL_MODE_LIMITED_COLOR_RANGE;
|
||||
+
|
||||
return true;
|
||||
}
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
|
||||
index 153377b..3b8491a 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_sdvo.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
|
||||
@@ -1064,6 +1064,9 @@ static bool intel_sdvo_mode_fixup(struct drm_encoder *encoder,
|
||||
multiplier = intel_sdvo_get_pixel_multiplier(adjusted_mode);
|
||||
intel_mode_set_pixel_multiplier(adjusted_mode, multiplier);
|
||||
|
||||
+ if (intel_sdvo->color_range)
|
||||
+ adjusted_mode->private_flags |= INTEL_MODE_LIMITED_COLOR_RANGE;
|
||||
+
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1153,7 +1156,7 @@ static void intel_sdvo_mode_set(struct drm_encoder *encoder,
|
||||
/* The real mode polarity is set by the SDVO commands, using
|
||||
* struct intel_sdvo_dtd. */
|
||||
sdvox = SDVO_VSYNC_ACTIVE_HIGH | SDVO_HSYNC_ACTIVE_HIGH;
|
||||
- if (intel_sdvo->is_hdmi)
|
||||
+ if (!HAS_PCH_SPLIT(dev) && intel_sdvo->is_hdmi)
|
||||
sdvox |= intel_sdvo->color_range;
|
||||
if (INTEL_INFO(dev)->gen < 5)
|
||||
sdvox |= SDVO_BORDER_ENABLE;
|
||||
--
|
||||
cgit v0.9.1
|
@ -26,7 +26,7 @@ PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.freetype.org"
|
||||
PKG_URL="http://download.savannah.gnu.org/releases/freetype/$PKG_NAME-$PKG_VERSION.tar.bz2"
|
||||
PKG_DEPENDS="zlib"
|
||||
PKG_BUILD_DEPENDS="toolchain zlib"
|
||||
PKG_BUILD_DEPENDS="toolchain zlib libpng"
|
||||
PKG_PRIORITY="optional"
|
||||
PKG_SECTION="print"
|
||||
PKG_SHORTDESC="freetype: TrueType font rendering library"
|
||||
|
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="syslinux"
|
||||
PKG_VERSION="5.01"
|
||||
PKG_VERSION="5.10"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="i386 x86_64"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -10,7 +10,7 @@ Section "Device"
|
||||
Option "RegistryDwords" "RMDisableRenderToSysmem=1"
|
||||
# To put Xorg in debug mode change "false" to "true" in the line below:
|
||||
Option "ModeDebug" "false"
|
||||
# To use a local /storage/.config/edid.bin file uncomment the 4 lines below
|
||||
# To use a local /storage/.config/edid.bin file uncomment the 4 lines below:
|
||||
# Option "ConnectedMonitor" "DFP-0"
|
||||
# Option "CustomEDID" "DFP-0:/storage/.config/edid.bin"
|
||||
# Option "IgnoreEDID" "false"
|
||||
@ -24,6 +24,8 @@ Section "Screen"
|
||||
Option "ColorRange" "Full"
|
||||
Option "ColorSpace" "RGB"
|
||||
Option "TVStandard" "HD1080i"
|
||||
# If Component video does not fill the screen uncomment the line below:
|
||||
# Option "TVOverscan" "0.8" # use values from 0.0 (min) to 1.0 (max)
|
||||
Option "MetaModes" "DFP: 1920x1080; DFP: nvidia-auto-select; TV: 1280x720; TV: nvidia-auto-select"
|
||||
SubSection "Display"
|
||||
Depth 24
|
||||
|
Loading…
x
Reference in New Issue
Block a user