summaryrefslogtreecommitdiff
path: root/kernels/linux-libre-lts-knock
diff options
context:
space:
mode:
authorNicolás Reynolds <fauno@endefensadelsl.org>2014-01-18 03:29:33 +0000
committerNicolás Reynolds <fauno@endefensadelsl.org>2014-01-18 03:29:33 +0000
commitf4cbb127d45017c14988b232dbae02bc2858c6df (patch)
tree71d864fa346c59efa48d7c029334b366c6597317 /kernels/linux-libre-lts-knock
parent953eead14ccfe47904e73cee9cea6e1255f57356 (diff)
Sat Jan 18 03:25:57 UTC 2014
Diffstat (limited to 'kernels/linux-libre-lts-knock')
-rw-r--r--kernels/linux-libre-lts-knock/3.10.6-logitech-dj.patch172
-rw-r--r--kernels/linux-libre-lts-knock/PKGBUILD15
2 files changed, 5 insertions, 182 deletions
diff --git a/kernels/linux-libre-lts-knock/3.10.6-logitech-dj.patch b/kernels/linux-libre-lts-knock/3.10.6-logitech-dj.patch
deleted file mode 100644
index 1c112ccde..000000000
--- a/kernels/linux-libre-lts-knock/3.10.6-logitech-dj.patch
+++ /dev/null
@@ -1,172 +0,0 @@
-From c63e0e370028d7e4033bd40165f18499872b5183 Mon Sep 17 00:00:00 2001
-From: Nestor Lopez Casado <nlopezcasad@logitech.com>
-Date: Thu, 18 Jul 2013 13:21:30 +0000
-Subject: HID: Revert "Revert "HID: Fix logitech-dj: missing Unifying device issue""
-
-This reverts commit 8af6c08830b1ae114d1a8b548b1f8b056e068887.
-
-This patch re-adds the workaround introduced by 596264082f10dd4
-which was reverted by 8af6c08830b1ae114.
-
-The original patch 596264 was needed to overcome a situation where
-the hid-core would drop incoming reports while probe() was being
-executed.
-
-This issue was solved by c849a6143bec520af which added
-hid_device_io_start() and hid_device_io_stop() that enable a specific
-hid driver to opt-in for input reports while its probe() is being
-executed.
-
-Commit a9dd22b730857347 modified hid-logitech-dj so as to use the
-functionality added to hid-core. Having done that, workaround 596264
-was no longer necessary and was reverted by 8af6c08.
-
-We now encounter a different problem that ends up 'again' thwarting
-the Unifying receiver enumeration. The problem is time and usb controller
-dependent. Ocasionally the reports sent to the usb receiver to start
-the paired devices enumeration fail with -EPIPE and the receiver never
-gets to enumerate the paired devices.
-
-With dcd9006b1b053c7b1c the problem was "hidden" as the call to the usb
-driver became asynchronous and none was catching the error from the
-failing URB.
-
-As the root cause for this failing SET_REPORT is not understood yet,
--possibly a race on the usb controller drivers or a problem with the
-Unifying receiver- reintroducing this workaround solves the problem.
-
-Overall what this workaround does is: If an input report from an
-unknown device is received, then a (re)enumeration is performed.
-
-related bug:
-https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1194649
-
-Signed-off-by: Nestor Lopez Casado <nlopezcasad@logitech.com>
-Signed-off-by: Jiri Kosina <jkosina@suse.cz>
----
-diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
-index 5207591a..cd33084 100644
---- a/drivers/hid/hid-logitech-dj.c
-+++ b/drivers/hid/hid-logitech-dj.c
-@@ -192,6 +192,7 @@ static struct hid_ll_driver logi_dj_ll_driver;
- static int logi_dj_output_hidraw_report(struct hid_device *hid, u8 * buf,
- size_t count,
- unsigned char report_type);
-+static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev);
-
- static void logi_dj_recv_destroy_djhid_device(struct dj_receiver_dev *djrcv_dev,
- struct dj_report *dj_report)
-@@ -232,6 +233,7 @@ static void logi_dj_recv_add_djhid_device(struct dj_receiver_dev *djrcv_dev,
- if (dj_report->report_params[DEVICE_PAIRED_PARAM_SPFUNCTION] &
- SPFUNCTION_DEVICE_LIST_EMPTY) {
- dbg_hid("%s: device list is empty\n", __func__);
-+ djrcv_dev->querying_devices = false;
- return;
- }
-
-@@ -242,6 +244,12 @@ static void logi_dj_recv_add_djhid_device(struct dj_receiver_dev *djrcv_dev,
- return;
- }
-
-+ if (djrcv_dev->paired_dj_devices[dj_report->device_index]) {
-+ /* The device is already known. No need to reallocate it. */
-+ dbg_hid("%s: device is already known\n", __func__);
-+ return;
-+ }
-+
- dj_hiddev = hid_allocate_device();
- if (IS_ERR(dj_hiddev)) {
- dev_err(&djrcv_hdev->dev, "%s: hid_allocate_device failed\n",
-@@ -305,6 +313,7 @@ static void delayedwork_callback(struct work_struct *work)
- struct dj_report dj_report;
- unsigned long flags;
- int count;
-+ int retval;
-
- dbg_hid("%s\n", __func__);
-
-@@ -337,6 +346,25 @@ static void delayedwork_callback(struct work_struct *work)
- logi_dj_recv_destroy_djhid_device(djrcv_dev, &dj_report);
- break;
- default:
-+ /* A normal report (i. e. not belonging to a pair/unpair notification)
-+ * arriving here, means that the report arrived but we did not have a
-+ * paired dj_device associated to the report's device_index, this
-+ * means that the original "device paired" notification corresponding
-+ * to this dj_device never arrived to this driver. The reason is that
-+ * hid-core discards all packets coming from a device while probe() is
-+ * executing. */
-+ if (!djrcv_dev->paired_dj_devices[dj_report.device_index]) {
-+ /* ok, we don't know the device, just re-ask the
-+ * receiver for the list of connected devices. */
-+ retval = logi_dj_recv_query_paired_devices(djrcv_dev);
-+ if (!retval) {
-+ /* everything went fine, so just leave */
-+ break;
-+ }
-+ dev_err(&djrcv_dev->hdev->dev,
-+ "%s:logi_dj_recv_query_paired_devices "
-+ "error:%d\n", __func__, retval);
-+ }
- dbg_hid("%s: unexpected report type\n", __func__);
- }
- }
-@@ -367,6 +395,12 @@ static void logi_dj_recv_forward_null_report(struct dj_receiver_dev *djrcv_dev,
- if (!djdev) {
- dbg_hid("djrcv_dev->paired_dj_devices[dj_report->device_index]"
- " is NULL, index %d\n", dj_report->device_index);
-+ kfifo_in(&djrcv_dev->notif_fifo, dj_report, sizeof(struct dj_report));
-+
-+ if (schedule_work(&djrcv_dev->work) == 0) {
-+ dbg_hid("%s: did not schedule the work item, was already "
-+ "queued\n", __func__);
-+ }
- return;
- }
-
-@@ -397,6 +431,12 @@ static void logi_dj_recv_forward_report(struct dj_receiver_dev *djrcv_dev,
- if (dj_device == NULL) {
- dbg_hid("djrcv_dev->paired_dj_devices[dj_report->device_index]"
- " is NULL, index %d\n", dj_report->device_index);
-+ kfifo_in(&djrcv_dev->notif_fifo, dj_report, sizeof(struct dj_report));
-+
-+ if (schedule_work(&djrcv_dev->work) == 0) {
-+ dbg_hid("%s: did not schedule the work item, was already "
-+ "queued\n", __func__);
-+ }
- return;
- }
-
-@@ -444,6 +484,10 @@ static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev)
- struct dj_report *dj_report;
- int retval;
-
-+ /* no need to protect djrcv_dev->querying_devices */
-+ if (djrcv_dev->querying_devices)
-+ return 0;
-+
- dj_report = kzalloc(sizeof(struct dj_report), GFP_KERNEL);
- if (!dj_report)
- return -ENOMEM;
-@@ -455,6 +499,7 @@ static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev)
- return retval;
- }
-
-+
- static int logi_dj_recv_switch_to_dj_mode(struct dj_receiver_dev *djrcv_dev,
- unsigned timeout)
- {
-diff --git a/drivers/hid/hid-logitech-dj.h b/drivers/hid/hid-logitech-dj.h
-index fd28a5e..4a40003 100644
---- a/drivers/hid/hid-logitech-dj.h
-+++ b/drivers/hid/hid-logitech-dj.h
-@@ -101,6 +101,7 @@ struct dj_receiver_dev {
- struct work_struct work;
- struct kfifo notif_fifo;
- spinlock_t lock;
-+ bool querying_devices;
- };
-
- struct dj_device {
---
-cgit v0.9.2
diff --git a/kernels/linux-libre-lts-knock/PKGBUILD b/kernels/linux-libre-lts-knock/PKGBUILD
index 3d42ff6ab..8d853e1a2 100644
--- a/kernels/linux-libre-lts-knock/PKGBUILD
+++ b/kernels/linux-libre-lts-knock/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 203427 2014-01-10 20:21:13Z andyrtr $
+# $Id: PKGBUILD 204271 2014-01-16 08:13:43Z bpiotrowski $
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
# Maintainer: Thomas Baechler <thomas@archlinux.org>
# Maintainer (Parabola): André Silva <emulatorman@parabola.nu>
@@ -10,11 +10,11 @@
pkgbase=linux-libre-lts-knock # Build stock -LIBRE-LTS-KNOCK kernel
#pkgbase=linux-libre-custom # Build kernel with a different name
_basekernel=3.10
-_sublevel=26
+_sublevel=27
_knockpatchver=${_basekernel}
pkgver=${_basekernel}.${_sublevel}
pkgrel=1
-_lxopkgver=${_basekernel}.26 # nearly always the same as pkgver
+_lxopkgver=${_basekernel}.27 # nearly always the same as pkgver
arch=('i686' 'x86_64' 'mips64el')
url="http://linux-libre.fsfla.org/"
license=('GPL2')
@@ -32,10 +32,9 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn
'boot-logo.patch'
'change-default-console-loglevel.patch'
'criu-no-expert.patch'
- '3.10.6-logitech-dj.patch'
"http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2")
md5sums=('d562fd52580a3b6b18b6eeb5921d1d5c'
- 'b04f41f84f48724609baac04282e9755'
+ '20d0ea2ae02745d7a525126a3b8a5ce7'
'26380d6f05471ef8e065a77d87588009'
'f22e0a6a7634902f5a00eb25ad677c65'
'6550ba0e23b7729cd9db2475bde8fac2'
@@ -45,8 +44,7 @@ md5sums=('d562fd52580a3b6b18b6eeb5921d1d5c'
'04b21c79df0a952c22d681dd4f4562df'
'f3def2cefdcbb954c21d8505d23cc83c'
'd50c1ac47394e9aec637002ef3392bd1'
- '3ff40ca684cfe719723e627e2cef7cea'
- '040015fc338ec1a35616e72bade6bdc2')
+ '7e5b9d817f296a7e305f2262a00b9fb3')
if [ "$CARCH" != "mips64el" ]; then
# don't use the Loongson-specific patches on non-mips64el arches.
unset source[${#source[@]}-1]
@@ -78,9 +76,6 @@ prepare() {
# patch from fedora
patch -Np1 -i "${srcdir}/criu-no-expert.patch"
- # fix https://bugs.archlinux.org/task/35991 - [linux] 3.10.x renders Logitech Unified Receivers useless
- patch -Np1 -i "${srcdir}/3.10.6-logitech-dj.patch"
-
if [ "$CARCH" == "mips64el" ]; then
sed -i "s|^EXTRAVERSION.*|EXTRAVERSION =-libre-lts-knock|" Makefile
sed -r "s|^( SUBLEVEL = ).*|\1$_sublevel|" \