mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
linux: remove kernel 3.14 patches and support
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
ee97fefaa8
commit
161d7889e6
@ -22,10 +22,6 @@ case "$LINUX" in
|
||||
PKG_VERSION="cuboxi-592b2d9"
|
||||
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
;;
|
||||
3.14)
|
||||
PKG_VERSION="3.14.6"
|
||||
PKG_URL="http://www.kernel.org/pub/linux/kernel/v3.x/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
;;
|
||||
*)
|
||||
PKG_VERSION="3.15"
|
||||
PKG_URL="http://www.kernel.org/pub/linux/kernel/v3.x/$PKG_NAME-$PKG_VERSION.tar.xz"
|
||||
|
@ -1,21 +0,0 @@
|
||||
diff --git a/init/main.c b/init/main.c
|
||||
index 9484f4b..db55edd 100644
|
||||
--- a/init/main.c
|
||||
+++ b/init/main.c
|
||||
@@ -880,8 +880,14 @@ static noinline void __init kernel_init_freeable(void)
|
||||
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)
|
||||
- pr_err("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);
|
File diff suppressed because it is too large
Load Diff
@ -1,161 +0,0 @@
|
||||
diff -Naur linux-3.9/drivers/hid/hid-core.c linux-3.9.patch/drivers/hid/hid-core.c
|
||||
--- linux-3.9/drivers/hid/hid-core.c 2013-04-29 02:36:01.000000000 +0200
|
||||
+++ linux-3.9.patch/drivers/hid/hid-core.c 2013-04-29 17:08:40.528324010 +0200
|
||||
@@ -1681,6 +1681,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.9/drivers/hid/hid-ids.h linux-3.9.patch/drivers/hid/hid-ids.h
|
||||
--- linux-3.9/drivers/hid/hid-ids.h 2013-04-29 02:36:01.000000000 +0200
|
||||
+++ linux-3.9.patch/drivers/hid/hid-ids.h 2013-04-29 17:08:40.537323981 +0200
|
||||
@@ -663,6 +663,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.9/drivers/hid/hid-spinelplus.c linux-3.9.patch/drivers/hid/hid-spinelplus.c
|
||||
--- linux-3.9/drivers/hid/hid-spinelplus.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ linux-3.9.patch/drivers/hid/hid-spinelplus.c 2013-04-29 17:08:40.537323981 +0200
|
||||
@@ -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.9/drivers/hid/Kconfig linux-3.9.patch/drivers/hid/Kconfig
|
||||
--- linux-3.9/drivers/hid/Kconfig 2013-04-29 02:36:01.000000000 +0200
|
||||
+++ linux-3.9.patch/drivers/hid/Kconfig 2013-04-29 17:08:40.538323977 +0200
|
||||
@@ -602,6 +602,12 @@
|
||||
---help---
|
||||
Support for Steelseries SRW-S1 steering wheel
|
||||
|
||||
+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.9/drivers/hid/Makefile linux-3.9.patch/drivers/hid/Makefile
|
||||
--- linux-3.9/drivers/hid/Makefile 2013-04-29 02:36:01.000000000 +0200
|
||||
+++ linux-3.9.patch/drivers/hid/Makefile 2013-04-29 17:09:26.744173841 +0200
|
||||
@@ -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_STEELSERIES) += hid-steelseries.o
|
||||
obj-$(CONFIG_HID_SUNPLUS) += hid-sunplus.o
|
||||
obj-$(CONFIG_HID_GREENASIA) += hid-gaff.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,21 +0,0 @@
|
||||
diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c
|
||||
index baa1203..fee1f95 100644
|
||||
--- a/drivers/media/rc/mceusb.c
|
||||
+++ b/drivers/media/rc/mceusb.c
|
||||
@@ -200,6 +200,7 @@ static bool debug;
|
||||
#define VENDOR_CONEXANT 0x0572
|
||||
#define VENDOR_TWISTEDMELON 0x2596
|
||||
#define VENDOR_HAUPPAUGE 0x2040
|
||||
+#define VENDOR_ADAPTEC 0x03f3
|
||||
|
||||
enum mceusb_model_type {
|
||||
MCE_GEN2 = 0, /* Most boards */
|
||||
@@ -414,6 +415,8 @@ static struct usb_device_id mceusb_dev_table[] = {
|
||||
/* Hauppauge WINTV-HVR-HVR 930C-HD - based on cx231xx */
|
||||
{ USB_DEVICE(VENDOR_HAUPPAUGE, 0xb130),
|
||||
.driver_info = HAUPPAUGE_CX_HYBRID_TV },
|
||||
+ /* 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 @@
|
||||
Betreff: [RFC] hid/sony: add autorepeat for PS3 remotes
|
||||
Von: David Dillow <dave@thedillows.org>
|
||||
Datum: 28.06.2013 04:28
|
||||
An: linux-input@vger.kernel.org
|
||||
Kopie (CC): Stephan Raue <stephan@openelec.tv>
|
||||
|
||||
Some applications using the PS3 remote would like to have autorepeat
|
||||
from the device. Use the input subsystem's software emulation to provide
|
||||
this capability, and enable those that don't need it to turn it off.
|
||||
---
|
||||
I'm not sure this is the correct approach, or if it is even appropriate
|
||||
for a remote to do autorepeat. However, the media/rc subsystem does do
|
||||
it by default, and it's been requested by users, so there is at least
|
||||
some demand.
|
||||
|
||||
This compiled against the hid-sony driver with the PS3 remote changes
|
||||
merged, but I have done no testing of it. If the approach seems
|
||||
reasonable, I'll try to test it when the MythTV is idle.
|
||||
|
||||
drivers/hid/hid-sony.c | 20 ++++++++++++++++++++
|
||||
1 file changed, 20 insertions(+)
|
||||
|
||||
diff -Naur linux-3.14/drivers/hid/hid-sony.c linux-3.14.patch/drivers/hid/hid-sony.c
|
||||
--- linux-3.14/drivers/hid/hid-sony.c 2014-03-31 05:40:15.000000000 +0200
|
||||
+++ linux-3.14.patch/drivers/hid/hid-sony.c 2014-03-31 11:50:35.755949680 +0200
|
||||
@@ -546,6 +546,24 @@
|
||||
return 1;
|
||||
}
|
||||
|
||||
+static int ps3remote_setup_repeat(struct hid_device *hdev)
|
||||
+{
|
||||
+ struct hid_input *hidinput = list_first_entry(&hdev->inputs,
|
||||
+ struct hid_input, list);
|
||||
+ struct input_dev *input = hidinput->input;
|
||||
+
|
||||
+ /*
|
||||
+ * Set up autorepeat defaults per the remote control subsystem;
|
||||
+ * this must be done after hid_hw_start(), as having these non-zero
|
||||
+ * at the time of input_register_device() tells the input system that
|
||||
+ * the hardware does the autorepeat, and the PS3 remote does not.
|
||||
+ */
|
||||
+ set_bit(EV_REP, input->evbit);
|
||||
+ input->rep[REP_DELAY] = 500;
|
||||
+ input->rep[REP_PERIOD] = 125;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
|
||||
/* Sony Vaio VGX has wrongly mouse pointer declared as constant */
|
||||
static __u8 *sony_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||
@@ -1074,6 +1092,8 @@
|
||||
}
|
||||
else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
|
||||
ret = sixaxis_set_operational_bt(hdev);
|
||||
+ else if (sc->quirks & PS3REMOTE)
|
||||
+ ret = ps3remote_setup_repeat(hdev);
|
||||
else if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) {
|
||||
/* Report 5 (31 bytes) is used to send data to the controller via USB */
|
||||
ret = sony_set_output_report(sc, 0x05, 248);
|
@ -1,38 +0,0 @@
|
||||
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
|
||||
index 61b604f..0ad4515 100644
|
||||
--- a/drivers/hid/hid-core.c
|
||||
+++ b/drivers/hid/hid-core.c
|
||||
@@ -1828,6 +1828,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SKYCABLE, USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER) },
|
||||
+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SONY_PS3_BDREMOTE) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE) },
|
||||
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
|
||||
index 0af8e93..f14b038 100644
|
||||
--- a/drivers/hid/hid-ids.h
|
||||
+++ b/drivers/hid/hid-ids.h
|
||||
@@ -775,6 +775,7 @@
|
||||
#define USB_VENDOR_ID_SKYCABLE 0x1223
|
||||
#define USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER 0x3F07
|
||||
|
||||
+#define USB_VENDOR_ID_SMK 0x0609
|
||||
#define USB_VENDOR_ID_SONY 0x054c
|
||||
#define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE 0x024b
|
||||
#define USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE 0x0374
|
||||
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
|
||||
index 1235405..69e2bf6 100644
|
||||
--- a/drivers/hid/hid-sony.c
|
||||
+++ b/drivers/hid/hid-sony.c
|
||||
@@ -1153,6 +1153,9 @@ static const struct hid_device_id sony_devices[] = {
|
||||
.driver_data = DUALSHOCK4_CONTROLLER_USB },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER),
|
||||
.driver_data = DUALSHOCK4_CONTROLLER_BT },
|
||||
+ /* SMK-Link Universal Remote Control VP3700 */
|
||||
+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SONY_PS3_BDREMOTE),
|
||||
+ .driver_data = PS3REMOTE },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(hid, sony_devices);
|
@ -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.13-rc1/drivers/media/usb/dvb-usb-v2/rtl28xxu.c linux-3.13-rc1.patch/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
|
||||
--- linux-3.13-rc1/drivers/media/usb/dvb-usb-v2/rtl28xxu.c 2013-11-22 20:30:55.000000000 +0100
|
||||
+++ linux-3.13-rc1.patch/drivers/media/usb/dvb-usb-v2/rtl28xxu.c 2013-11-24 19:44:45.617201463 +0100
|
||||
@@ -1427,6 +1427,8 @@
|
||||
&rtl2832u_props, "Leadtek WinFast DTV Dongle mini", NULL) },
|
||||
{ DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_CPYTO_REDI_PC50A,
|
||||
&rtl2832u_props, "Crypto ReDi PC 50 A", NULL) },
|
||||
+ { DVB_USB_DEVICE(USB_VID_GTEK, 0xa803,
|
||||
+ &rtl2832u_props, "Realtek RTL2832U reference design", NULL) },
|
||||
|
||||
{ DVB_USB_DEVICE(USB_VID_HANFTEK, 0x0131,
|
||||
&rtl2832u_props, "Astrometa DVB-T2", NULL) },
|
@ -1,17 +0,0 @@
|
||||
diff --git a/drivers/media/rc/nuvoton-cir.c b/drivers/media/rc/nuvoton-cir.c
|
||||
index b41e52e..b81325d 100644
|
||||
--- a/drivers/media/rc/nuvoton-cir.c
|
||||
+++ b/drivers/media/rc/nuvoton-cir.c
|
||||
@@ -985,6 +985,12 @@ static int nvt_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id)
|
||||
goto exit_free_dev_rdev;
|
||||
|
||||
ret = -ENODEV;
|
||||
+ /* activate pnp device */
|
||||
+ if (pnp_activate_dev(pdev) < 0) {
|
||||
+ dev_err(&pdev->dev, "Could not activate PNP device!\n");
|
||||
+ goto exit_free_dev_rdev;
|
||||
+ }
|
||||
+
|
||||
/* validate pnp resources */
|
||||
if (!pnp_port_valid(pdev, 0) ||
|
||||
pnp_port_len(pdev, 0) < CIR_IOREG_LENGTH) {
|
@ -1,138 +0,0 @@
|
||||
From cb171f7abb9a1a250fb41d088b81799f75bd1357 Mon Sep 17 00:00:00 2001
|
||||
From: Bjorn Helgaas <bhelgaas@google.com>
|
||||
Date: Wed, 23 Apr 2014 10:21:06 -0600
|
||||
Subject: PNP: Work around BIOS defects in Intel MCH area reporting
|
||||
|
||||
Work around BIOSes that don't report the entire Intel MCH area.
|
||||
|
||||
MCHBAR is not an architected PCI BAR, so MCH space is usually reported as a
|
||||
PNP0C02 resource. The MCH space was once 16KB, but is 32KB in newer parts.
|
||||
Some BIOSes still report a PNP0C02 resource that is only 16KB, which means
|
||||
the rest of the MCH space is consumed but unreported.
|
||||
|
||||
This can cause resource map sanity check warnings or (theoretically) a
|
||||
device conflict if we assigned the unreported space to another device.
|
||||
|
||||
The Intel perf event uncore driver tripped over this when it claimed the
|
||||
MCH region:
|
||||
|
||||
resource map sanity check conflict: 0xfed10000 0xfed15fff 0xfed10000 0xfed13fff pnp 00:01
|
||||
Info: mapping multiple BARs. Your kernel is fine.
|
||||
|
||||
To prevent this, if we find a PNP0C02 resource that covers part of the MCH
|
||||
space, extend it to cover the entire space.
|
||||
|
||||
References: http://lkml.kernel.org/r/20140224162400.GE16457@pd.tnic
|
||||
Reported-and-tested-by: Borislav Petkov <bp@alien8.de>
|
||||
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
|
||||
Acked-by: Borislav Petkov <bp@suse.de>
|
||||
Acked-by: Stephane Eranian <eranian@google.com>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
|
||||
diff --git a/drivers/pnp/quirks.c b/drivers/pnp/quirks.c
|
||||
index 258fef2..3736bc4 100644
|
||||
--- a/drivers/pnp/quirks.c
|
||||
+++ b/drivers/pnp/quirks.c
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
+#include <linux/pci.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/pnp.h>
|
||||
@@ -334,6 +335,81 @@ static void quirk_amd_mmconfig_area(struct pnp_dev *dev)
|
||||
}
|
||||
#endif
|
||||
|
||||
+#ifdef CONFIG_X86
|
||||
+/* Device IDs of parts that have 32KB MCH space */
|
||||
+static const unsigned int mch_quirk_devices[] = {
|
||||
+ 0x0154, /* Ivy Bridge */
|
||||
+ 0x0c00, /* Haswell */
|
||||
+};
|
||||
+
|
||||
+static struct pci_dev *get_intel_host(void)
|
||||
+{
|
||||
+ int i;
|
||||
+ struct pci_dev *host;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(mch_quirk_devices); i++) {
|
||||
+ host = pci_get_device(PCI_VENDOR_ID_INTEL, mch_quirk_devices[i],
|
||||
+ NULL);
|
||||
+ if (host)
|
||||
+ return host;
|
||||
+ }
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static void quirk_intel_mch(struct pnp_dev *dev)
|
||||
+{
|
||||
+ struct pci_dev *host;
|
||||
+ u32 addr_lo, addr_hi;
|
||||
+ struct pci_bus_region region;
|
||||
+ struct resource mch;
|
||||
+ struct pnp_resource *pnp_res;
|
||||
+ struct resource *res;
|
||||
+
|
||||
+ host = get_intel_host();
|
||||
+ if (!host)
|
||||
+ return;
|
||||
+
|
||||
+ /*
|
||||
+ * MCHBAR is not an architected PCI BAR, so MCH space is usually
|
||||
+ * reported as a PNP0C02 resource. The MCH space was originally
|
||||
+ * 16KB, but is 32KB in newer parts. Some BIOSes still report a
|
||||
+ * PNP0C02 resource that is only 16KB, which means the rest of the
|
||||
+ * MCH space is consumed but unreported.
|
||||
+ */
|
||||
+
|
||||
+ /*
|
||||
+ * Read MCHBAR for Host Member Mapped Register Range Base
|
||||
+ * https://www-ssl.intel.com/content/www/us/en/processors/core/4th-gen-core-family-desktop-vol-2-datasheet
|
||||
+ * Sec 3.1.12.
|
||||
+ */
|
||||
+ pci_read_config_dword(host, 0x48, &addr_lo);
|
||||
+ region.start = addr_lo & ~0x7fff;
|
||||
+ pci_read_config_dword(host, 0x4c, &addr_hi);
|
||||
+ region.start |= (u64) addr_hi << 32;
|
||||
+ region.end = region.start + 32*1024 - 1;
|
||||
+
|
||||
+ memset(&mch, 0, sizeof(mch));
|
||||
+ mch.flags = IORESOURCE_MEM;
|
||||
+ pcibios_bus_to_resource(host->bus, &mch, ®ion);
|
||||
+
|
||||
+ list_for_each_entry(pnp_res, &dev->resources, list) {
|
||||
+ res = &pnp_res->res;
|
||||
+ if (res->end < mch.start || res->start > mch.end)
|
||||
+ continue; /* no overlap */
|
||||
+ if (res->start == mch.start && res->end == mch.end)
|
||||
+ continue; /* exact match */
|
||||
+
|
||||
+ dev_info(&dev->dev, FW_BUG "PNP resource %pR covers only part of %s Intel MCH; extending to %pR\n",
|
||||
+ res, pci_name(host), &mch);
|
||||
+ res->start = mch.start;
|
||||
+ res->end = mch.end;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ pci_dev_put(host);
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* PnP Quirks
|
||||
* Cards or devices that need some tweaking due to incomplete resource info
|
||||
@@ -364,6 +440,9 @@ static struct pnp_fixup pnp_fixups[] = {
|
||||
#ifdef CONFIG_AMD_NB
|
||||
{"PNP0c01", quirk_amd_mmconfig_area},
|
||||
#endif
|
||||
+#ifdef CONFIG_X86
|
||||
+ {"PNP0c02", quirk_intel_mch},
|
||||
+#endif
|
||||
{""}
|
||||
};
|
||||
|
||||
--
|
||||
cgit v0.10.1
|
||||
|
@ -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 |
|
6132
packages/linux/patches/3.14.6/linux-210-dvbsky.patch
vendored
6132
packages/linux/patches/3.14.6/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);
|
||||
|
26356
packages/linux/patches/3.14.6/linux-221-ngene-octopus.patch
vendored
26356
packages/linux/patches/3.14.6/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
|
||||
}
|
@ -1,97 +0,0 @@
|
||||
diff --git a/drivers/media/dvb-frontends/cxd2820r.h b/drivers/media/dvb-frontends/cxd2820r.h
|
||||
index 82b3d93..6095dbc 100644
|
||||
--- a/drivers/media/dvb-frontends/cxd2820r.h
|
||||
+++ b/drivers/media/dvb-frontends/cxd2820r.h
|
||||
@@ -52,6 +52,12 @@ struct cxd2820r_config {
|
||||
*/
|
||||
u8 ts_mode;
|
||||
|
||||
+ /* TS clock inverted.
|
||||
+ * Default: 0
|
||||
+ * Values: 0, 1
|
||||
+ */
|
||||
+ bool ts_clock_inv;
|
||||
+
|
||||
/* IF AGC polarity.
|
||||
* Default: 0
|
||||
* Values: 0, 1
|
||||
diff --git a/drivers/media/dvb-frontends/cxd2820r_c.c b/drivers/media/dvb-frontends/cxd2820r_c.c
|
||||
index 5c6ab49..0f4657e 100644
|
||||
--- a/drivers/media/dvb-frontends/cxd2820r_c.c
|
||||
+++ b/drivers/media/dvb-frontends/cxd2820r_c.c
|
||||
@@ -45,6 +45,7 @@ int cxd2820r_set_frontend_c(struct dvb_frontend *fe)
|
||||
{ 0x1008b, 0x07, 0xff },
|
||||
{ 0x1001f, priv->cfg.if_agc_polarity << 7, 0x80 },
|
||||
{ 0x10070, priv->cfg.ts_mode, 0xff },
|
||||
+ { 0x10071, !priv->cfg.ts_clock_inv << 4, 0x10 },
|
||||
};
|
||||
|
||||
dev_dbg(&priv->i2c->dev, "%s: frequency=%d symbol_rate=%d\n", __func__,
|
||||
diff --git a/drivers/media/dvb-frontends/cxd2820r_t.c b/drivers/media/dvb-frontends/cxd2820r_t.c
|
||||
index fa184ca..9b5a45b 100644
|
||||
--- a/drivers/media/dvb-frontends/cxd2820r_t.c
|
||||
+++ b/drivers/media/dvb-frontends/cxd2820r_t.c
|
||||
@@ -46,6 +46,7 @@ int cxd2820r_set_frontend_t(struct dvb_frontend *fe)
|
||||
{ 0x00088, 0x01, 0xff },
|
||||
|
||||
{ 0x00070, priv->cfg.ts_mode, 0xff },
|
||||
+ { 0x00071, !priv->cfg.ts_clock_inv << 4, 0x10 },
|
||||
{ 0x000cb, priv->cfg.if_agc_polarity << 6, 0x40 },
|
||||
{ 0x000a5, 0x00, 0x01 },
|
||||
{ 0x00082, 0x20, 0x60 },
|
||||
diff --git a/drivers/media/dvb-frontends/cxd2820r_t2.c b/drivers/media/dvb-frontends/cxd2820r_t2.c
|
||||
index 2ba130e..9c0c4f4 100644
|
||||
--- a/drivers/media/dvb-frontends/cxd2820r_t2.c
|
||||
+++ b/drivers/media/dvb-frontends/cxd2820r_t2.c
|
||||
@@ -47,6 +47,7 @@ int cxd2820r_set_frontend_t2(struct dvb_frontend *fe)
|
||||
{ 0x02083, 0x0a, 0xff },
|
||||
{ 0x020cb, priv->cfg.if_agc_polarity << 6, 0x40 },
|
||||
{ 0x02070, priv->cfg.ts_mode, 0xff },
|
||||
+ { 0x02071, !priv->cfg.ts_clock_inv << 6, 0x40 },
|
||||
{ 0x020b5, priv->cfg.spec_inv << 4, 0x10 },
|
||||
{ 0x02567, 0x07, 0x0f },
|
||||
{ 0x02569, 0x03, 0x03 },
|
||||
diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c
|
||||
index ae0f56a..7135a3e 100644
|
||||
--- a/drivers/media/usb/dvb-usb/dw2102.c
|
||||
+++ b/drivers/media/usb/dvb-usb/dw2102.c
|
||||
@@ -1109,6 +1109,7 @@ static struct ds3000_config su3000_ds3000_config = {
|
||||
static struct cxd2820r_config cxd2820r_config = {
|
||||
.i2c_address = 0x6c, /* (0xd8 >> 1) */
|
||||
.ts_mode = 0x38,
|
||||
+ .ts_clock_inv = 1,
|
||||
};
|
||||
|
||||
static struct tda18271_config tda18271_config = {
|
||||
@@ -1387,20 +1388,27 @@ static int su3000_frontend_attach(struct dvb_usb_adapter *d)
|
||||
|
||||
static int t220_frontend_attach(struct dvb_usb_adapter *d)
|
||||
{
|
||||
- u8 obuf[3] = { 0xe, 0x80, 0 };
|
||||
+ u8 obuf[3] = { 0xe, 0x87, 0 };
|
||||
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] = 0x83;
|
||||
+ obuf[1] = 0x86;
|
||||
+ obuf[2] = 1;
|
||||
+
|
||||
+ if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0)
|
||||
+ err("command 0x0e transfer failed.");
|
||||
+
|
||||
+ obuf[0] = 0xe;
|
||||
+ obuf[1] = 0x80;
|
||||
obuf[2] = 0;
|
||||
|
||||
if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0)
|
||||
err("command 0x0e transfer failed.");
|
||||
|
||||
- msleep(100);
|
||||
+ msleep(50);
|
||||
|
||||
obuf[0] = 0xe;
|
||||
obuf[1] = 0x80;
|
||||
|
@ -1,21 +0,0 @@
|
||||
--- a/drivers/net/wireless/brcm80211/brcmfmac/usb.c 2013-07-21 16:06:37.443909481 +0200
|
||||
+++ b/drivers/net/wireless/brcm80211/brcmfmac/usb.c 2013-07-21 16:11:10.696335476 +0200
|
||||
@@ -1470,15 +1470,18 @@
|
||||
}
|
||||
|
||||
#define BRCMF_USB_VENDOR_ID_BROADCOM 0x0a5c
|
||||
+#define BRCMF_USB_VENDOR_ID_LINKSYS 0x13b1
|
||||
#define BRCMF_USB_DEVICE_ID_43143 0xbd1e
|
||||
#define BRCMF_USB_DEVICE_ID_43236 0xbd17
|
||||
#define BRCMF_USB_DEVICE_ID_43242 0xbd1f
|
||||
+#define BRCMF_USB_DEVICE_ID_AE2500 0x003a
|
||||
#define BRCMF_USB_DEVICE_ID_BCMFW 0x0bdc
|
||||
|
||||
static struct usb_device_id brcmf_usb_devid_table[] = {
|
||||
{ USB_DEVICE(BRCMF_USB_VENDOR_ID_BROADCOM, BRCMF_USB_DEVICE_ID_43143) },
|
||||
{ USB_DEVICE(BRCMF_USB_VENDOR_ID_BROADCOM, BRCMF_USB_DEVICE_ID_43236) },
|
||||
{ USB_DEVICE(BRCMF_USB_VENDOR_ID_BROADCOM, BRCMF_USB_DEVICE_ID_43242) },
|
||||
+ { USB_DEVICE(BRCMF_USB_VENDOR_ID_LINKSYS, BRCMF_USB_DEVICE_ID_AE2500) },
|
||||
/* special entry for device with firmware loaded and running */
|
||||
{ USB_DEVICE(BRCMF_USB_VENDOR_ID_BROADCOM, BRCMF_USB_DEVICE_ID_BCMFW) },
|
||||
{ }
|
@ -1,11 +0,0 @@
|
||||
--- linux-3.9.2/drivers/net/ethernet/broadcom/tg3.c 2013-05-11 18:19:28.000000000 +0400
|
||||
+++ linux-3.9.2/drivers/net/ethernet/broadcom/tg3.c 2013-05-25 20:55:00.282972605 +0400
|
||||
@@ -333,6 +333,8 @@
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)},
|
||||
+ {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)},
|
||||
+ {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)},
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)},
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)},
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)},
|
@ -1,28 +0,0 @@
|
||||
From 62330f8f9b6105bfe201f52b7ed86ea6ce3d5901 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Sun, 8 Sep 2013 10:33:51 +0100
|
||||
Subject: [PATCH] Add Ubiquiti WifiStation USB id to ath9k wifi driver
|
||||
|
||||
---
|
||||
drivers/net/wireless/ath/ath9k/hif_usb.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
|
||||
index 75a6376..8cb8d8d 100644
|
||||
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
|
||||
@@ -37,9 +37,11 @@
|
||||
{ USB_DEVICE(0x13D3, 0x3350) }, /* Azurewave */
|
||||
{ USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */
|
||||
{ USB_DEVICE(0x040D, 0x3801) }, /* VIA */
|
||||
+ { USB_DEVICE(0x0cf3, 0xb002) }, /* Ubiquiti WifiStation */
|
||||
{ USB_DEVICE(0x0cf3, 0xb003) }, /* Ubiquiti WifiStation Ext */
|
||||
{ USB_DEVICE(0x0cf3, 0xb002) }, /* Ubiquiti WifiStation */
|
||||
{ USB_DEVICE(0x057c, 0x8403) }, /* AVM FRITZ!WLAN 11N v2 USB */
|
||||
+ { USB_DEVICE(0x057c, 0x8403) }, /* AVM FRITZ!WLAN 11N v2 USB */
|
||||
|
||||
{ USB_DEVICE(0x0cf3, 0x7015),
|
||||
.driver_info = AR9287_USB }, /* Atheros */
|
||||
--
|
||||
1.8.4
|
||||
|
@ -1,10 +0,0 @@
|
||||
--- a/drivers/net/wireless/rt2x00/rt2800usb.c 2013-10-08 15:14:44.844047190 +0200
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c 2013-10-08 15:15:00.279904575 +0200
|
||||
@@ -976,6 +976,7 @@
|
||||
{ USB_DEVICE(0x0411, 0x015d) },
|
||||
{ USB_DEVICE(0x0411, 0x016f) },
|
||||
{ USB_DEVICE(0x0411, 0x01a2) },
|
||||
+ { USB_DEVICE(0x0411, 0x01a8) },
|
||||
{ USB_DEVICE(0x0411, 0x01ee) },
|
||||
/* Corega */
|
||||
{ USB_DEVICE(0x07aa, 0x002f) },
|
@ -1,11 +0,0 @@
|
||||
diff -Naur linux-3.10.16/drivers/staging/rtl8712/usb_intf.c linux-3.10.16.patch/drivers/staging/rtl8712/usb_intf.c
|
||||
--- linux-3.10.16/drivers/staging/rtl8712/usb_intf.c 2013-10-14 01:08:56.000000000 +0200
|
||||
+++ linux-3.10.16.patch/drivers/staging/rtl8712/usb_intf.c 2013-10-16 13:27:44.032951265 +0200
|
||||
@@ -92,6 +92,7 @@
|
||||
{USB_DEVICE(0x0DF6, 0x005B)},
|
||||
{USB_DEVICE(0x0DF6, 0x005D)},
|
||||
{USB_DEVICE(0x0DF6, 0x0063)},
|
||||
+ {USB_DEVICE(0x0DF6, 0x006C)},
|
||||
/* Sweex */
|
||||
{USB_DEVICE(0x177F, 0x0154)},
|
||||
/* Thinkware */
|
@ -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,78 +0,0 @@
|
||||
commit aad0b407edfef6e2527a9bb877ce754e1efb7b10
|
||||
Author: Stefan Saraev <stefan@saraev.ca>
|
||||
Date: Mon Jul 1 13:06:10 2013 +0300
|
||||
|
||||
ALSA: hda - Avoid outputting HDMI audio before prepare() and after close()
|
||||
|
||||
adapted to 3.10
|
||||
|
||||
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
|
||||
|
||||
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
|
||||
index e12f7a0..9bfdd51 100644
|
||||
--- a/sound/pci/hda/patch_hdmi.c
|
||||
+++ b/sound/pci/hda/patch_hdmi.c
|
||||
@@ -1360,6 +1360,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);
|
||||
+
|
||||
if (spec->num_cvts < ARRAY_SIZE(spec->cvt_nids))
|
||||
spec->cvt_nids[spec->num_cvts] = cvt_nid;
|
||||
spec->num_cvts++;
|
||||
@@ -1474,6 +1482,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,17 +0,0 @@
|
||||
diff -Naur linux-3.10.10/include/uapi/linux/ptrace.h linux-3.10.10.patch/include/uapi/linux/ptrace.h
|
||||
--- linux-3.10.10/include/uapi/linux/ptrace.h 2013-08-29 18:47:51.000000000 +0200
|
||||
+++ linux-3.10.10.patch/include/uapi/linux/ptrace.h 2013-09-04 16:38:10.182685149 +0200
|
||||
@@ -55,11 +55,13 @@
|
||||
|
||||
#define PTRACE_PEEKSIGINFO 0x4209
|
||||
|
||||
+#ifdef __KERNEL__
|
||||
struct ptrace_peeksiginfo_args {
|
||||
__u64 off; /* from which siginfo to start */
|
||||
__u32 flags;
|
||||
__s32 nr; /* how may siginfos to take */
|
||||
};
|
||||
+#endif /* __KERNEL__ */
|
||||
|
||||
/* Read signals from a shared (process wide) queue */
|
||||
#define PTRACE_PEEKSIGINFO_SHARED (1 << 0)
|
File diff suppressed because it is too large
Load Diff
@ -1,25 +0,0 @@
|
||||
From c314d9af9d774c052bea324e1a140ccdba0ca070 Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Saraev <stefan@saraev.ca>
|
||||
Date: Tue, 8 Apr 2014 14:02:53 +0300
|
||||
Subject: [PATCH] pm: disable async suspend/resume by default
|
||||
|
||||
---
|
||||
kernel/power/main.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/kernel/power/main.c b/kernel/power/main.c
|
||||
index 1d1bf63..361db93 100644
|
||||
--- a/kernel/power/main.c
|
||||
+++ b/kernel/power/main.c
|
||||
@@ -46,7 +46,7 @@ int pm_notifier_call_chain(unsigned long val)
|
||||
}
|
||||
|
||||
/* If set, devices may be suspended and resumed asynchronously. */
|
||||
-int pm_async_enabled = 1;
|
||||
+int pm_async_enabled = 0;
|
||||
|
||||
static ssize_t pm_async_show(struct kobject *kobj, struct kobj_attribute *attr,
|
||||
char *buf)
|
||||
--
|
||||
1.7.2.5
|
||||
|
@ -1,92 +0,0 @@
|
||||
--- linux-3.14.1/drivers/media/rc/mceusb.c 2014-04-09 12:37:46.510492000 -0500
|
||||
+++ linux-3.14.1/drivers/media/rc/mceusb.c 2014-04-23 17:58:17.224854949 -0500
|
||||
@@ -761,11 +761,18 @@ static void mce_request_packet(struct mc
|
||||
}
|
||||
|
||||
/* outbound data */
|
||||
- pipe = usb_sndintpipe(ir->usbdev,
|
||||
- ir->usb_ep_out->bEndpointAddress);
|
||||
- usb_fill_int_urb(async_urb, ir->usbdev, pipe,
|
||||
- async_buf, size, mce_async_callback,
|
||||
- ir, ir->usb_ep_out->bInterval);
|
||||
+ if (usb_endpoint_xfer_int(ir->usb_ep_out)) {
|
||||
+ pipe = usb_sndintpipe(ir->usbdev,
|
||||
+ ir->usb_ep_out->bEndpointAddress);
|
||||
+ usb_fill_int_urb(async_urb, ir->usbdev, pipe, async_buf,
|
||||
+ size, mce_async_callback, ir,
|
||||
+ ir->usb_ep_out->bInterval);
|
||||
+ } else {
|
||||
+ pipe = usb_sndbulkpipe(ir->usbdev,
|
||||
+ ir->usb_ep_out->bEndpointAddress);
|
||||
+ usb_fill_bulk_urb(async_urb, ir->usbdev, pipe, async_buf,
|
||||
+ size, mce_async_callback, ir);
|
||||
+ }
|
||||
memcpy(async_buf, data, size);
|
||||
|
||||
} else if (urb_type == MCEUSB_RX) {
|
||||
@@ -1283,34 +1290,26 @@ static int mceusb_dev_probe(struct usb_i
|
||||
for (i = 0; i < idesc->desc.bNumEndpoints; ++i) {
|
||||
ep = &idesc->endpoint[i].desc;
|
||||
|
||||
- if ((ep_in == NULL)
|
||||
- && ((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
|
||||
- == USB_DIR_IN)
|
||||
- && (((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
|
||||
- == USB_ENDPOINT_XFER_BULK)
|
||||
- || ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
|
||||
- == USB_ENDPOINT_XFER_INT))) {
|
||||
-
|
||||
- ep_in = ep;
|
||||
- ep_in->bmAttributes = USB_ENDPOINT_XFER_INT;
|
||||
- ep_in->bInterval = 1;
|
||||
- mce_dbg(&intf->dev, "acceptable inbound endpoint "
|
||||
- "found\n");
|
||||
+ if (ep_in == NULL) {
|
||||
+ if (usb_endpoint_is_bulk_in(ep)) {
|
||||
+ ep_in = ep;
|
||||
+ mce_dbg(&intf->dev, "acceptable bulk inbound endpoint found\n");
|
||||
+ } else if (usb_endpoint_is_int_in(ep)) {
|
||||
+ ep_in = ep;
|
||||
+ ep_in->bInterval = 1;
|
||||
+ mce_dbg(&intf->dev, "acceptable interrupt inbound endpoint found\n");
|
||||
+ }
|
||||
}
|
||||
|
||||
- if ((ep_out == NULL)
|
||||
- && ((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
|
||||
- == USB_DIR_OUT)
|
||||
- && (((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
|
||||
- == USB_ENDPOINT_XFER_BULK)
|
||||
- || ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
|
||||
- == USB_ENDPOINT_XFER_INT))) {
|
||||
-
|
||||
- ep_out = ep;
|
||||
- ep_out->bmAttributes = USB_ENDPOINT_XFER_INT;
|
||||
- ep_out->bInterval = 1;
|
||||
- mce_dbg(&intf->dev, "acceptable outbound endpoint "
|
||||
- "found\n");
|
||||
+ if (ep_out == NULL) {
|
||||
+ if (usb_endpoint_is_bulk_out(ep)) {
|
||||
+ ep_out = ep;
|
||||
+ mce_dbg(&intf->dev, "acceptable bulk outbound endpoint found\n");
|
||||
+ } else if (usb_endpoint_is_int_out(ep)) {
|
||||
+ ep_out = ep;
|
||||
+ ep_out->bInterval = 1;
|
||||
+ mce_dbg(&intf->dev, "acceptable interrupt outbound endpoint found\n");
|
||||
+ }
|
||||
}
|
||||
}
|
||||
if (ep_in == NULL) {
|
||||
@@ -1318,7 +1317,11 @@ static int mceusb_dev_probe(struct usb_i
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
- pipe = usb_rcvintpipe(dev, ep_in->bEndpointAddress);
|
||||
+ if (usb_endpoint_xfer_int(ep_in)) {
|
||||
+ pipe = usb_rcvintpipe(dev, ep_in->bEndpointAddress);
|
||||
+ } else {
|
||||
+ pipe = usb_rcvbulkpipe(dev, ep_in->bEndpointAddress);
|
||||
+ }
|
||||
maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
|
||||
|
||||
ir = kzalloc(sizeof(struct mceusb_dev), GFP_KERNEL);
|
@ -1,599 +0,0 @@
|
||||
From 709b25580e01df28a97152a81010ce40f06ec01e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
|
||||
Date: Fri, 28 Mar 2014 18:55:10 +0100
|
||||
Subject: [PATCH 1/6] drm/radeon: rework finding display PLL numbers v2
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This completely reworks how the PLL parameters are generated and
|
||||
should result in better matching dot clock frequencies.
|
||||
|
||||
Probably needs quite a bit of testing.
|
||||
|
||||
bugs: https://bugs.freedesktop.org/show_bug.cgi?id=76564
|
||||
|
||||
v2: more cleanup and comments.
|
||||
|
||||
Signed-off-by: Christian König <christian.koenig@amd.com>
|
||||
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/radeon_display.c | 243 ++++++++++++++++++++------------
|
||||
1 file changed, 153 insertions(+), 90 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
|
||||
index fbd8b93..4e83ffd 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_display.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_display.c
|
||||
@@ -34,6 +34,8 @@
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
|
||||
+#include <linux/gcd.h>
|
||||
+
|
||||
static void avivo_crtc_load_lut(struct drm_crtc *crtc)
|
||||
{
|
||||
struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
|
||||
@@ -799,66 +801,57 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
|
||||
}
|
||||
|
||||
/* avivo */
|
||||
-static void avivo_get_fb_div(struct radeon_pll *pll,
|
||||
- u32 target_clock,
|
||||
- u32 post_div,
|
||||
- u32 ref_div,
|
||||
- u32 *fb_div,
|
||||
- u32 *frac_fb_div)
|
||||
-{
|
||||
- u32 tmp = post_div * ref_div;
|
||||
|
||||
- tmp *= target_clock;
|
||||
- *fb_div = tmp / pll->reference_freq;
|
||||
- *frac_fb_div = tmp % pll->reference_freq;
|
||||
-
|
||||
- if (*fb_div > pll->max_feedback_div)
|
||||
- *fb_div = pll->max_feedback_div;
|
||||
- else if (*fb_div < pll->min_feedback_div)
|
||||
- *fb_div = pll->min_feedback_div;
|
||||
-}
|
||||
-
|
||||
-static u32 avivo_get_post_div(struct radeon_pll *pll,
|
||||
- u32 target_clock)
|
||||
+/**
|
||||
+ * avivo_reduce_ratio - fractional number reduction
|
||||
+ *
|
||||
+ * @nom: nominator
|
||||
+ * @den: denominator
|
||||
+ * @nom_min: minimum value for nominator
|
||||
+ * @den_min: minimum value for denominator
|
||||
+ *
|
||||
+ * Find the greatest common divisor and apply it on both nominator and
|
||||
+ * denominator, but make nominator and denominator are at least as large
|
||||
+ * as their minimum values.
|
||||
+ */
|
||||
+static void avivo_reduce_ratio(unsigned *nom, unsigned *den,
|
||||
+ unsigned nom_min, unsigned den_min)
|
||||
{
|
||||
- u32 vco, post_div, tmp;
|
||||
-
|
||||
- if (pll->flags & RADEON_PLL_USE_POST_DIV)
|
||||
- return pll->post_div;
|
||||
-
|
||||
- if (pll->flags & RADEON_PLL_PREFER_MINM_OVER_MAXP) {
|
||||
- if (pll->flags & RADEON_PLL_IS_LCD)
|
||||
- vco = pll->lcd_pll_out_min;
|
||||
- else
|
||||
- vco = pll->pll_out_min;
|
||||
- } else {
|
||||
- if (pll->flags & RADEON_PLL_IS_LCD)
|
||||
- vco = pll->lcd_pll_out_max;
|
||||
- else
|
||||
- vco = pll->pll_out_max;
|
||||
+ unsigned tmp;
|
||||
+
|
||||
+ /* reduce the numbers to a simpler ratio */
|
||||
+ tmp = gcd(*nom, *den);
|
||||
+ *nom /= tmp;
|
||||
+ *den /= tmp;
|
||||
+
|
||||
+ /* make sure nominator is large enough */
|
||||
+ if (*nom < nom_min) {
|
||||
+ tmp = (nom_min + *nom - 1) / *nom;
|
||||
+ *nom *= tmp;
|
||||
+ *den *= tmp;
|
||||
}
|
||||
|
||||
- post_div = vco / target_clock;
|
||||
- tmp = vco % target_clock;
|
||||
-
|
||||
- if (pll->flags & RADEON_PLL_PREFER_MINM_OVER_MAXP) {
|
||||
- if (tmp)
|
||||
- post_div++;
|
||||
- } else {
|
||||
- if (!tmp)
|
||||
- post_div--;
|
||||
+ /* make sure the denominator is large enough */
|
||||
+ if (*den < den_min) {
|
||||
+ tmp = (den_min + *den - 1) / *den;
|
||||
+ *nom *= tmp;
|
||||
+ *den *= tmp;
|
||||
}
|
||||
-
|
||||
- if (post_div > pll->max_post_div)
|
||||
- post_div = pll->max_post_div;
|
||||
- else if (post_div < pll->min_post_div)
|
||||
- post_div = pll->min_post_div;
|
||||
-
|
||||
- return post_div;
|
||||
}
|
||||
|
||||
-#define MAX_TOLERANCE 10
|
||||
-
|
||||
+/**
|
||||
+ * radeon_compute_pll_avivo - compute PLL paramaters
|
||||
+ *
|
||||
+ * @pll: information about the PLL
|
||||
+ * @dot_clock_p: resulting pixel clock
|
||||
+ * fb_div_p: resulting feedback divider
|
||||
+ * frac_fb_div_p: fractional part of the feedback divider
|
||||
+ * ref_div_p: resulting reference divider
|
||||
+ * post_div_p: resulting reference divider
|
||||
+ *
|
||||
+ * Try to calculate the PLL parameters to generate the given frequency:
|
||||
+ * dot_clock = (ref_freq * feedback_div) / (ref_div * post_div)
|
||||
+ */
|
||||
void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
u32 freq,
|
||||
u32 *dot_clock_p,
|
||||
@@ -867,53 +860,123 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
u32 *ref_div_p,
|
||||
u32 *post_div_p)
|
||||
{
|
||||
- u32 target_clock = freq / 10;
|
||||
- u32 post_div = avivo_get_post_div(pll, target_clock);
|
||||
- u32 ref_div = pll->min_ref_div;
|
||||
- u32 fb_div = 0, frac_fb_div = 0, tmp;
|
||||
+ unsigned fb_div_min, fb_div_max, fb_div;
|
||||
+ unsigned post_div_min, post_div_max, post_div;
|
||||
+ unsigned ref_div_min, ref_div_max, ref_div;
|
||||
+ unsigned post_div_best, diff_best;
|
||||
+ unsigned nom, den, tmp;
|
||||
|
||||
- if (pll->flags & RADEON_PLL_USE_REF_DIV)
|
||||
- ref_div = pll->reference_div;
|
||||
+ /* determine allowed feedback divider range */
|
||||
+ fb_div_min = pll->min_feedback_div;
|
||||
+ fb_div_max = pll->max_feedback_div;
|
||||
|
||||
if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV) {
|
||||
- avivo_get_fb_div(pll, target_clock, post_div, ref_div, &fb_div, &frac_fb_div);
|
||||
- frac_fb_div = (100 * frac_fb_div) / pll->reference_freq;
|
||||
- if (frac_fb_div >= 5) {
|
||||
- frac_fb_div -= 5;
|
||||
- frac_fb_div = frac_fb_div / 10;
|
||||
- frac_fb_div++;
|
||||
+ fb_div_min *= 10;
|
||||
+ fb_div_max *= 10;
|
||||
+ }
|
||||
+
|
||||
+ /* determine allowed ref divider range */
|
||||
+ if (pll->flags & RADEON_PLL_USE_REF_DIV)
|
||||
+ ref_div_min = pll->reference_div;
|
||||
+ else
|
||||
+ ref_div_min = pll->min_ref_div;
|
||||
+ ref_div_max = pll->max_ref_div;
|
||||
+
|
||||
+ /* determine allowed post divider range */
|
||||
+ if (pll->flags & RADEON_PLL_USE_POST_DIV) {
|
||||
+ post_div_min = pll->post_div;
|
||||
+ post_div_max = pll->post_div;
|
||||
+ } else {
|
||||
+ unsigned target_clock = freq / 10;
|
||||
+ unsigned vco_min, vco_max;
|
||||
+
|
||||
+ if (pll->flags & RADEON_PLL_IS_LCD) {
|
||||
+ vco_min = pll->lcd_pll_out_min;
|
||||
+ vco_max = pll->lcd_pll_out_max;
|
||||
+ } else {
|
||||
+ vco_min = pll->pll_out_min;
|
||||
+ vco_max = pll->pll_out_max;
|
||||
}
|
||||
- if (frac_fb_div >= 10) {
|
||||
- fb_div++;
|
||||
- frac_fb_div = 0;
|
||||
+
|
||||
+ post_div_min = vco_min / target_clock;
|
||||
+ if ((target_clock * post_div_min) < vco_min)
|
||||
+ ++post_div_min;
|
||||
+ if (post_div_min < pll->min_post_div)
|
||||
+ post_div_min = pll->min_post_div;
|
||||
+
|
||||
+ post_div_max = vco_max / target_clock;
|
||||
+ if ((target_clock * post_div_max) > vco_max)
|
||||
+ --post_div_max;
|
||||
+ if (post_div_max > pll->max_post_div)
|
||||
+ post_div_max = pll->max_post_div;
|
||||
+ }
|
||||
+
|
||||
+ /* represent the searched ratio as fractional number */
|
||||
+ nom = pll->flags & RADEON_PLL_USE_FRAC_FB_DIV ? freq : freq / 10;
|
||||
+ den = pll->reference_freq;
|
||||
+
|
||||
+ /* reduce the numbers to a simpler ratio */
|
||||
+ avivo_reduce_ratio(&nom, &den, fb_div_min, post_div_min);
|
||||
+
|
||||
+ /* now search for a post divider */
|
||||
+ if (pll->flags & RADEON_PLL_PREFER_MINM_OVER_MAXP)
|
||||
+ post_div_best = post_div_min;
|
||||
+ else
|
||||
+ post_div_best = post_div_max;
|
||||
+ diff_best = ~0;
|
||||
+
|
||||
+ for (post_div = post_div_min; post_div <= post_div_max; ++post_div) {
|
||||
+ unsigned diff = abs(den - den / post_div * post_div);
|
||||
+ if (diff < diff_best || (diff == diff_best &&
|
||||
+ !(pll->flags & RADEON_PLL_PREFER_MINM_OVER_MAXP))) {
|
||||
+
|
||||
+ post_div_best = post_div;
|
||||
+ diff_best = diff;
|
||||
}
|
||||
+ }
|
||||
+ post_div = post_div_best;
|
||||
+
|
||||
+ /* get matching reference and feedback divider */
|
||||
+ ref_div = max(den / post_div, 1u);
|
||||
+ fb_div = nom;
|
||||
+
|
||||
+ /* we're almost done, but reference and feedback
|
||||
+ divider might be to large now */
|
||||
+
|
||||
+ tmp = ref_div;
|
||||
+
|
||||
+ if (fb_div > fb_div_max) {
|
||||
+ ref_div = ref_div * fb_div_max / fb_div;
|
||||
+ fb_div = fb_div_max;
|
||||
+ }
|
||||
+
|
||||
+ if (ref_div > ref_div_max) {
|
||||
+ ref_div = ref_div_max;
|
||||
+ fb_div = nom * ref_div_max / tmp;
|
||||
+ }
|
||||
+
|
||||
+ /* reduce the numbers to a simpler ratio once more */
|
||||
+ /* this also makes sure that the reference divider is large enough */
|
||||
+ avivo_reduce_ratio(&fb_div, &ref_div, fb_div_min, ref_div_min);
|
||||
+
|
||||
+ /* and finally save the result */
|
||||
+ if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV) {
|
||||
+ *fb_div_p = fb_div / 10;
|
||||
+ *frac_fb_div_p = fb_div % 10;
|
||||
} else {
|
||||
- while (ref_div <= pll->max_ref_div) {
|
||||
- avivo_get_fb_div(pll, target_clock, post_div, ref_div,
|
||||
- &fb_div, &frac_fb_div);
|
||||
- if (frac_fb_div >= (pll->reference_freq / 2))
|
||||
- fb_div++;
|
||||
- frac_fb_div = 0;
|
||||
- tmp = (pll->reference_freq * fb_div) / (post_div * ref_div);
|
||||
- tmp = (tmp * 10000) / target_clock;
|
||||
-
|
||||
- if (tmp > (10000 + MAX_TOLERANCE))
|
||||
- ref_div++;
|
||||
- else if (tmp >= (10000 - MAX_TOLERANCE))
|
||||
- break;
|
||||
- else
|
||||
- ref_div++;
|
||||
- }
|
||||
+ *fb_div_p = fb_div;
|
||||
+ *frac_fb_div_p = 0;
|
||||
}
|
||||
|
||||
- *dot_clock_p = ((pll->reference_freq * fb_div * 10) + (pll->reference_freq * frac_fb_div)) /
|
||||
- (ref_div * post_div * 10);
|
||||
- *fb_div_p = fb_div;
|
||||
- *frac_fb_div_p = frac_fb_div;
|
||||
+ *dot_clock_p = ((pll->reference_freq * *fb_div_p * 10) +
|
||||
+ (pll->reference_freq * *frac_fb_div_p)) /
|
||||
+ (ref_div * post_div * 10);
|
||||
*ref_div_p = ref_div;
|
||||
*post_div_p = post_div;
|
||||
- DRM_DEBUG_KMS("%d, pll dividers - fb: %d.%d ref: %d, post %d\n",
|
||||
- *dot_clock_p, fb_div, frac_fb_div, ref_div, post_div);
|
||||
+
|
||||
+ DRM_DEBUG_KMS("%d - %d, pll dividers - fb: %d.%d ref: %d, post %d\n",
|
||||
+ freq, *dot_clock_p, *fb_div_p, *frac_fb_div_p,
|
||||
+ ref_div, post_div);
|
||||
}
|
||||
|
||||
/* pre-avivo */
|
||||
--
|
||||
1.9.1
|
||||
|
||||
From 514738e09ec3ec0d1fb15cc3eabe4698b0d51358 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
|
||||
Date: Fri, 4 Apr 2014 13:45:42 +0200
|
||||
Subject: [PATCH 2/6] drm/radeon: apply more strict limits for PLL params v2
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Letting post and refernce divider get to big is bad for signal stability.
|
||||
|
||||
v2: increase the limit to 210
|
||||
|
||||
Signed-off-by: Christian König <christian.koenig@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/radeon_display.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
|
||||
index 4e83ffd..35129ad 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_display.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_display.c
|
||||
@@ -936,6 +936,9 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
}
|
||||
post_div = post_div_best;
|
||||
|
||||
+ /* limit reference * post divider to a maximum */
|
||||
+ ref_div_max = min(210 / post_div, ref_div_max);
|
||||
+
|
||||
/* get matching reference and feedback divider */
|
||||
ref_div = max(den / post_div, 1u);
|
||||
fb_div = nom;
|
||||
--
|
||||
1.9.1
|
||||
|
||||
From 97856db97ccbf06adf0cd6ede973b922e59d3eaa Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
|
||||
Date: Wed, 16 Apr 2014 11:54:21 +0200
|
||||
Subject: [PATCH 3/6] drm/radeon: improve PLL params if we don't match exactly
|
||||
v2
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Otherwise we might be quite off on older chipsets.
|
||||
|
||||
v2: keep ref_div minimum
|
||||
|
||||
Signed-off-by: Christian König <christian.koenig@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/radeon_display.c | 13 +++++++------
|
||||
1 file changed, 7 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
|
||||
index 35129ad..00f63d28 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_display.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_display.c
|
||||
@@ -864,7 +864,7 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
unsigned post_div_min, post_div_max, post_div;
|
||||
unsigned ref_div_min, ref_div_max, ref_div;
|
||||
unsigned post_div_best, diff_best;
|
||||
- unsigned nom, den, tmp;
|
||||
+ unsigned nom, den;
|
||||
|
||||
/* determine allowed feedback divider range */
|
||||
fb_div_min = pll->min_feedback_div;
|
||||
@@ -940,22 +940,23 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
ref_div_max = min(210 / post_div, ref_div_max);
|
||||
|
||||
/* get matching reference and feedback divider */
|
||||
- ref_div = max(den / post_div, 1u);
|
||||
- fb_div = nom;
|
||||
+ ref_div = max(DIV_ROUND_CLOSEST(den, post_div), 1u);
|
||||
+ fb_div = DIV_ROUND_CLOSEST(nom * ref_div * post_div, den);
|
||||
|
||||
/* we're almost done, but reference and feedback
|
||||
divider might be to large now */
|
||||
|
||||
- tmp = ref_div;
|
||||
+ nom = fb_div;
|
||||
+ den = ref_div;
|
||||
|
||||
if (fb_div > fb_div_max) {
|
||||
- ref_div = ref_div * fb_div_max / fb_div;
|
||||
+ ref_div = DIV_ROUND_CLOSEST(den * fb_div_max, nom);
|
||||
fb_div = fb_div_max;
|
||||
}
|
||||
|
||||
if (ref_div > ref_div_max) {
|
||||
ref_div = ref_div_max;
|
||||
- fb_div = nom * ref_div_max / tmp;
|
||||
+ fb_div = DIV_ROUND_CLOSEST(nom * ref_div_max, den);
|
||||
}
|
||||
|
||||
/* reduce the numbers to a simpler ratio once more */
|
||||
--
|
||||
1.9.1
|
||||
|
||||
From 537669e14063df59dd0b1004382842e278e19aa2 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
|
||||
Date: Sat, 19 Apr 2014 18:57:14 +0200
|
||||
Subject: [PATCH 4/6] drm/radeon: use fixed PPL ref divider if needed
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Christian König <christian.koenig@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/radeon_display.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
|
||||
index 00f63d28..0c26b3c 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_display.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_display.c
|
||||
@@ -880,7 +880,12 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
ref_div_min = pll->reference_div;
|
||||
else
|
||||
ref_div_min = pll->min_ref_div;
|
||||
- ref_div_max = pll->max_ref_div;
|
||||
+
|
||||
+ if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV &&
|
||||
+ pll->flags & RADEON_PLL_USE_REF_DIV)
|
||||
+ ref_div_max = pll->reference_div;
|
||||
+ else
|
||||
+ ref_div_max = pll->max_ref_div;
|
||||
|
||||
/* determine allowed post divider range */
|
||||
if (pll->flags & RADEON_PLL_USE_POST_DIV) {
|
||||
--
|
||||
1.9.1
|
||||
|
||||
From 09535920958a819e90f0178e9d6831dba0577aa0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
|
||||
Date: Sun, 20 Apr 2014 13:24:32 +0200
|
||||
Subject: [PATCH 5/6] drm/radeon: improve PLL limit handling in post div
|
||||
calculation
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This improves the PLL parameters when we work at
|
||||
the limits of the allowed ranges.
|
||||
|
||||
Signed-off-by: Christian König <christian.koenig@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/radeon_display.c | 77 ++++++++++++++++++++++-----------
|
||||
1 file changed, 51 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
|
||||
index 0c26b3c..12a01e9 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_display.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_display.c
|
||||
@@ -840,6 +840,38 @@ static void avivo_reduce_ratio(unsigned *nom, unsigned *den,
|
||||
}
|
||||
|
||||
/**
|
||||
+ * avivo_get_fb_ref_div - feedback and ref divider calculation
|
||||
+ *
|
||||
+ * @nom: nominator
|
||||
+ * @den: denominator
|
||||
+ * @post_div: post divider
|
||||
+ * @fb_div_max: feedback divider maximum
|
||||
+ * @ref_div_max: reference divider maximum
|
||||
+ * @fb_div: resulting feedback divider
|
||||
+ * @ref_div: resulting reference divider
|
||||
+ *
|
||||
+ * Calculate feedback and reference divider for a given post divider. Makes
|
||||
+ * sure we stay within the limits.
|
||||
+ */
|
||||
+static void avivo_get_fb_ref_div(unsigned nom, unsigned den, unsigned post_div,
|
||||
+ unsigned fb_div_max, unsigned ref_div_max,
|
||||
+ unsigned *fb_div, unsigned *ref_div)
|
||||
+{
|
||||
+ /* limit reference * post divider to a maximum */
|
||||
+ ref_div_max = min(210 / post_div, ref_div_max);
|
||||
+
|
||||
+ /* get matching reference and feedback divider */
|
||||
+ *ref_div = min(max(DIV_ROUND_CLOSEST(den, post_div), 1u), ref_div_max);
|
||||
+ *fb_div = DIV_ROUND_CLOSEST(nom * *ref_div * post_div, den);
|
||||
+
|
||||
+ /* limit fb divider to its maximum */
|
||||
+ if (*fb_div > fb_div_max) {
|
||||
+ *ref_div = DIV_ROUND_CLOSEST(*ref_div * fb_div_max, *fb_div);
|
||||
+ *fb_div = fb_div_max;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
* radeon_compute_pll_avivo - compute PLL paramaters
|
||||
*
|
||||
* @pll: information about the PLL
|
||||
@@ -860,6 +892,9 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
u32 *ref_div_p,
|
||||
u32 *post_div_p)
|
||||
{
|
||||
+ unsigned target_clock = pll->flags & RADEON_PLL_USE_FRAC_FB_DIV ?
|
||||
+ freq : freq / 10;
|
||||
+
|
||||
unsigned fb_div_min, fb_div_max, fb_div;
|
||||
unsigned post_div_min, post_div_max, post_div;
|
||||
unsigned ref_div_min, ref_div_max, ref_div;
|
||||
@@ -892,7 +927,6 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
post_div_min = pll->post_div;
|
||||
post_div_max = pll->post_div;
|
||||
} else {
|
||||
- unsigned target_clock = freq / 10;
|
||||
unsigned vco_min, vco_max;
|
||||
|
||||
if (pll->flags & RADEON_PLL_IS_LCD) {
|
||||
@@ -903,6 +937,11 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
vco_max = pll->pll_out_max;
|
||||
}
|
||||
|
||||
+ if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV) {
|
||||
+ vco_min *= 10;
|
||||
+ vco_max *= 10;
|
||||
+ }
|
||||
+
|
||||
post_div_min = vco_min / target_clock;
|
||||
if ((target_clock * post_div_min) < vco_min)
|
||||
++post_div_min;
|
||||
@@ -917,7 +956,7 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
}
|
||||
|
||||
/* represent the searched ratio as fractional number */
|
||||
- nom = pll->flags & RADEON_PLL_USE_FRAC_FB_DIV ? freq : freq / 10;
|
||||
+ nom = target_clock;
|
||||
den = pll->reference_freq;
|
||||
|
||||
/* reduce the numbers to a simpler ratio */
|
||||
@@ -931,7 +970,12 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
diff_best = ~0;
|
||||
|
||||
for (post_div = post_div_min; post_div <= post_div_max; ++post_div) {
|
||||
- unsigned diff = abs(den - den / post_div * post_div);
|
||||
+ unsigned diff;
|
||||
+ avivo_get_fb_ref_div(nom, den, post_div, fb_div_max,
|
||||
+ ref_div_max, &fb_div, &ref_div);
|
||||
+ diff = abs(target_clock - (pll->reference_freq * fb_div) /
|
||||
+ (ref_div * post_div));
|
||||
+
|
||||
if (diff < diff_best || (diff == diff_best &&
|
||||
!(pll->flags & RADEON_PLL_PREFER_MINM_OVER_MAXP))) {
|
||||
|
||||
@@ -941,28 +985,9 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
}
|
||||
post_div = post_div_best;
|
||||
|
||||
- /* limit reference * post divider to a maximum */
|
||||
- ref_div_max = min(210 / post_div, ref_div_max);
|
||||
-
|
||||
- /* get matching reference and feedback divider */
|
||||
- ref_div = max(DIV_ROUND_CLOSEST(den, post_div), 1u);
|
||||
- fb_div = DIV_ROUND_CLOSEST(nom * ref_div * post_div, den);
|
||||
-
|
||||
- /* we're almost done, but reference and feedback
|
||||
- divider might be to large now */
|
||||
-
|
||||
- nom = fb_div;
|
||||
- den = ref_div;
|
||||
-
|
||||
- if (fb_div > fb_div_max) {
|
||||
- ref_div = DIV_ROUND_CLOSEST(den * fb_div_max, nom);
|
||||
- fb_div = fb_div_max;
|
||||
- }
|
||||
-
|
||||
- if (ref_div > ref_div_max) {
|
||||
- ref_div = ref_div_max;
|
||||
- fb_div = DIV_ROUND_CLOSEST(nom * ref_div_max, den);
|
||||
- }
|
||||
+ /* get the feedback and reference divider for the optimal value */
|
||||
+ avivo_get_fb_ref_div(nom, den, post_div, fb_div_max, ref_div_max,
|
||||
+ &fb_div, &ref_div);
|
||||
|
||||
/* reduce the numbers to a simpler ratio once more */
|
||||
/* this also makes sure that the reference divider is large enough */
|
||||
@@ -984,7 +1009,7 @@ void radeon_compute_pll_avivo(struct radeon_pll *pll,
|
||||
*post_div_p = post_div;
|
||||
|
||||
DRM_DEBUG_KMS("%d - %d, pll dividers - fb: %d.%d ref: %d, post %d\n",
|
||||
- freq, *dot_clock_p, *fb_div_p, *frac_fb_div_p,
|
||||
+ freq, *dot_clock_p * 10, *fb_div_p, *frac_fb_div_p,
|
||||
ref_div, post_div);
|
||||
}
|
||||
|
||||
--
|
||||
1.9.1
|
||||
|
@ -1,43 +0,0 @@
|
||||
From b6d7efd33fd2843fbafe2b2d4b8119b217779a6a Mon Sep 17 00:00:00 2001
|
||||
From: fritsch <Peter.Fruehberger@gmail.com>
|
||||
Date: Sat, 3 May 2014 00:08:24 +0200
|
||||
Subject: [PATCH] Revert "Revert "xhci: Set scatter-gather limit to avoid
|
||||
failed block writes.""
|
||||
|
||||
This reverts commit 47f467ac740ebf0475a5176ddb1741acba6aad4e.
|
||||
---
|
||||
drivers/usb/host/xhci.c | 4 ++--
|
||||
drivers/usb/host/xhci.h | 2 +-
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
|
||||
index 5a646a6..cfa5995 100644
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -4716,8 +4716,8 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
|
||||
struct device *dev = hcd->self.controller;
|
||||
int retval;
|
||||
|
||||
- /* Accept arbitrarily long scatter-gather lists */
|
||||
- hcd->self.sg_tablesize = ~0;
|
||||
+ /* Limit the block layer scatter-gather lists to half a segment. */
|
||||
+ hcd->self.sg_tablesize = TRBS_PER_SEGMENT / 2;
|
||||
|
||||
/* support to build packet from discontinuous buffers */
|
||||
hcd->self.no_sg_constraint = 1;
|
||||
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
|
||||
index 03c74b7..c283cf1 100644
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1260,7 +1260,7 @@ union xhci_trb {
|
||||
* since the command ring is 64-byte aligned.
|
||||
* It must also be greater than 16.
|
||||
*/
|
||||
-#define TRBS_PER_SEGMENT 64
|
||||
+#define TRBS_PER_SEGMENT 256
|
||||
/* Allow two commands + a link TRB, along with any reserved command TRBs */
|
||||
#define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3)
|
||||
#define TRB_SEGMENT_SIZE (TRBS_PER_SEGMENT*16)
|
||||
--
|
||||
1.9.1
|
||||
|
Loading…
x
Reference in New Issue
Block a user