From 686a206dc6ed9580bc51380b042a55ae814e19cc Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 10 Nov 2014 13:38:30 +0900 Subject: [PATCH] 3.10-stable patches added patches: serial-fix-divide-by-zero-fault-in-uart_get_divisor.patch spi-pl022-fix-incorrect-dma_unmap_sg.patch spi-pxa2xx-toggle-clocks-on-suspend-if-not-disabled-by-runtime-pm.patch staging-iio-ad5933-drop-raw-from-channel-names.patch staging-iio-ad5933-fix-null-pointer-deref-when-enabling-buffer.patch staging-iio-ade7758-fix-check-if-channels-are-enabled-in-prenable.patch staging-iio-ade7758-fix-null-pointer-deref-when-enabling-buffer.patch staging-iio-ade7758-remove-raw-from-channel-name.patch usb-cdc-acm-add-device-id-for-gw-instek-afg-2225.patch usb-cdc-acm-only-raise-dtr-on-transitions-from-b0.patch usb-dwc3-gadget-properly-initialize-link-trb.patch usb-option-add-haier-ce81b-cdma-modem.patch usb-option-add-support-for-telit-le910.patch usb-serial-cp210x-add-silicon-labs-358x-vid-and-pid.patch usb-serial-ftdi_sio-add-awinda-station-and-dongle-products.patch usb-serial-ftdi_sio-add-bricked-ftdi-device-pid.patch wireless-rt2x00-add-new-rt2800usb-device.patch --- ...de-by-zero-fault-in-uart_get_divisor.patch | 48 ++++ queue-3.10/series | 17 ++ ...spi-pl022-fix-incorrect-dma_unmap_sg.patch | 32 +++ ...uspend-if-not-disabled-by-runtime-pm.patch | 71 +++++ ...o-ad5933-drop-raw-from-channel-names.patch | 40 +++ ...l-pointer-deref-when-enabling-buffer.patch | 116 ++++++++ ...-if-channels-are-enabled-in-prenable.patch | 31 +++ ...l-pointer-deref-when-enabling-buffer.patch | 256 ++++++++++++++++++ ...ade7758-remove-raw-from-channel-name.patch | 151 +++++++++++ ...add-device-id-for-gw-instek-afg-2225.patch | 30 ++ ...nly-raise-dtr-on-transitions-from-b0.patch | 38 +++ ...-gadget-properly-initialize-link-trb.patch | 42 +++ ...sb-option-add-haier-ce81b-cdma-modem.patch | 42 +++ ...b-option-add-support-for-telit-le910.patch | 52 ++++ ...0x-add-silicon-labs-358x-vid-and-pid.patch | 31 +++ ...d-awinda-station-and-dongle-products.patch | 50 ++++ ...ftdi_sio-add-bricked-ftdi-device-pid.patch | 54 ++++ ...less-rt2x00-add-new-rt2800usb-device.patch | 32 +++ 18 files changed, 1133 insertions(+) create mode 100644 queue-3.10/serial-fix-divide-by-zero-fault-in-uart_get_divisor.patch create mode 100644 queue-3.10/spi-pl022-fix-incorrect-dma_unmap_sg.patch create mode 100644 queue-3.10/spi-pxa2xx-toggle-clocks-on-suspend-if-not-disabled-by-runtime-pm.patch create mode 100644 queue-3.10/staging-iio-ad5933-drop-raw-from-channel-names.patch create mode 100644 queue-3.10/staging-iio-ad5933-fix-null-pointer-deref-when-enabling-buffer.patch create mode 100644 queue-3.10/staging-iio-ade7758-fix-check-if-channels-are-enabled-in-prenable.patch create mode 100644 queue-3.10/staging-iio-ade7758-fix-null-pointer-deref-when-enabling-buffer.patch create mode 100644 queue-3.10/staging-iio-ade7758-remove-raw-from-channel-name.patch create mode 100644 queue-3.10/usb-cdc-acm-add-device-id-for-gw-instek-afg-2225.patch create mode 100644 queue-3.10/usb-cdc-acm-only-raise-dtr-on-transitions-from-b0.patch create mode 100644 queue-3.10/usb-dwc3-gadget-properly-initialize-link-trb.patch create mode 100644 queue-3.10/usb-option-add-haier-ce81b-cdma-modem.patch create mode 100644 queue-3.10/usb-option-add-support-for-telit-le910.patch create mode 100644 queue-3.10/usb-serial-cp210x-add-silicon-labs-358x-vid-and-pid.patch create mode 100644 queue-3.10/usb-serial-ftdi_sio-add-awinda-station-and-dongle-products.patch create mode 100644 queue-3.10/usb-serial-ftdi_sio-add-bricked-ftdi-device-pid.patch create mode 100644 queue-3.10/wireless-rt2x00-add-new-rt2800usb-device.patch diff --git a/queue-3.10/serial-fix-divide-by-zero-fault-in-uart_get_divisor.patch b/queue-3.10/serial-fix-divide-by-zero-fault-in-uart_get_divisor.patch new file mode 100644 index 00000000000..46b67ad3808 --- /dev/null +++ b/queue-3.10/serial-fix-divide-by-zero-fault-in-uart_get_divisor.patch @@ -0,0 +1,48 @@ +From 547039ec502076e60034eeb79611df3433a99b7d Mon Sep 17 00:00:00 2001 +From: Peter Hurley +Date: Thu, 16 Oct 2014 13:46:38 -0400 +Subject: serial: Fix divide-by-zero fault in uart_get_divisor() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Peter Hurley + +commit 547039ec502076e60034eeb79611df3433a99b7d upstream. + +uart_get_baud_rate() will return baud == 0 if the max rate is set +to the "magic" 38400 rate and the SPD_* flags are also specified. +On the first iteration, if the current baud rate is higher than the +max, the baud rate is clamped at the max (which in the degenerate +case is 38400). On the second iteration, the now-"magic" 38400 baud +rate selects the possibly higher alternate baud rate indicated by +the SPD_* flag. Since only two loop iterations are performed, the +loop is exited, a kernel WARNING is generated and a baud rate of +0 is returned. + +Reproducible with: + setserial /dev/ttyS0 spd_hi base_baud 38400 + +Only perform the "magic" 38400 -> SPD_* baud transform on the first +loop iteration, which prevents the degenerate case from recognizing +the clamped baud rate as the "magic" 38400 value. + +Reported-by: Robert Święcki +Signed-off-by: Peter Hurley +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/tty/serial/serial_core.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/tty/serial/serial_core.c ++++ b/drivers/tty/serial/serial_core.c +@@ -359,7 +359,7 @@ uart_get_baud_rate(struct uart_port *por + * The spd_hi, spd_vhi, spd_shi, spd_warp kludge... + * Die! Die! Die! + */ +- if (baud == 38400) ++ if (try == 0 && baud == 38400) + baud = altbaud; + + /* diff --git a/queue-3.10/series b/queue-3.10/series index 3569645c6c4..7c4f78e416f 100644 --- a/queue-3.10/series +++ b/queue-3.10/series @@ -73,3 +73,20 @@ cpufreq-intel_pstate-fix-setting-max_perf_pct-in-performance-policy.patch ext4-fix-oops-when-loading-block-bitmap-failed.patch freezer-do-not-freeze-tasks-killed-by-oom-killer.patch oom-pm-oom-killed-task-shouldn-t-escape-pm-suspend.patch +staging-iio-ad5933-fix-null-pointer-deref-when-enabling-buffer.patch +staging-iio-ad5933-drop-raw-from-channel-names.patch +staging-iio-ade7758-fix-null-pointer-deref-when-enabling-buffer.patch +staging-iio-ade7758-fix-check-if-channels-are-enabled-in-prenable.patch +staging-iio-ade7758-remove-raw-from-channel-name.patch +serial-fix-divide-by-zero-fault-in-uart_get_divisor.patch +usb-serial-cp210x-add-silicon-labs-358x-vid-and-pid.patch +usb-serial-ftdi_sio-add-awinda-station-and-dongle-products.patch +usb-serial-ftdi_sio-add-bricked-ftdi-device-pid.patch +usb-cdc-acm-add-device-id-for-gw-instek-afg-2225.patch +usb-cdc-acm-only-raise-dtr-on-transitions-from-b0.patch +usb-option-add-support-for-telit-le910.patch +usb-option-add-haier-ce81b-cdma-modem.patch +wireless-rt2x00-add-new-rt2800usb-device.patch +usb-dwc3-gadget-properly-initialize-link-trb.patch +spi-pl022-fix-incorrect-dma_unmap_sg.patch +spi-pxa2xx-toggle-clocks-on-suspend-if-not-disabled-by-runtime-pm.patch diff --git a/queue-3.10/spi-pl022-fix-incorrect-dma_unmap_sg.patch b/queue-3.10/spi-pl022-fix-incorrect-dma_unmap_sg.patch new file mode 100644 index 00000000000..0ae628bf885 --- /dev/null +++ b/queue-3.10/spi-pl022-fix-incorrect-dma_unmap_sg.patch @@ -0,0 +1,32 @@ +From 3ffa6158f002e096d28ede71be4e0ee8ab20baa2 Mon Sep 17 00:00:00 2001 +From: Ray Jui +Date: Thu, 9 Oct 2014 11:44:54 -0700 +Subject: spi: pl022: Fix incorrect dma_unmap_sg + +From: Ray Jui + +commit 3ffa6158f002e096d28ede71be4e0ee8ab20baa2 upstream. + +When mapped RX DMA entries are unmapped in an error condition when DMA +is firstly configured in the driver, the number of TX DMA entries was +passed in, which is incorrect + +Signed-off-by: Ray Jui +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/spi/spi-pl022.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/spi/spi-pl022.c ++++ b/drivers/spi/spi-pl022.c +@@ -1080,7 +1080,7 @@ err_rxdesc: + pl022->sgt_tx.nents, DMA_TO_DEVICE); + err_tx_sgmap: + dma_unmap_sg(rxchan->device->dev, pl022->sgt_rx.sgl, +- pl022->sgt_tx.nents, DMA_FROM_DEVICE); ++ pl022->sgt_rx.nents, DMA_FROM_DEVICE); + err_rx_sgmap: + sg_free_table(&pl022->sgt_tx); + err_alloc_tx_sg: diff --git a/queue-3.10/spi-pxa2xx-toggle-clocks-on-suspend-if-not-disabled-by-runtime-pm.patch b/queue-3.10/spi-pxa2xx-toggle-clocks-on-suspend-if-not-disabled-by-runtime-pm.patch new file mode 100644 index 00000000000..d5420412975 --- /dev/null +++ b/queue-3.10/spi-pxa2xx-toggle-clocks-on-suspend-if-not-disabled-by-runtime-pm.patch @@ -0,0 +1,71 @@ +From 2b9375b91bef65b837bed61a05fb387159b38ddf Mon Sep 17 00:00:00 2001 +From: Dmitry Eremin-Solenikov +Date: Thu, 6 Nov 2014 14:08:29 +0300 +Subject: spi: pxa2xx: toggle clocks on suspend if not disabled by runtime PM + +From: Dmitry Eremin-Solenikov + +commit 2b9375b91bef65b837bed61a05fb387159b38ddf upstream. + +If PM_RUNTIME is enabled, it is easy to trigger the following backtrace +on pxa2xx hosts: + +------------[ cut here ]------------ +WARNING: CPU: 0 PID: 1 at /home/lumag/linux/arch/arm/mach-pxa/clock.c:35 clk_disable+0xa0/0xa8() +Modules linked in: +CPU: 0 PID: 1 Comm: swapper Not tainted 3.17.0-00007-g1b3d2ee-dirty #104 +[] (unwind_backtrace) from [] (show_stack+0x10/0x14) +[] (show_stack) from [] (warn_slowpath_common+0x6c/0x8c) +[] (warn_slowpath_common) from [] (warn_slowpath_null+0x1c/0x24) +[] (warn_slowpath_null) from [] (clk_disable+0xa0/0xa8) +[] (clk_disable) from [] (pxa2xx_spi_suspend+0x2c/0x34) +[] (pxa2xx_spi_suspend) from [] (platform_pm_suspend+0x2c/0x54) +[] (platform_pm_suspend) from [] (dpm_run_callback.isra.14+0x2c/0x74) +[] (dpm_run_callback.isra.14) from [] (__device_suspend+0x120/0x2f8) +[] (__device_suspend) from [] (dpm_suspend+0x50/0x208) +[] (dpm_suspend) from [] (suspend_devices_and_enter+0x8c/0x3a0) +[] (suspend_devices_and_enter) from [] (pm_suspend+0x214/0x2a8) +[] (pm_suspend) from [] (test_suspend+0x14c/0x1dc) +[] (test_suspend) from [] (do_one_initcall+0x8c/0x1fc) +[] (do_one_initcall) from [] (kernel_init_freeable+0xf4/0x1b4) +[] (kernel_init_freeable) from [] (kernel_init+0x8/0xec) +[] (kernel_init) from [] (ret_from_fork+0x14/0x24) +---[ end trace 46524156d8faa4f6 ]--- + +This happens because suspend function tries to disable a clock that is +already disabled by runtime_suspend callback. Add if +(!pm_runtime_suspended()) checks to suspend/resume path. + +Fixes: 7d94a505858 (spi/pxa2xx: add support for runtime PM) +Signed-off-by: Dmitry Eremin-Solenikov +Reported-by: Andrea Adami +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/spi/spi-pxa2xx.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- a/drivers/spi/spi-pxa2xx.c ++++ b/drivers/spi/spi-pxa2xx.c +@@ -1324,7 +1324,9 @@ static int pxa2xx_spi_suspend(struct dev + if (status != 0) + return status; + write_SSCR0(0, drv_data->ioaddr); +- clk_disable_unprepare(ssp->clk); ++ ++ if (!pm_runtime_suspended(dev)) ++ clk_disable_unprepare(ssp->clk); + + return 0; + } +@@ -1338,7 +1340,8 @@ static int pxa2xx_spi_resume(struct devi + pxa2xx_spi_dma_resume(drv_data); + + /* Enable the SSP clock */ +- clk_prepare_enable(ssp->clk); ++ if (!pm_runtime_suspended(dev)) ++ clk_prepare_enable(ssp->clk); + + /* Start the queue running */ + status = spi_master_resume(drv_data->master); diff --git a/queue-3.10/staging-iio-ad5933-drop-raw-from-channel-names.patch b/queue-3.10/staging-iio-ad5933-drop-raw-from-channel-names.patch new file mode 100644 index 00000000000..f82af9c65ed --- /dev/null +++ b/queue-3.10/staging-iio-ad5933-drop-raw-from-channel-names.patch @@ -0,0 +1,40 @@ +From 6822ee34ad57b29a3b44df2c2829910f03c34fa4 Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen +Date: Thu, 25 Sep 2014 15:27:00 +0100 +Subject: staging:iio:ad5933: Drop "raw" from channel names + +From: Lars-Peter Clausen + +commit 6822ee34ad57b29a3b44df2c2829910f03c34fa4 upstream. + +"raw" is the name of a channel property, but should not be part of the +channel name itself. + +Signed-off-by: Lars-Peter Clausen +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/iio/impedance-analyzer/ad5933.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/staging/iio/impedance-analyzer/ad5933.c ++++ b/drivers/staging/iio/impedance-analyzer/ad5933.c +@@ -125,7 +125,7 @@ static const struct iio_chan_spec ad5933 + .type = IIO_VOLTAGE, + .indexed = 1, + .channel = 0, +- .extend_name = "real_raw", ++ .extend_name = "real", + .address = AD5933_REG_REAL_DATA, + .scan_index = 0, + .scan_type = { +@@ -137,7 +137,7 @@ static const struct iio_chan_spec ad5933 + .type = IIO_VOLTAGE, + .indexed = 1, + .channel = 0, +- .extend_name = "imag_raw", ++ .extend_name = "imag", + .address = AD5933_REG_IMAG_DATA, + .scan_index = 1, + .scan_type = { diff --git a/queue-3.10/staging-iio-ad5933-fix-null-pointer-deref-when-enabling-buffer.patch b/queue-3.10/staging-iio-ad5933-fix-null-pointer-deref-when-enabling-buffer.patch new file mode 100644 index 00000000000..2ea630aca96 --- /dev/null +++ b/queue-3.10/staging-iio-ad5933-fix-null-pointer-deref-when-enabling-buffer.patch @@ -0,0 +1,116 @@ +From 824269c5868d2a7a26417e5ef3841a27d42c6139 Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen +Date: Thu, 25 Sep 2014 15:27:00 +0100 +Subject: staging:iio:ad5933: Fix NULL pointer deref when enabling buffer + +From: Lars-Peter Clausen + +commit 824269c5868d2a7a26417e5ef3841a27d42c6139 upstream. + +In older versions of the IIO framework it was possible to pass a +completely different set of channels to iio_buffer_register() as the one +that is assigned to the IIO device. Commit 959d2952d124 ("staging:iio: make +iio_sw_buffer_preenable much more general.") introduced a restriction that +requires that the set of channels that is passed to iio_buffer_register() is +a subset of the channels assigned to the IIO device as the IIO core will use +the list of channels that is assigned to the device to lookup a channel by +scan index in iio_compute_scan_bytes(). If it can not find the channel the +function will crash. This patch fixes the issue by making sure that the same +set of channels is assigned to the IIO device and passed to +iio_buffer_register(). + +Fixes the follow NULL pointer derefernce kernel crash: + Unable to handle kernel NULL pointer dereference at virtual address 00000016 + pgd = d53d0000 + [00000016] *pgd=1534e831, *pte=00000000, *ppte=00000000 + Internal error: Oops: 17 [#1] PREEMPT SMP ARM + Modules linked in: + CPU: 1 PID: 1626 Comm: bash Not tainted 3.15.0-19969-g2a180eb-dirty #9545 + task: d6c124c0 ti: d539a000 task.ti: d539a000 + PC is at iio_compute_scan_bytes+0x34/0xa8 + LR is at iio_compute_scan_bytes+0x34/0xa8 + pc : [] lr : [] psr: 60070013 + sp : d539beb8 ip : 00000001 fp : 00000000 + r10: 00000002 r9 : 00000000 r8 : 00000001 + r7 : 00000000 r6 : d6dc8800 r5 : d7571000 r4 : 00000002 + r3 : d7571000 r2 : 00000044 r1 : 00000001 r0 : 00000000 + Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user + Control: 18c5387d Table: 153d004a DAC: 00000015 + Process bash (pid: 1626, stack limit = 0xd539a240) + Stack: (0xd539beb8 to 0xd539c000) + bea0: c02fc0e4 d7571000 + bec0: d76c1640 d6dc8800 d757117c 00000000 d757112c c0305b04 d76c1690 d76c1640 + bee0: d7571188 00000002 00000000 d7571000 d539a000 00000000 000dd1c8 c0305d54 + bf00: d7571010 0160b868 00000002 c69d3900 d7573278 d7573308 c69d3900 c01ece90 + bf20: 00000002 c0103fac c0103f6c d539bf88 00000002 c69d3b00 c69d3b0c c0103468 + bf40: 00000000 00000000 d7694a00 00000002 000af408 d539bf88 c000dd84 c00b2f94 + bf60: d7694a00 000af408 00000002 d7694a00 d7694a00 00000002 000af408 c000dd84 + bf80: 00000000 c00b32d0 00000000 00000000 00000002 b6f1aa78 00000002 000af408 + bfa0: 00000004 c000dc00 b6f1aa78 00000002 00000001 000af408 00000002 00000000 + bfc0: b6f1aa78 00000002 000af408 00000004 be806a4c 000a6094 00000000 000dd1c8 + bfe0: 00000000 be8069cc b6e8ab77 b6ec125c 40070010 00000001 22940489 154a5007 + [] (iio_compute_scan_bytes) from [] (__iio_update_buffers+0x248/0x438) + [] (__iio_update_buffers) from [] (iio_buffer_store_enable+0x60/0x7c) + [] (iio_buffer_store_enable) from [] (dev_attr_store+0x18/0x24) + [] (dev_attr_store) from [] (sysfs_kf_write+0x40/0x4c) + [] (sysfs_kf_write) from [] (kernfs_fop_write+0x110/0x154) + [] (kernfs_fop_write) from [] (vfs_write+0xd0/0x160) + [] (vfs_write) from [] (SyS_write+0x40/0x78) + [] (SyS_write) from [] (ret_fast_syscall+0x0/0x30) + Code: ea00000e e1a01008 e1a00005 ebfff6fc (e5d0a016) + +Fixes: 959d2952d124 ("staging:iio: make iio_sw_buffer_preenable much more general.") +Signed-off-by: Lars-Peter Clausen +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/iio/impedance-analyzer/ad5933.c | 11 ++++------- + 1 file changed, 4 insertions(+), 7 deletions(-) + +--- a/drivers/staging/iio/impedance-analyzer/ad5933.c ++++ b/drivers/staging/iio/impedance-analyzer/ad5933.c +@@ -115,6 +115,7 @@ static const struct iio_chan_spec ad5933 + .channel = 0, + .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), + .address = AD5933_REG_TEMP_DATA, ++ .scan_index = -1, + .scan_type = { + .sign = 's', + .realbits = 14, +@@ -125,8 +126,6 @@ static const struct iio_chan_spec ad5933 + .indexed = 1, + .channel = 0, + .extend_name = "real_raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | +- BIT(IIO_CHAN_INFO_SCALE), + .address = AD5933_REG_REAL_DATA, + .scan_index = 0, + .scan_type = { +@@ -139,8 +138,6 @@ static const struct iio_chan_spec ad5933 + .indexed = 1, + .channel = 0, + .extend_name = "imag_raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | +- BIT(IIO_CHAN_INFO_SCALE), + .address = AD5933_REG_IMAG_DATA, + .scan_index = 1, + .scan_type = { +@@ -746,14 +743,14 @@ static int ad5933_probe(struct i2c_clien + indio_dev->name = id->name; + indio_dev->modes = INDIO_DIRECT_MODE; + indio_dev->channels = ad5933_channels; +- indio_dev->num_channels = 1; /* only register temp0_input */ ++ indio_dev->num_channels = ARRAY_SIZE(ad5933_channels); + + ret = ad5933_register_ring_funcs_and_init(indio_dev); + if (ret) + goto error_disable_reg; + +- /* skip temp0_input, register in0_(real|imag)_raw */ +- ret = iio_buffer_register(indio_dev, &ad5933_channels[1], 2); ++ ret = iio_buffer_register(indio_dev, ad5933_channels, ++ ARRAY_SIZE(ad5933_channels)); + if (ret) + goto error_unreg_ring; + diff --git a/queue-3.10/staging-iio-ade7758-fix-check-if-channels-are-enabled-in-prenable.patch b/queue-3.10/staging-iio-ade7758-fix-check-if-channels-are-enabled-in-prenable.patch new file mode 100644 index 00000000000..1f4db11db18 --- /dev/null +++ b/queue-3.10/staging-iio-ade7758-fix-check-if-channels-are-enabled-in-prenable.patch @@ -0,0 +1,31 @@ +From 79fa64eb2ee8ccb4bcad7f54caa2699730b10b22 Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen +Date: Tue, 4 Nov 2014 18:03:15 +0100 +Subject: staging:iio:ade7758: Fix check if channels are enabled in prenable + +From: Lars-Peter Clausen + +commit 79fa64eb2ee8ccb4bcad7f54caa2699730b10b22 upstream. + +We should check if a channel is enabled, not if no channels are enabled. + +Fixes: 550268ca1111 ("staging:iio: scrap scan_count and ensure all drivers use active_scan_mask") +Signed-off-by: Lars-Peter Clausen +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/iio/meter/ade7758_ring.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/staging/iio/meter/ade7758_ring.c ++++ b/drivers/staging/iio/meter/ade7758_ring.c +@@ -92,7 +92,7 @@ static int ade7758_ring_preenable(struct + unsigned channel; + int ret; + +- if (!bitmap_empty(indio_dev->active_scan_mask, indio_dev->masklength)) ++ if (bitmap_empty(indio_dev->active_scan_mask, indio_dev->masklength)) + return -EINVAL; + + ret = iio_sw_buffer_preenable(indio_dev); diff --git a/queue-3.10/staging-iio-ade7758-fix-null-pointer-deref-when-enabling-buffer.patch b/queue-3.10/staging-iio-ade7758-fix-null-pointer-deref-when-enabling-buffer.patch new file mode 100644 index 00000000000..41f5cf3f18e --- /dev/null +++ b/queue-3.10/staging-iio-ade7758-fix-null-pointer-deref-when-enabling-buffer.patch @@ -0,0 +1,256 @@ +From e10554738cab4224e097c2f9d975ea781a4fcde4 Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen +Date: Tue, 4 Nov 2014 18:03:14 +0100 +Subject: staging:iio:ade7758: Fix NULL pointer deref when enabling buffer + +From: Lars-Peter Clausen + +commit e10554738cab4224e097c2f9d975ea781a4fcde4 upstream. + +In older versions of the IIO framework it was possible to pass a completely +different set of channels to iio_buffer_register() as the one that is +assigned to the IIO device. Commit 959d2952d124 ("staging:iio: make +iio_sw_buffer_preenable much more general.") introduced a restriction that +requires that the set of channels that is passed to iio_buffer_register() is +a subset of the channels assigned to the IIO device as the IIO core will use +the list of channels that is assigned to the device to lookup a channel by +scan index in iio_compute_scan_bytes(). If it can not find the channel the +function will crash. This patch fixes the issue by making sure that the same +set of channels is assigned to the IIO device and passed to +iio_buffer_register(). + +Note that we need to remove the IIO_CHAN_INFO_RAW and IIO_CHAN_INFO_SCALE +info attributes from the channels since we don't actually want those to be +registered. + +Fixes the following crash: + Unable to handle kernel NULL pointer dereference at virtual address 00000016 + pgd = d2094000 + [00000016] *pgd=16e39831, *pte=00000000, *ppte=00000000 + Internal error: Oops: 17 [#1] PREEMPT SMP ARM + Modules linked in: + CPU: 1 PID: 1695 Comm: bash Not tainted 3.17.0-06329-g29461ee #9686 + task: d7768040 ti: d5bd4000 task.ti: d5bd4000 + PC is at iio_compute_scan_bytes+0x38/0xc0 + LR is at iio_compute_scan_bytes+0x34/0xc0 + pc : [] lr : [] psr: 60070013 + sp : d5bd5ec0 ip : 00000000 fp : 00000000 + r10: d769f934 r9 : 00000000 r8 : 00000001 + r7 : 00000000 r6 : c8fc6240 r5 : d769f800 r4 : 00000000 + r3 : d769f800 r2 : 00000000 r1 : ffffffff r0 : 00000000 + Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user + Control: 18c5387d Table: 1209404a DAC: 00000015 + Process bash (pid: 1695, stack limit = 0xd5bd4240) + Stack: (0xd5bd5ec0 to 0xd5bd6000) + 5ec0: d769f800 d7435640 c8fc6240 d769f984 00000000 c03175a4 d7435690 d7435640 + 5ee0: d769f990 00000002 00000000 d769f800 d5bd4000 00000000 000b43a8 c03177f4 + 5f00: d769f810 0162b8c8 00000002 c8fc7e00 d77f1d08 d77f1da8 c8fc7e00 c01faf1c + 5f20: 00000002 c010694c c010690c d5bd5f88 00000002 c8fc6840 c8fc684c c0105e08 + 5f40: 00000000 00000000 d20d1580 00000002 000af408 d5bd5f88 c000de84 c00b76d4 + 5f60: d20d1580 000af408 00000002 d20d1580 d20d1580 00000002 000af408 c000de84 + 5f80: 00000000 c00b7a44 00000000 00000000 00000002 b6ebea78 00000002 000af408 + 5fa0: 00000004 c000dd00 b6ebea78 00000002 00000001 000af408 00000002 00000000 + 5fc0: b6ebea78 00000002 000af408 00000004 bee96a4c 000a6094 00000000 000b43a8 + 5fe0: 00000000 bee969cc b6e2eb77 b6e6525c 40070010 00000001 00000000 00000000 + [] (iio_compute_scan_bytes) from [] (__iio_update_buffers+0x248/0x438) + [] (__iio_update_buffers) from [] (iio_buffer_store_enable+0x60/0x7c) + [] (iio_buffer_store_enable) from [] (dev_attr_store+0x18/0x24) + [] (dev_attr_store) from [] (sysfs_kf_write+0x40/0x4c) + [] (sysfs_kf_write) from [] (kernfs_fop_write+0x110/0x154) + [] (kernfs_fop_write) from [] (vfs_write+0xbc/0x170) + [] (vfs_write) from [] (SyS_write+0x40/0x78) + [] (SyS_write) from [] (ret_fast_syscall+0x0/0x30) + +Fixes: 959d2952d124 ("staging:iio: make iio_sw_buffer_preenable much more general.") +Signed-off-by: Lars-Peter Clausen +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/iio/meter/ade7758.h | 1 + drivers/staging/iio/meter/ade7758_core.c | 33 +------------------------------ + drivers/staging/iio/meter/ade7758_ring.c | 3 -- + 3 files changed, 3 insertions(+), 34 deletions(-) + +--- a/drivers/staging/iio/meter/ade7758.h ++++ b/drivers/staging/iio/meter/ade7758.h +@@ -119,7 +119,6 @@ struct ade7758_state { + u8 *tx; + u8 *rx; + struct mutex buf_lock; +- const struct iio_chan_spec *ade7758_ring_channels; + struct spi_transfer ring_xfer[4]; + struct spi_message ring_msg; + /* +--- a/drivers/staging/iio/meter/ade7758_core.c ++++ b/drivers/staging/iio/meter/ade7758_core.c +@@ -649,8 +649,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 0, + .extend_name = "raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_A, AD7758_VOLTAGE), + .scan_index = 0, + .scan_type = { +@@ -663,8 +661,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 0, + .extend_name = "raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_A, AD7758_CURRENT), + .scan_index = 1, + .scan_type = { +@@ -677,8 +673,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 0, + .extend_name = "apparent_raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_A, AD7758_APP_PWR), + .scan_index = 2, + .scan_type = { +@@ -691,8 +685,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 0, + .extend_name = "active_raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_A, AD7758_ACT_PWR), + .scan_index = 3, + .scan_type = { +@@ -705,8 +697,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 0, + .extend_name = "reactive_raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_A, AD7758_REACT_PWR), + .scan_index = 4, + .scan_type = { +@@ -719,8 +709,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 1, + .extend_name = "raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_B, AD7758_VOLTAGE), + .scan_index = 5, + .scan_type = { +@@ -733,8 +721,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 1, + .extend_name = "raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_B, AD7758_CURRENT), + .scan_index = 6, + .scan_type = { +@@ -747,8 +733,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 1, + .extend_name = "apparent_raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_B, AD7758_APP_PWR), + .scan_index = 7, + .scan_type = { +@@ -761,8 +745,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 1, + .extend_name = "active_raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_B, AD7758_ACT_PWR), + .scan_index = 8, + .scan_type = { +@@ -775,8 +757,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 1, + .extend_name = "reactive_raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_B, AD7758_REACT_PWR), + .scan_index = 9, + .scan_type = { +@@ -789,8 +769,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 2, + .extend_name = "raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_C, AD7758_VOLTAGE), + .scan_index = 10, + .scan_type = { +@@ -803,8 +781,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 2, + .extend_name = "raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_C, AD7758_CURRENT), + .scan_index = 11, + .scan_type = { +@@ -817,8 +793,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 2, + .extend_name = "apparent_raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_C, AD7758_APP_PWR), + .scan_index = 12, + .scan_type = { +@@ -831,8 +805,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 2, + .extend_name = "active_raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_C, AD7758_ACT_PWR), + .scan_index = 13, + .scan_type = { +@@ -845,8 +817,6 @@ static const struct iio_chan_spec ade775 + .indexed = 1, + .channel = 2, + .extend_name = "reactive_raw", +- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), +- .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), + .address = AD7758_WT(AD7758_PHASE_C, AD7758_REACT_PWR), + .scan_index = 14, + .scan_type = { +@@ -890,13 +860,14 @@ static int ade7758_probe(struct spi_devi + goto error_free_rx; + } + st->us = spi; +- st->ade7758_ring_channels = &ade7758_channels[0]; + mutex_init(&st->buf_lock); + + indio_dev->name = spi->dev.driver->name; + indio_dev->dev.parent = &spi->dev; + indio_dev->info = &ade7758_info; + indio_dev->modes = INDIO_DIRECT_MODE; ++ indio_dev->channels = ade7758_channels; ++ indio_dev->num_channels = ARRAY_SIZE(ade7758_channels); + + ret = ade7758_configure_ring(indio_dev); + if (ret) +--- a/drivers/staging/iio/meter/ade7758_ring.c ++++ b/drivers/staging/iio/meter/ade7758_ring.c +@@ -89,7 +89,6 @@ static irqreturn_t ade7758_trigger_handl + **/ + static int ade7758_ring_preenable(struct iio_dev *indio_dev) + { +- struct ade7758_state *st = iio_priv(indio_dev); + unsigned channel; + int ret; + +@@ -104,7 +103,7 @@ static int ade7758_ring_preenable(struct + indio_dev->masklength); + + ade7758_write_waveform_type(&indio_dev->dev, +- st->ade7758_ring_channels[channel].address); ++ indio_dev->channels[channel].address); + + return 0; + } diff --git a/queue-3.10/staging-iio-ade7758-remove-raw-from-channel-name.patch b/queue-3.10/staging-iio-ade7758-remove-raw-from-channel-name.patch new file mode 100644 index 00000000000..b9ec0eb2c3d --- /dev/null +++ b/queue-3.10/staging-iio-ade7758-remove-raw-from-channel-name.patch @@ -0,0 +1,151 @@ +From b598aacc29331e7e638cd509108600e916c6331b Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen +Date: Tue, 4 Nov 2014 18:03:16 +0100 +Subject: staging:iio:ade7758: Remove "raw" from channel name + +From: Lars-Peter Clausen + +commit b598aacc29331e7e638cd509108600e916c6331b upstream. + +"raw" is a property of a channel, but should not be part of the name of +channel. + +Signed-off-by: Lars-Peter Clausen +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/iio/meter/ade7758_core.c | 24 +++++++++--------------- + 1 file changed, 9 insertions(+), 15 deletions(-) + +--- a/drivers/staging/iio/meter/ade7758_core.c ++++ b/drivers/staging/iio/meter/ade7758_core.c +@@ -648,7 +648,6 @@ static const struct iio_chan_spec ade775 + .type = IIO_VOLTAGE, + .indexed = 1, + .channel = 0, +- .extend_name = "raw", + .address = AD7758_WT(AD7758_PHASE_A, AD7758_VOLTAGE), + .scan_index = 0, + .scan_type = { +@@ -660,7 +659,6 @@ static const struct iio_chan_spec ade775 + .type = IIO_CURRENT, + .indexed = 1, + .channel = 0, +- .extend_name = "raw", + .address = AD7758_WT(AD7758_PHASE_A, AD7758_CURRENT), + .scan_index = 1, + .scan_type = { +@@ -672,7 +670,7 @@ static const struct iio_chan_spec ade775 + .type = IIO_POWER, + .indexed = 1, + .channel = 0, +- .extend_name = "apparent_raw", ++ .extend_name = "apparent", + .address = AD7758_WT(AD7758_PHASE_A, AD7758_APP_PWR), + .scan_index = 2, + .scan_type = { +@@ -684,7 +682,7 @@ static const struct iio_chan_spec ade775 + .type = IIO_POWER, + .indexed = 1, + .channel = 0, +- .extend_name = "active_raw", ++ .extend_name = "active", + .address = AD7758_WT(AD7758_PHASE_A, AD7758_ACT_PWR), + .scan_index = 3, + .scan_type = { +@@ -696,7 +694,7 @@ static const struct iio_chan_spec ade775 + .type = IIO_POWER, + .indexed = 1, + .channel = 0, +- .extend_name = "reactive_raw", ++ .extend_name = "reactive", + .address = AD7758_WT(AD7758_PHASE_A, AD7758_REACT_PWR), + .scan_index = 4, + .scan_type = { +@@ -708,7 +706,6 @@ static const struct iio_chan_spec ade775 + .type = IIO_VOLTAGE, + .indexed = 1, + .channel = 1, +- .extend_name = "raw", + .address = AD7758_WT(AD7758_PHASE_B, AD7758_VOLTAGE), + .scan_index = 5, + .scan_type = { +@@ -720,7 +717,6 @@ static const struct iio_chan_spec ade775 + .type = IIO_CURRENT, + .indexed = 1, + .channel = 1, +- .extend_name = "raw", + .address = AD7758_WT(AD7758_PHASE_B, AD7758_CURRENT), + .scan_index = 6, + .scan_type = { +@@ -732,7 +728,7 @@ static const struct iio_chan_spec ade775 + .type = IIO_POWER, + .indexed = 1, + .channel = 1, +- .extend_name = "apparent_raw", ++ .extend_name = "apparent", + .address = AD7758_WT(AD7758_PHASE_B, AD7758_APP_PWR), + .scan_index = 7, + .scan_type = { +@@ -744,7 +740,7 @@ static const struct iio_chan_spec ade775 + .type = IIO_POWER, + .indexed = 1, + .channel = 1, +- .extend_name = "active_raw", ++ .extend_name = "active", + .address = AD7758_WT(AD7758_PHASE_B, AD7758_ACT_PWR), + .scan_index = 8, + .scan_type = { +@@ -756,7 +752,7 @@ static const struct iio_chan_spec ade775 + .type = IIO_POWER, + .indexed = 1, + .channel = 1, +- .extend_name = "reactive_raw", ++ .extend_name = "reactive", + .address = AD7758_WT(AD7758_PHASE_B, AD7758_REACT_PWR), + .scan_index = 9, + .scan_type = { +@@ -768,7 +764,6 @@ static const struct iio_chan_spec ade775 + .type = IIO_VOLTAGE, + .indexed = 1, + .channel = 2, +- .extend_name = "raw", + .address = AD7758_WT(AD7758_PHASE_C, AD7758_VOLTAGE), + .scan_index = 10, + .scan_type = { +@@ -780,7 +775,6 @@ static const struct iio_chan_spec ade775 + .type = IIO_CURRENT, + .indexed = 1, + .channel = 2, +- .extend_name = "raw", + .address = AD7758_WT(AD7758_PHASE_C, AD7758_CURRENT), + .scan_index = 11, + .scan_type = { +@@ -792,7 +786,7 @@ static const struct iio_chan_spec ade775 + .type = IIO_POWER, + .indexed = 1, + .channel = 2, +- .extend_name = "apparent_raw", ++ .extend_name = "apparent", + .address = AD7758_WT(AD7758_PHASE_C, AD7758_APP_PWR), + .scan_index = 12, + .scan_type = { +@@ -804,7 +798,7 @@ static const struct iio_chan_spec ade775 + .type = IIO_POWER, + .indexed = 1, + .channel = 2, +- .extend_name = "active_raw", ++ .extend_name = "active", + .address = AD7758_WT(AD7758_PHASE_C, AD7758_ACT_PWR), + .scan_index = 13, + .scan_type = { +@@ -816,7 +810,7 @@ static const struct iio_chan_spec ade775 + .type = IIO_POWER, + .indexed = 1, + .channel = 2, +- .extend_name = "reactive_raw", ++ .extend_name = "reactive", + .address = AD7758_WT(AD7758_PHASE_C, AD7758_REACT_PWR), + .scan_index = 14, + .scan_type = { diff --git a/queue-3.10/usb-cdc-acm-add-device-id-for-gw-instek-afg-2225.patch b/queue-3.10/usb-cdc-acm-add-device-id-for-gw-instek-afg-2225.patch new file mode 100644 index 00000000000..90a41854b2b --- /dev/null +++ b/queue-3.10/usb-cdc-acm-add-device-id-for-gw-instek-afg-2225.patch @@ -0,0 +1,30 @@ +From cf84a691a61606a2e7269907d3727e2d9fa148ee Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 27 Oct 2014 18:34:33 +0100 +Subject: USB: cdc-acm: add device id for GW Instek AFG-2225 + +From: Johan Hovold + +commit cf84a691a61606a2e7269907d3727e2d9fa148ee upstream. + +Add device-id entry for GW Instek AFG-2225, which has a byte swapped +bInterfaceSubClass (0x20). + +Reported-by: Karl Palsson +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/class/cdc-acm.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/class/cdc-acm.c ++++ b/drivers/usb/class/cdc-acm.c +@@ -1588,6 +1588,7 @@ static const struct usb_device_id acm_id + { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */ + .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ + }, ++ { USB_DEVICE(0x2184, 0x001c) }, /* GW Instek AFG-2225 */ + { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */ + }, + /* Motorola H24 HSPA module: */ diff --git a/queue-3.10/usb-cdc-acm-only-raise-dtr-on-transitions-from-b0.patch b/queue-3.10/usb-cdc-acm-only-raise-dtr-on-transitions-from-b0.patch new file mode 100644 index 00000000000..74bda5eea20 --- /dev/null +++ b/queue-3.10/usb-cdc-acm-only-raise-dtr-on-transitions-from-b0.patch @@ -0,0 +1,38 @@ +From 4473d054ceb572557954f9536731d39b20937b0c Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Wed, 5 Nov 2014 18:41:59 +0100 +Subject: USB: cdc-acm: only raise DTR on transitions from B0 + +From: Johan Hovold + +commit 4473d054ceb572557954f9536731d39b20937b0c upstream. + +Make sure to only raise DTR on transitions from B0 in set_termios. + +Also allow set_termios to be called from open with a termios_old of +NULL. Note that DTR will not be raised prematurely in this case. + +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/class/cdc-acm.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/drivers/usb/class/cdc-acm.c ++++ b/drivers/usb/class/cdc-acm.c +@@ -883,11 +883,12 @@ static void acm_tty_set_termios(struct t + /* FIXME: Needs to clear unsupported bits in the termios */ + acm->clocal = ((termios->c_cflag & CLOCAL) != 0); + +- if (!newline.dwDTERate) { ++ if (C_BAUD(tty) == B0) { + newline.dwDTERate = acm->line.dwDTERate; + newctrl &= ~ACM_CTRL_DTR; +- } else ++ } else if (termios_old && (termios_old->c_cflag & CBAUD) == B0) { + newctrl |= ACM_CTRL_DTR; ++ } + + if (newctrl != acm->ctrlout) + acm_set_control(acm, acm->ctrlout = newctrl); diff --git a/queue-3.10/usb-dwc3-gadget-properly-initialize-link-trb.patch b/queue-3.10/usb-dwc3-gadget-properly-initialize-link-trb.patch new file mode 100644 index 00000000000..f14c71d7719 --- /dev/null +++ b/queue-3.10/usb-dwc3-gadget-properly-initialize-link-trb.patch @@ -0,0 +1,42 @@ +From 1200a82a59b6aa65758ccc92c3447b98c53cd7a2 Mon Sep 17 00:00:00 2001 +From: Jack Pham +Date: Tue, 21 Oct 2014 16:31:10 -0700 +Subject: usb: dwc3: gadget: Properly initialize LINK TRB + +From: Jack Pham + +commit 1200a82a59b6aa65758ccc92c3447b98c53cd7a2 upstream. + +On ISOC endpoints the last trb_pool entry used as a +LINK TRB is not getting zeroed out correctly due to +memset being called incorrectly and in the wrong place. +If pool allocated from DMA was not zero-initialized +to begin with this will result in the size and ctrl +values being random garbage. Call memset correctly after +assignment of the trb_link pointer. + +Fixes: f6bafc6a1c ("usb: dwc3: convert TRBs into bitshifts") +Signed-off-by: Jack Pham +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/dwc3/gadget.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/drivers/usb/dwc3/gadget.c ++++ b/drivers/usb/dwc3/gadget.c +@@ -550,12 +550,11 @@ static int __dwc3_gadget_ep_enable(struc + if (!usb_endpoint_xfer_isoc(desc)) + return 0; + +- memset(&trb_link, 0, sizeof(trb_link)); +- + /* Link TRB for ISOC. The HWO bit is never reset */ + trb_st_hw = &dep->trb_pool[0]; + + trb_link = &dep->trb_pool[DWC3_TRB_NUM - 1]; ++ memset(trb_link, 0, sizeof(*trb_link)); + + trb_link->bpl = lower_32_bits(dwc3_trb_dma_offset(dep, trb_st_hw)); + trb_link->bph = upper_32_bits(dwc3_trb_dma_offset(dep, trb_st_hw)); diff --git a/queue-3.10/usb-option-add-haier-ce81b-cdma-modem.patch b/queue-3.10/usb-option-add-haier-ce81b-cdma-modem.patch new file mode 100644 index 00000000000..797f5556124 --- /dev/null +++ b/queue-3.10/usb-option-add-haier-ce81b-cdma-modem.patch @@ -0,0 +1,42 @@ +From 012eee1522318b5ccd64d277d50ac32f7e9974fe Mon Sep 17 00:00:00 2001 +From: Dan Williams +Date: Tue, 14 Oct 2014 11:10:41 -0500 +Subject: USB: option: add Haier CE81B CDMA modem + +From: Dan Williams + +commit 012eee1522318b5ccd64d277d50ac32f7e9974fe upstream. + +Port layout: + +0: QCDM/DIAG +1: NMEA +2: AT +3: AT/PPP + +Signed-off-by: Dan Williams +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -362,6 +362,7 @@ static void option_instat_callback(struc + + /* Haier products */ + #define HAIER_VENDOR_ID 0x201e ++#define HAIER_PRODUCT_CE81B 0x10f8 + #define HAIER_PRODUCT_CE100 0x2009 + + /* Cinterion (formerly Siemens) products */ +@@ -1620,6 +1621,7 @@ static const struct usb_device_id option + { USB_DEVICE(LONGCHEER_VENDOR_ID, ZOOM_PRODUCT_4597) }, + { USB_DEVICE(LONGCHEER_VENDOR_ID, IBALL_3_5G_CONNECT) }, + { USB_DEVICE(HAIER_VENDOR_ID, HAIER_PRODUCT_CE100) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(HAIER_VENDOR_ID, HAIER_PRODUCT_CE81B, 0xff, 0xff, 0xff) }, + /* Pirelli */ + { USB_DEVICE_INTERFACE_CLASS(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_C100_1, 0xff) }, + { USB_DEVICE_INTERFACE_CLASS(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_C100_2, 0xff) }, diff --git a/queue-3.10/usb-option-add-support-for-telit-le910.patch b/queue-3.10/usb-option-add-support-for-telit-le910.patch new file mode 100644 index 00000000000..bafd5370249 --- /dev/null +++ b/queue-3.10/usb-option-add-support-for-telit-le910.patch @@ -0,0 +1,52 @@ +From 2d0eb862dd477c3c4f32b201254ca0b40e6f465c Mon Sep 17 00:00:00 2001 +From: Daniele Palmas +Date: Tue, 14 Oct 2014 10:47:37 +0200 +Subject: usb: option: add support for Telit LE910 + +From: Daniele Palmas + +commit 2d0eb862dd477c3c4f32b201254ca0b40e6f465c upstream. + +Add VID/PID for Telit LE910 modem. Interfaces description is almost the +same than LE920, except that the qmi interface is number 2 (instead than +5). + +Signed-off-by: Daniele Palmas +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -269,6 +269,7 @@ static void option_instat_callback(struc + #define TELIT_PRODUCT_DE910_DUAL 0x1010 + #define TELIT_PRODUCT_UE910_V2 0x1012 + #define TELIT_PRODUCT_LE920 0x1200 ++#define TELIT_PRODUCT_LE910 0x1201 + + /* ZTE PRODUCTS */ + #define ZTE_VENDOR_ID 0x19d2 +@@ -588,6 +589,11 @@ static const struct option_blacklist_inf + .reserved = BIT(3) | BIT(4), + }; + ++static const struct option_blacklist_info telit_le910_blacklist = { ++ .sendsetup = BIT(0), ++ .reserved = BIT(1) | BIT(2), ++}; ++ + static const struct option_blacklist_info telit_le920_blacklist = { + .sendsetup = BIT(0), + .reserved = BIT(1) | BIT(5), +@@ -1137,6 +1143,8 @@ static const struct usb_device_id option + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UE910_V2) }, ++ { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910), ++ .driver_info = (kernel_ulong_t)&telit_le910_blacklist }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920), + .driver_info = (kernel_ulong_t)&telit_le920_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ diff --git a/queue-3.10/usb-serial-cp210x-add-silicon-labs-358x-vid-and-pid.patch b/queue-3.10/usb-serial-cp210x-add-silicon-labs-358x-vid-and-pid.patch new file mode 100644 index 00000000000..b80f7e0bb29 --- /dev/null +++ b/queue-3.10/usb-serial-cp210x-add-silicon-labs-358x-vid-and-pid.patch @@ -0,0 +1,31 @@ +From 35cc83eab097e5720a9cc0ec12bdc3a726f58381 Mon Sep 17 00:00:00 2001 +From: Nathaniel Ting +Date: Fri, 3 Oct 2014 12:01:20 -0400 +Subject: USB: serial: cp210x: add Silicon Labs 358x VID and PID + +From: Nathaniel Ting + +commit 35cc83eab097e5720a9cc0ec12bdc3a726f58381 upstream. + +Enable Silicon Labs Ember VID chips to enumerate with the cp210x usb serial +driver. EM358x devices operating with the Ember Z-Net 5.1.2 stack may now +connect to host PCs over a USB serial link. + +Signed-off-by: Nathaniel Ting +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/cp210x.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/cp210x.c ++++ b/drivers/usb/serial/cp210x.c +@@ -155,6 +155,7 @@ static const struct usb_device_id id_tab + { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ + { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */ + { USB_DEVICE(0x1B1C, 0x1C00) }, /* Corsair USB Dongle */ ++ { USB_DEVICE(0x1BA4, 0x0002) }, /* Silicon Labs 358x factory default */ + { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */ + { USB_DEVICE(0x1D6F, 0x0010) }, /* Seluxit ApS RF Dongle */ + { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */ diff --git a/queue-3.10/usb-serial-ftdi_sio-add-awinda-station-and-dongle-products.patch b/queue-3.10/usb-serial-ftdi_sio-add-awinda-station-and-dongle-products.patch new file mode 100644 index 00000000000..eab34d648a8 --- /dev/null +++ b/queue-3.10/usb-serial-ftdi_sio-add-awinda-station-and-dongle-products.patch @@ -0,0 +1,50 @@ +From edd74ffab1f6909eee400c7de8ce621870aacac9 Mon Sep 17 00:00:00 2001 +From: Frans Klaver +Date: Fri, 10 Oct 2014 11:52:08 +0200 +Subject: usb: serial: ftdi_sio: add Awinda Station and Dongle products + +From: Frans Klaver + +commit edd74ffab1f6909eee400c7de8ce621870aacac9 upstream. + +Add new IDs for the Xsens Awinda Station and Awinda Dongle. + +While at it, order the definitions by PID and add a logical separation +between devices using Xsens' VID and those using FTDI's VID. + +Signed-off-by: Frans Klaver +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/ftdi_sio.c | 2 ++ + drivers/usb/serial/ftdi_sio_ids.h | 6 +++++- + 2 files changed, 7 insertions(+), 1 deletion(-) + +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -677,6 +677,8 @@ static struct usb_device_id id_table_com + { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_5_PID) }, + { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_6_PID) }, + { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_7_PID) }, ++ { USB_DEVICE(XSENS_VID, XSENS_AWINDA_DONGLE_PID) }, ++ { USB_DEVICE(XSENS_VID, XSENS_AWINDA_STATION_PID) }, + { USB_DEVICE(XSENS_VID, XSENS_CONVERTER_PID) }, + { USB_DEVICE(XSENS_VID, XSENS_MTW_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_OMNI1509) }, +--- a/drivers/usb/serial/ftdi_sio_ids.h ++++ b/drivers/usb/serial/ftdi_sio_ids.h +@@ -143,8 +143,12 @@ + * Xsens Technologies BV products (http://www.xsens.com). + */ + #define XSENS_VID 0x2639 +-#define XSENS_CONVERTER_PID 0xD00D /* Xsens USB-serial converter */ ++#define XSENS_AWINDA_STATION_PID 0x0101 ++#define XSENS_AWINDA_DONGLE_PID 0x0102 + #define XSENS_MTW_PID 0x0200 /* Xsens MTw */ ++#define XSENS_CONVERTER_PID 0xD00D /* Xsens USB-serial converter */ ++ ++/* Xsens devices using FTDI VID */ + #define XSENS_CONVERTER_0_PID 0xD388 /* Xsens USB converter */ + #define XSENS_CONVERTER_1_PID 0xD389 /* Xsens Wireless Receiver */ + #define XSENS_CONVERTER_2_PID 0xD38A diff --git a/queue-3.10/usb-serial-ftdi_sio-add-bricked-ftdi-device-pid.patch b/queue-3.10/usb-serial-ftdi_sio-add-bricked-ftdi-device-pid.patch new file mode 100644 index 00000000000..b8f472f19cc --- /dev/null +++ b/queue-3.10/usb-serial-ftdi_sio-add-bricked-ftdi-device-pid.patch @@ -0,0 +1,54 @@ +From 7f2719f0003da1ad13124ef00f48d7514c79e30d Mon Sep 17 00:00:00 2001 +From: Perry Hung +Date: Wed, 22 Oct 2014 23:31:34 -0400 +Subject: usb: serial: ftdi_sio: add "bricked" FTDI device PID + +From: Perry Hung + +commit 7f2719f0003da1ad13124ef00f48d7514c79e30d upstream. + +An official recent Windows driver from FTDI detects counterfeit devices +and reprograms the internal EEPROM containing the USB PID to 0, effectively +bricking the device. + +Add support for this VID/PID pair to correctly bind the driver on these +devices. + +See: +http://hackaday.com/2014/10/22/watch-that-windows-update-ftdi-drivers-are-killing-fake-chips/ + +Signed-off-by: Perry Hung +Acked-by: Greg Kroah-Hartman +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/ftdi_sio.c | 1 + + drivers/usb/serial/ftdi_sio_ids.h | 6 ++++++ + 2 files changed, 7 insertions(+) + +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -148,6 +148,7 @@ static struct ftdi_sio_quirk ftdi_8u2232 + * /sys/bus/usb/ftdi_sio/new_id, then send patch/report! + */ + static struct usb_device_id id_table_combined [] = { ++ { USB_DEVICE(FTDI_VID, FTDI_BRICK_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ZEITCONTROL_TAGTRACE_MIFARE_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_CTI_MINI_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_CTI_NANO_PID) }, +--- a/drivers/usb/serial/ftdi_sio_ids.h ++++ b/drivers/usb/serial/ftdi_sio_ids.h +@@ -30,6 +30,12 @@ + + /*** third-party PIDs (using FTDI_VID) ***/ + ++/* ++ * Certain versions of the official Windows FTDI driver reprogrammed ++ * counterfeit FTDI devices to PID 0. Support these devices anyway. ++ */ ++#define FTDI_BRICK_PID 0x0000 ++ + #define FTDI_LUMEL_PD12_PID 0x6002 + + /* diff --git a/queue-3.10/wireless-rt2x00-add-new-rt2800usb-device.patch b/queue-3.10/wireless-rt2x00-add-new-rt2800usb-device.patch new file mode 100644 index 00000000000..47cea8eb9e2 --- /dev/null +++ b/queue-3.10/wireless-rt2x00-add-new-rt2800usb-device.patch @@ -0,0 +1,32 @@ +From 664d6a792785cc677c2091038ce10322c8d04ae1 Mon Sep 17 00:00:00 2001 +From: Cyril Brulebois +Date: Tue, 28 Oct 2014 16:42:41 +0100 +Subject: wireless: rt2x00: add new rt2800usb device + +From: Cyril Brulebois + +commit 664d6a792785cc677c2091038ce10322c8d04ae1 upstream. + +0x1b75 0xa200 AirLive WN-200USB wireless 11b/g/n dongle + +References: https://bugs.debian.org/766802 +Reported-by: Martin Mokrejs +Signed-off-by: Cyril Brulebois +Acked-by: Stanislaw Gruszka +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/rt2x00/rt2800usb.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/net/wireless/rt2x00/rt2800usb.c ++++ b/drivers/net/wireless/rt2x00/rt2800usb.c +@@ -1091,6 +1091,7 @@ static struct usb_device_id rt2800usb_de + /* Ovislink */ + { USB_DEVICE(0x1b75, 0x3071) }, + { USB_DEVICE(0x1b75, 0x3072) }, ++ { USB_DEVICE(0x1b75, 0xa200) }, + /* Para */ + { USB_DEVICE(0x20b8, 0x8888) }, + /* Pegatron */ -- 2.47.3