From: Greg Kroah-Hartman Date: Fri, 19 Jun 2015 18:16:58 +0000 (-0700) Subject: 4.0-stable patches X-Git-Tag: v3.10.81~14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0549a60cf218e5745702984b39761cd33acf3fbc;p=thirdparty%2Fkernel%2Fstable-queue.git 4.0-stable patches added patches: alsa-hda-realtek-add-a-fixup-for-another-acer-aspire-9420.patch alsa-usb-audio-add-maya44-usb-mixer-control-names.patch alsa-usb-audio-add-mic-volume-fix-quirk-for-logitech-quickcam-fusion.patch alsa-usb-audio-add-native-dsd-support-for-jlsounds-i2soverusb.patch alsa-usb-audio-don-t-try-to-get-outlaw-rr2150-sample-rate.patch alsa-usb-audio-fix-missing-input-volume-controls-in-maya44-usb.patch drivers-base-cacheinfo-handle-absence-of-caches.patch iio-adc-twl6030-gpadc-fix-modalias.patch iio-adis16400-compute-the-scan-mask-from-channel-indices.patch iio-adis16400-fix-burst-mode.patch iio-adis16400-fix-burst-transfer-for-adis16448.patch iio-adis16400-report-pressure-channel-scale.patch iio-adis16400-use-channel-indices-for-the-two-voltage-channels.patch iommu-vt-d-allow-rmrr-on-graphics-devices-too.patch iommu-vt-d-fix-passthrough-mode-with-translation-disabled-devices.patch n_tty-fix-auditing-support-for-cannonical-mode.patch --- diff --git a/queue-4.0/alsa-hda-realtek-add-a-fixup-for-another-acer-aspire-9420.patch b/queue-4.0/alsa-hda-realtek-add-a-fixup-for-another-acer-aspire-9420.patch new file mode 100644 index 00000000000..32b003377da --- /dev/null +++ b/queue-4.0/alsa-hda-realtek-add-a-fixup-for-another-acer-aspire-9420.patch @@ -0,0 +1,30 @@ +From b5d724b1add6eabf3aa7276ab3454ea9f45eebd3 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 2 Jun 2015 19:57:08 +0200 +Subject: ALSA: hda/realtek - Add a fixup for another Acer Aspire 9420 + +From: Takashi Iwai + +commit b5d724b1add6eabf3aa7276ab3454ea9f45eebd3 upstream. + +Acer Aspire 9420 with ALC883 (1025:0107) needs the fixup for EAPD to +make the sound working like other Aspire models. + +Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=94111 +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -2167,6 +2167,7 @@ static const struct hda_fixup alc882_fix + static const struct snd_pci_quirk alc882_fixup_tbl[] = { + SND_PCI_QUIRK(0x1025, 0x006c, "Acer Aspire 9810", ALC883_FIXUP_ACER_EAPD), + SND_PCI_QUIRK(0x1025, 0x0090, "Acer Aspire", ALC883_FIXUP_ACER_EAPD), ++ SND_PCI_QUIRK(0x1025, 0x0107, "Acer Aspire", ALC883_FIXUP_ACER_EAPD), + SND_PCI_QUIRK(0x1025, 0x010a, "Acer Ferrari 5000", ALC883_FIXUP_ACER_EAPD), + SND_PCI_QUIRK(0x1025, 0x0110, "Acer Aspire", ALC883_FIXUP_ACER_EAPD), + SND_PCI_QUIRK(0x1025, 0x0112, "Acer Aspire 9303", ALC883_FIXUP_ACER_EAPD), diff --git a/queue-4.0/alsa-usb-audio-add-maya44-usb-mixer-control-names.patch b/queue-4.0/alsa-usb-audio-add-maya44-usb-mixer-control-names.patch new file mode 100644 index 00000000000..ed98f208857 --- /dev/null +++ b/queue-4.0/alsa-usb-audio-add-maya44-usb-mixer-control-names.patch @@ -0,0 +1,35 @@ +From 044bddb9ca8d49edb91bc22b9940a463b0dbb97f Mon Sep 17 00:00:00 2001 +From: Clemens Ladisch +Date: Wed, 3 Jun 2015 11:36:42 +0200 +Subject: ALSA: usb-audio: add MAYA44 USB+ mixer control names + +From: Clemens Ladisch + +commit 044bddb9ca8d49edb91bc22b9940a463b0dbb97f upstream. + +Add mixer control names for the ESI Maya44 USB+ (which appears to be +identical width the AudioTrak Maya44 USB). + +Reported-by: nightmixes +Signed-off-by: Clemens Ladisch +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/usb/mixer_maps.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/sound/usb/mixer_maps.c ++++ b/sound/usb/mixer_maps.c +@@ -437,6 +437,11 @@ static struct usbmix_ctl_map usbmix_ctl_ + .map = ebox44_map, + }, + { ++ /* MAYA44 USB+ */ ++ .id = USB_ID(0x2573, 0x0008), ++ .map = maya44_map, ++ }, ++ { + /* KEF X300A */ + .id = USB_ID(0x27ac, 0x1000), + .map = scms_usb3318_map, diff --git a/queue-4.0/alsa-usb-audio-add-mic-volume-fix-quirk-for-logitech-quickcam-fusion.patch b/queue-4.0/alsa-usb-audio-add-mic-volume-fix-quirk-for-logitech-quickcam-fusion.patch new file mode 100644 index 00000000000..05c847a54a4 --- /dev/null +++ b/queue-4.0/alsa-usb-audio-add-mic-volume-fix-quirk-for-logitech-quickcam-fusion.patch @@ -0,0 +1,34 @@ +From 1ef9f0583514508bc93427106ceef3215e4eb1a5 Mon Sep 17 00:00:00 2001 +From: Wolfram Sang +Date: Fri, 29 May 2015 19:50:56 +0900 +Subject: ALSA: usb-audio: Add mic volume fix quirk for Logitech Quickcam Fusion + +From: Wolfram Sang + +commit 1ef9f0583514508bc93427106ceef3215e4eb1a5 upstream. + +Fix this from the logs: + +usb 7-1: New USB device found, idVendor=046d, idProduct=08ca +... +usb 7-1: Warning! Unlikely big volume range (=3072), cval->res is probably wrong. +usb 7-1: [5] FU [Mic Capture Volume] ch = 1, val = 4608/7680/1 + +Signed-off-by: Wolfram Sang +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/usb/mixer.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/usb/mixer.c ++++ b/sound/usb/mixer.c +@@ -918,6 +918,7 @@ static void volume_control_quirks(struct + case USB_ID(0x046d, 0x081d): /* HD Webcam c510 */ + case USB_ID(0x046d, 0x0825): /* HD Webcam c270 */ + case USB_ID(0x046d, 0x0826): /* HD Webcam c525 */ ++ case USB_ID(0x046d, 0x08ca): /* Logitech Quickcam Fusion */ + case USB_ID(0x046d, 0x0991): + /* Most audio usb devices lie about volume resolution. + * Most Logitech webcams have res = 384. diff --git a/queue-4.0/alsa-usb-audio-add-native-dsd-support-for-jlsounds-i2soverusb.patch b/queue-4.0/alsa-usb-audio-add-native-dsd-support-for-jlsounds-i2soverusb.patch new file mode 100644 index 00000000000..f9c09ea5343 --- /dev/null +++ b/queue-4.0/alsa-usb-audio-add-native-dsd-support-for-jlsounds-i2soverusb.patch @@ -0,0 +1,33 @@ +From 3b7e5c7e36ed4a046bbea6d36c9be9d1d6107ae0 Mon Sep 17 00:00:00 2001 +From: Jurgen Kramer +Date: Fri, 5 Jun 2015 09:42:49 +0200 +Subject: ALSA: usb-audio: add native DSD support for JLsounds I2SoverUSB + +From: Jurgen Kramer + +commit 3b7e5c7e36ed4a046bbea6d36c9be9d1d6107ae0 upstream. + +This patch adds native DSD support for the XMOS based JLsounds I2SoverUSB board + +Signed-off-by: Jurgen Kramer +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/usb/quirks.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/sound/usb/quirks.c ++++ b/sound/usb/quirks.c +@@ -1267,8 +1267,9 @@ u64 snd_usb_interface_dsd_format_quirks( + if (fp->altsetting == 2) + return SNDRV_PCM_FMTBIT_DSD_U32_BE; + break; +- /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */ +- case USB_ID(0x20b1, 0x2009): ++ ++ case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */ ++ case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */ + if (fp->altsetting == 3) + return SNDRV_PCM_FMTBIT_DSD_U32_BE; + break; diff --git a/queue-4.0/alsa-usb-audio-don-t-try-to-get-outlaw-rr2150-sample-rate.patch b/queue-4.0/alsa-usb-audio-don-t-try-to-get-outlaw-rr2150-sample-rate.patch new file mode 100644 index 00000000000..0c860321824 --- /dev/null +++ b/queue-4.0/alsa-usb-audio-don-t-try-to-get-outlaw-rr2150-sample-rate.patch @@ -0,0 +1,36 @@ +From 2f80b2958abe5658000d5ad9b45a36ecf879666e Mon Sep 17 00:00:00 2001 +From: Eric Wong +Date: Sat, 30 May 2015 09:15:39 +0000 +Subject: ALSA: usb-audio: don't try to get Outlaw RR2150 sample rate + +From: Eric Wong + +commit 2f80b2958abe5658000d5ad9b45a36ecf879666e upstream. + +This quirk allows us to avoid the noisy: + + current rate 0 is different from the runtime rate + +message every time playback starts. While USB DAC in the RR2150 +supports reading the sample rate, it never returns a sample rate +other than zero in my observation with common sample rates. + +Signed-off-by: Eric Wong +Cc: Joe Turner +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/usb/quirks.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/usb/quirks.c ++++ b/sound/usb/quirks.c +@@ -1120,6 +1120,7 @@ bool snd_usb_get_sample_rate_quirk(struc + case USB_ID(0x045E, 0x0772): /* MS Lifecam Studio */ + case USB_ID(0x045E, 0x0779): /* MS Lifecam HD-3000 */ + case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */ ++ case USB_ID(0x074D, 0x3553): /* Outlaw RR2150 (Micronas UAC3553B) */ + return true; + } + return false; diff --git a/queue-4.0/alsa-usb-audio-fix-missing-input-volume-controls-in-maya44-usb.patch b/queue-4.0/alsa-usb-audio-fix-missing-input-volume-controls-in-maya44-usb.patch new file mode 100644 index 00000000000..482cb5cea6b --- /dev/null +++ b/queue-4.0/alsa-usb-audio-fix-missing-input-volume-controls-in-maya44-usb.patch @@ -0,0 +1,52 @@ +From ea114fc27dc0cb9a550b6add5426720feb66262a Mon Sep 17 00:00:00 2001 +From: Clemens Ladisch +Date: Wed, 3 Jun 2015 11:36:51 +0200 +Subject: ALSA: usb-audio: fix missing input volume controls in MAYA44 USB(+) + +From: Clemens Ladisch + +commit ea114fc27dc0cb9a550b6add5426720feb66262a upstream. + +The driver worked around an error in the MAYA44 USB(+)'s mixer unit +descriptor by aborting before parsing the missing field. However, +aborting parsing too early prevented parsing of the other units +connected to this unit, so the capture mixer controls would be missing. + +Fix this by moving the check for this descriptor error after the parsing +of the unit's input pins. + +Reported-by: nightmixes +Tested-by: nightmixes +Signed-off-by: Clemens Ladisch +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/usb/mixer.c | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +--- a/sound/usb/mixer.c ++++ b/sound/usb/mixer.c +@@ -1583,12 +1583,6 @@ static int parse_audio_mixer_unit(struct + unitid); + return -EINVAL; + } +- /* no bmControls field (e.g. Maya44) -> ignore */ +- if (desc->bLength <= 10 + input_pins) { +- usb_audio_dbg(state->chip, "MU %d has no bmControls field\n", +- unitid); +- return 0; +- } + + num_ins = 0; + ich = 0; +@@ -1596,6 +1590,9 @@ static int parse_audio_mixer_unit(struct + err = parse_audio_unit(state, desc->baSourceID[pin]); + if (err < 0) + continue; ++ /* no bmControls field (e.g. Maya44) -> ignore */ ++ if (desc->bLength <= 10 + input_pins) ++ continue; + err = check_input_term(state, desc->baSourceID[pin], &iterm); + if (err < 0) + return err; diff --git a/queue-4.0/drivers-base-cacheinfo-handle-absence-of-caches.patch b/queue-4.0/drivers-base-cacheinfo-handle-absence-of-caches.patch new file mode 100644 index 00000000000..2dfaba074d7 --- /dev/null +++ b/queue-4.0/drivers-base-cacheinfo-handle-absence-of-caches.patch @@ -0,0 +1,52 @@ +From 3370e13aa463adb84488ebf0e599e3dc0024315b Mon Sep 17 00:00:00 2001 +From: Sudeep Holla +Date: Wed, 27 May 2015 11:26:13 +0100 +Subject: drivers/base: cacheinfo: handle absence of caches + +From: Sudeep Holla + +commit 3370e13aa463adb84488ebf0e599e3dc0024315b upstream. + +On some simulators like GEM5, caches may not be simulated. In those +cases, the cache levels and leaves will be zero and will result in +following exception: + +Unable to handle kernel NULL pointer dereference at virtual address 0040 +pgd = ffffffc0008fa000 +[00000040] *pgd=00000009f6807003, *pud=00000009f6807003, + *pmd=00000009f6808003, *pte=006000002c010707 +Internal error: Oops: 96000005 [#1] PREEMPT SMP +Modules linked in: +CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.1.0-rc5 #198 +task: ffffffc9768a0000 ti: ffffffc9768a8000 task.ti: ffffffc9768a8000 +PC is at detect_cache_attributes+0x98/0x2c8 +LR is at detect_cache_attributes+0x88/0x2c8 + +kcalloc(0) returns a special value ZERO_SIZE_PTR which is non-NULL value +but results in fault only on any attempt to dereferencing it. So +checking for the non-NULL pointer will not suffice. + +This patch checks for non-zero cache leaf nodes and returns error if +there are no cache leaves in detect_cache_attributes. + +Cc: Will Deacon +Cc: Greg Kroah-Hartman +Reported-by: William Wang +Signed-off-by: Sudeep Holla +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/base/cacheinfo.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/base/cacheinfo.c ++++ b/drivers/base/cacheinfo.c +@@ -179,7 +179,7 @@ static int detect_cache_attributes(unsig + { + int ret; + +- if (init_cache_level(cpu)) ++ if (init_cache_level(cpu) || !cache_leaves(cpu)) + return -ENOENT; + + per_cpu_cacheinfo(cpu) = kcalloc(cache_leaves(cpu), diff --git a/queue-4.0/iio-adc-twl6030-gpadc-fix-modalias.patch b/queue-4.0/iio-adc-twl6030-gpadc-fix-modalias.patch new file mode 100644 index 00000000000..d705ded5cab --- /dev/null +++ b/queue-4.0/iio-adc-twl6030-gpadc-fix-modalias.patch @@ -0,0 +1,30 @@ +From e5d732186270e0881f47d95610316c0614b21c3e Mon Sep 17 00:00:00 2001 +From: Axel Lin +Date: Wed, 20 May 2015 08:53:20 +0800 +Subject: iio: adc: twl6030-gpadc: Fix modalias + +From: Axel Lin + +commit e5d732186270e0881f47d95610316c0614b21c3e upstream. + +Remove extra space between platform prefix and DRIVER_NAME in MODULE_ALIAS. + +Signed-off-by: Axel Lin +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/iio/adc/twl6030-gpadc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/iio/adc/twl6030-gpadc.c ++++ b/drivers/iio/adc/twl6030-gpadc.c +@@ -1001,7 +1001,7 @@ static struct platform_driver twl6030_gp + + module_platform_driver(twl6030_gpadc_driver); + +-MODULE_ALIAS("platform: " DRIVER_NAME); ++MODULE_ALIAS("platform:" DRIVER_NAME); + MODULE_AUTHOR("Balaji T K "); + MODULE_AUTHOR("Graeme Gregory "); + MODULE_AUTHOR("Oleksandr Kozaruk +Date: Fri, 15 May 2015 17:18:36 +0200 +Subject: iio: adis16400: Compute the scan mask from channel indices + +From: Paul Cercueil + +commit c2a8b623a089d52c199e305e7905829907db8ec8 upstream. + +We unfortunately can't use ~0UL for the scan mask to indicate that the +only valid scan mask is all channels selected. The IIO core needs the exact +mask to work correctly and not a super-set of it. So calculate the masked +based on the channels that are available for a particular device. + +Signed-off-by: Paul Cercueil +Signed-off-by: Lars-Peter Clausen +Fixes: 5eda3550a3cc ("staging:iio:adis16400: Preallocate transfer message") +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/iio/imu/adis16400.h | 1 + + drivers/iio/imu/adis16400_core.c | 25 ++++++++++++++++++------- + 2 files changed, 19 insertions(+), 7 deletions(-) + +--- a/drivers/iio/imu/adis16400.h ++++ b/drivers/iio/imu/adis16400.h +@@ -165,6 +165,7 @@ struct adis16400_state { + int filt_int; + + struct adis adis; ++ unsigned long avail_scan_mask[2]; + }; + + /* At the moment triggers are only used for ring buffer +--- a/drivers/iio/imu/adis16400_core.c ++++ b/drivers/iio/imu/adis16400_core.c +@@ -796,11 +796,6 @@ static const struct iio_info adis16400_i + .debugfs_reg_access = adis_debugfs_reg_access, + }; + +-static const unsigned long adis16400_burst_scan_mask[] = { +- ~0UL, +- 0, +-}; +- + static const char * const adis16400_status_error_msgs[] = { + [ADIS16400_DIAG_STAT_ZACCL_FAIL] = "Z-axis accelerometer self-test failure", + [ADIS16400_DIAG_STAT_YACCL_FAIL] = "Y-axis accelerometer self-test failure", +@@ -848,6 +843,20 @@ static const struct adis_data adis16400_ + BIT(ADIS16400_DIAG_STAT_POWER_LOW), + }; + ++static void adis16400_setup_chan_mask(struct adis16400_state *st) ++{ ++ const struct adis16400_chip_info *chip_info = st->variant; ++ unsigned i; ++ ++ for (i = 0; i < chip_info->num_channels; i++) { ++ const struct iio_chan_spec *ch = &chip_info->channels[i]; ++ ++ if (ch->scan_index >= 0 && ++ ch->scan_index != ADIS16400_SCAN_TIMESTAMP) ++ st->avail_scan_mask[0] |= BIT(ch->scan_index); ++ } ++} ++ + static int adis16400_probe(struct spi_device *spi) + { + struct adis16400_state *st; +@@ -871,8 +880,10 @@ static int adis16400_probe(struct spi_de + indio_dev->info = &adis16400_info; + indio_dev->modes = INDIO_DIRECT_MODE; + +- if (!(st->variant->flags & ADIS16400_NO_BURST)) +- indio_dev->available_scan_masks = adis16400_burst_scan_mask; ++ if (!(st->variant->flags & ADIS16400_NO_BURST)) { ++ adis16400_setup_chan_mask(st); ++ indio_dev->available_scan_masks = st->avail_scan_mask; ++ } + + ret = adis_init(&st->adis, indio_dev, spi, &adis16400_data); + if (ret) diff --git a/queue-4.0/iio-adis16400-fix-burst-mode.patch b/queue-4.0/iio-adis16400-fix-burst-mode.patch new file mode 100644 index 00000000000..ab8c5fd3cdb --- /dev/null +++ b/queue-4.0/iio-adis16400-fix-burst-mode.patch @@ -0,0 +1,77 @@ +From 9df560350c90f3d3909fe653399b3584c9a17b61 Mon Sep 17 00:00:00 2001 +From: Paul Cercueil +Date: Fri, 15 May 2015 17:18:37 +0200 +Subject: iio: adis16400: Fix burst mode + +From: Paul Cercueil + +commit 9df560350c90f3d3909fe653399b3584c9a17b61 upstream. + +There are a few issues with the burst mode support. For one we don't setup +the rx buffer, so the buffer will never be filled and all samples will read +as the zero. Furthermore the tx buffer has the wrong type, which means the +driver sends the wrong command and not the right data is returned. + +The final issue is that in burst mode all channels are transferred. Hence +the length of the transfer length should be the number of hardware +channels * 2 bytes. Currently the driver uses indio_dev->scan_bytes for +this. But if the timestamp channel is enabled the scan_bytes will be larger +than the burst length. Fix this by just calculating the burst length based +on the number of hardware channels. + +Signed-off-by: Paul Cercueil +Signed-off-by: Lars-Peter Clausen +Fixes: 5eda3550a3cc ("staging:iio:adis16400: Preallocate transfer message") +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/iio/imu/adis16400_buffer.c | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +--- a/drivers/iio/imu/adis16400_buffer.c ++++ b/drivers/iio/imu/adis16400_buffer.c +@@ -18,7 +18,8 @@ int adis16400_update_scan_mode(struct ii + { + struct adis16400_state *st = iio_priv(indio_dev); + struct adis *adis = &st->adis; +- uint16_t *tx; ++ unsigned int burst_length; ++ u8 *tx; + + if (st->variant->flags & ADIS16400_NO_BURST) + return adis_update_scan_mode(indio_dev, scan_mask); +@@ -26,26 +27,27 @@ int adis16400_update_scan_mode(struct ii + kfree(adis->xfer); + kfree(adis->buffer); + ++ /* All but the timestamp channel */ ++ burst_length = (indio_dev->num_channels - 1) * sizeof(u16); ++ + adis->xfer = kcalloc(2, sizeof(*adis->xfer), GFP_KERNEL); + if (!adis->xfer) + return -ENOMEM; + +- adis->buffer = kzalloc(indio_dev->scan_bytes + sizeof(u16), +- GFP_KERNEL); ++ adis->buffer = kzalloc(burst_length + sizeof(u16), GFP_KERNEL); + if (!adis->buffer) + return -ENOMEM; + +- tx = adis->buffer + indio_dev->scan_bytes; +- ++ tx = adis->buffer + burst_length; + tx[0] = ADIS_READ_REG(ADIS16400_GLOB_CMD); + tx[1] = 0; + + adis->xfer[0].tx_buf = tx; + adis->xfer[0].bits_per_word = 8; + adis->xfer[0].len = 2; +- adis->xfer[1].tx_buf = tx; ++ adis->xfer[1].rx_buf = adis->buffer; + adis->xfer[1].bits_per_word = 8; +- adis->xfer[1].len = indio_dev->scan_bytes; ++ adis->xfer[1].len = burst_length; + + spi_message_init(&adis->msg); + spi_message_add_tail(&adis->xfer[0], &adis->msg); diff --git a/queue-4.0/iio-adis16400-fix-burst-transfer-for-adis16448.patch b/queue-4.0/iio-adis16400-fix-burst-transfer-for-adis16448.patch new file mode 100644 index 00000000000..a3876877347 --- /dev/null +++ b/queue-4.0/iio-adis16400-fix-burst-transfer-for-adis16448.patch @@ -0,0 +1,80 @@ +From d046ba268adb87c7780494ecf897cbafbf100d57 Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen +Date: Fri, 15 May 2015 17:18:38 +0200 +Subject: iio: adis16400: Fix burst transfer for adis16448 + +From: Lars-Peter Clausen + +commit d046ba268adb87c7780494ecf897cbafbf100d57 upstream. + +The adis16448, unlike the other chips in this family, in addition to the +hardware channels also sends out the DIAG_STAT register in burst mode +before them. Handle that case by skipping over the first 2 bytes before we +pass the received data to the buffer. + +Signed-off-by: Lars-Peter Clausen +Fixes: 76ada52f7f5d ("iio:adis16400: Add support for the adis16448") +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/iio/imu/adis16400.h | 1 + + drivers/iio/imu/adis16400_buffer.c | 10 +++++++++- + drivers/iio/imu/adis16400_core.c | 3 ++- + 3 files changed, 12 insertions(+), 2 deletions(-) + +--- a/drivers/iio/imu/adis16400.h ++++ b/drivers/iio/imu/adis16400.h +@@ -139,6 +139,7 @@ + #define ADIS16400_NO_BURST BIT(1) + #define ADIS16400_HAS_SLOW_MODE BIT(2) + #define ADIS16400_HAS_SERIAL_NUMBER BIT(3) ++#define ADIS16400_BURST_DIAG_STAT BIT(4) + + struct adis16400_state; + +--- a/drivers/iio/imu/adis16400_buffer.c ++++ b/drivers/iio/imu/adis16400_buffer.c +@@ -29,6 +29,8 @@ int adis16400_update_scan_mode(struct ii + + /* All but the timestamp channel */ + burst_length = (indio_dev->num_channels - 1) * sizeof(u16); ++ if (st->variant->flags & ADIS16400_BURST_DIAG_STAT) ++ burst_length += sizeof(u16); + + adis->xfer = kcalloc(2, sizeof(*adis->xfer), GFP_KERNEL); + if (!adis->xfer) +@@ -63,6 +65,7 @@ irqreturn_t adis16400_trigger_handler(in + struct adis16400_state *st = iio_priv(indio_dev); + struct adis *adis = &st->adis; + u32 old_speed_hz = st->adis.spi->max_speed_hz; ++ void *buffer; + int ret; + + if (!adis->buffer) +@@ -83,7 +86,12 @@ irqreturn_t adis16400_trigger_handler(in + spi_setup(st->adis.spi); + } + +- iio_push_to_buffers_with_timestamp(indio_dev, adis->buffer, ++ if (st->variant->flags & ADIS16400_BURST_DIAG_STAT) ++ buffer = adis->buffer + sizeof(u16); ++ else ++ buffer = adis->buffer; ++ ++ iio_push_to_buffers_with_timestamp(indio_dev, buffer, + pf->timestamp); + + iio_trigger_notify_done(indio_dev->trig); +--- a/drivers/iio/imu/adis16400_core.c ++++ b/drivers/iio/imu/adis16400_core.c +@@ -778,7 +778,8 @@ static struct adis16400_chip_info adis16 + .channels = adis16448_channels, + .num_channels = ARRAY_SIZE(adis16448_channels), + .flags = ADIS16400_HAS_PROD_ID | +- ADIS16400_HAS_SERIAL_NUMBER, ++ ADIS16400_HAS_SERIAL_NUMBER | ++ ADIS16400_BURST_DIAG_STAT, + .gyro_scale_micro = IIO_DEGREE_TO_RAD(10000), /* 0.01 deg/s */ + .accel_scale_micro = IIO_G_TO_M_S_2(833), /* 1/1200 g */ + .temp_scale_nano = 73860000, /* 0.07386 C */ diff --git a/queue-4.0/iio-adis16400-report-pressure-channel-scale.patch b/queue-4.0/iio-adis16400-report-pressure-channel-scale.patch new file mode 100644 index 00000000000..bee10ff4863 --- /dev/null +++ b/queue-4.0/iio-adis16400-report-pressure-channel-scale.patch @@ -0,0 +1,34 @@ +From 69ca2d771e4e709c5ae1125858e1246e77ef8b86 Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen +Date: Fri, 15 May 2015 17:18:34 +0200 +Subject: iio: adis16400: Report pressure channel scale + +From: Lars-Peter Clausen + +commit 69ca2d771e4e709c5ae1125858e1246e77ef8b86 upstream. + +Add the scale for the pressure channel, which is currently missing. + +Signed-off-by: Lars-Peter Clausen +Fixes: 76ada52f7f5d ("iio:adis16400: Add support for the adis16448") +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/iio/imu/adis16400_core.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/drivers/iio/imu/adis16400_core.c ++++ b/drivers/iio/imu/adis16400_core.c +@@ -405,6 +405,11 @@ static int adis16400_read_raw(struct iio + *val = st->variant->temp_scale_nano / 1000000; + *val2 = (st->variant->temp_scale_nano % 1000000); + return IIO_VAL_INT_PLUS_MICRO; ++ case IIO_PRESSURE: ++ /* 20 uBar = 0.002kPascal */ ++ *val = 0; ++ *val2 = 2000; ++ return IIO_VAL_INT_PLUS_MICRO; + default: + return -EINVAL; + } diff --git a/queue-4.0/iio-adis16400-use-channel-indices-for-the-two-voltage-channels.patch b/queue-4.0/iio-adis16400-use-channel-indices-for-the-two-voltage-channels.patch new file mode 100644 index 00000000000..aab789e53b8 --- /dev/null +++ b/queue-4.0/iio-adis16400-use-channel-indices-for-the-two-voltage-channels.patch @@ -0,0 +1,51 @@ +From 7323d59862802ca109451eeda9777024a7625509 Mon Sep 17 00:00:00 2001 +From: Paul Cercueil +Date: Fri, 15 May 2015 17:18:35 +0200 +Subject: iio: adis16400: Use != channel indices for the two voltage channels + +From: Paul Cercueil + +commit 7323d59862802ca109451eeda9777024a7625509 upstream. + +Previously, the two voltage channels had the same ID, which didn't cause +conflicts in sysfs only because one channel is named and the other isn't; +this is still violating the spec though, two indexed channels should never +have the same index. + +Signed-off-by: Paul Cercueil +Signed-off-by: Lars-Peter Clausen +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/iio/imu/adis16400_core.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/drivers/iio/imu/adis16400_core.c ++++ b/drivers/iio/imu/adis16400_core.c +@@ -459,10 +459,10 @@ static int adis16400_read_raw(struct iio + } + } + +-#define ADIS16400_VOLTAGE_CHAN(addr, bits, name, si) { \ ++#define ADIS16400_VOLTAGE_CHAN(addr, bits, name, si, chn) { \ + .type = IIO_VOLTAGE, \ + .indexed = 1, \ +- .channel = 0, \ ++ .channel = chn, \ + .extend_name = name, \ + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ + BIT(IIO_CHAN_INFO_SCALE), \ +@@ -479,10 +479,10 @@ static int adis16400_read_raw(struct iio + } + + #define ADIS16400_SUPPLY_CHAN(addr, bits) \ +- ADIS16400_VOLTAGE_CHAN(addr, bits, "supply", ADIS16400_SCAN_SUPPLY) ++ ADIS16400_VOLTAGE_CHAN(addr, bits, "supply", ADIS16400_SCAN_SUPPLY, 0) + + #define ADIS16400_AUX_ADC_CHAN(addr, bits) \ +- ADIS16400_VOLTAGE_CHAN(addr, bits, NULL, ADIS16400_SCAN_ADC) ++ ADIS16400_VOLTAGE_CHAN(addr, bits, NULL, ADIS16400_SCAN_ADC, 1) + + #define ADIS16400_GYRO_CHAN(mod, addr, bits) { \ + .type = IIO_ANGL_VEL, \ diff --git a/queue-4.0/iommu-vt-d-allow-rmrr-on-graphics-devices-too.patch b/queue-4.0/iommu-vt-d-allow-rmrr-on-graphics-devices-too.patch new file mode 100644 index 00000000000..1e23474ce06 --- /dev/null +++ b/queue-4.0/iommu-vt-d-allow-rmrr-on-graphics-devices-too.patch @@ -0,0 +1,63 @@ +From 18436afdc11a00ac881990b454cfb2eae81d6003 Mon Sep 17 00:00:00 2001 +From: David Woodhouse +Date: Wed, 25 Mar 2015 15:05:47 +0000 +Subject: iommu/vt-d: Allow RMRR on graphics devices too + +From: David Woodhouse + +commit 18436afdc11a00ac881990b454cfb2eae81d6003 upstream. + +Commit c875d2c1 ("iommu/vt-d: Exclude devices using RMRRs from IOMMU API +domains") prevents certain options for devices with RMRRs. This even +prevents those devices from getting a 1:1 mapping with 'iommu=pt', +because we don't have the code to handle *preserving* the RMRR regions +when moving the device between domains. + +There's already an exclusion for USB devices, because we know the only +reason for RMRRs there is a misguided desire to keep legacy +keyboard/mouse emulation running in some theoretical OS which doesn't +have support for USB in its own right... but which *does* enable the +IOMMU. + +Add an exclusion for graphics devices too, so that 'iommu=pt' works +there. We should be able to successfully assign graphics devices to +guests too, as long as the initial handling of stolen memory is +reconfigured appropriately. This has certainly worked in the past. + +Signed-off-by: David Woodhouse +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/iommu/intel-iommu.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +--- a/drivers/iommu/intel-iommu.c ++++ b/drivers/iommu/intel-iommu.c +@@ -50,6 +50,7 @@ + #define CONTEXT_SIZE VTD_PAGE_SIZE + + #define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY) ++#define IS_USB_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_SERIAL_USB) + #define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA) + #define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e) + +@@ -2554,6 +2555,10 @@ static bool device_has_rmrr(struct devic + * In both cases we assume that PCI USB devices with RMRRs have them largely + * for historical reasons and that the RMRR space is not actively used post + * boot. This exclusion may change if vendors begin to abuse it. ++ * ++ * The same exception is made for graphics devices, with the requirement that ++ * any use of the RMRR regions will be torn down before assigning the device ++ * to a guest. + */ + static bool device_is_rmrr_locked(struct device *dev) + { +@@ -2563,7 +2568,7 @@ static bool device_is_rmrr_locked(struct + if (dev_is_pci(dev)) { + struct pci_dev *pdev = to_pci_dev(dev); + +- if ((pdev->class >> 8) == PCI_CLASS_SERIAL_USB) ++ if (IS_USB_DEVICE(pdev) || IS_GFX_DEVICE(pdev)) + return false; + } + diff --git a/queue-4.0/iommu-vt-d-fix-passthrough-mode-with-translation-disabled-devices.patch b/queue-4.0/iommu-vt-d-fix-passthrough-mode-with-translation-disabled-devices.patch new file mode 100644 index 00000000000..8d2f2250ec4 --- /dev/null +++ b/queue-4.0/iommu-vt-d-fix-passthrough-mode-with-translation-disabled-devices.patch @@ -0,0 +1,65 @@ +From 4ed6a540fab8ea4388c1703b73ecfed68a2009d1 Mon Sep 17 00:00:00 2001 +From: David Woodhouse +Date: Mon, 11 May 2015 14:59:20 +0100 +Subject: iommu/vt-d: Fix passthrough mode with translation-disabled devices + +From: David Woodhouse + +commit 4ed6a540fab8ea4388c1703b73ecfed68a2009d1 upstream. + +When we use 'intel_iommu=igfx_off' to disable translation for the +graphics, and when we discover that the BIOS has misconfigured the DMAR +setup for I/OAT, we use a special DUMMY_DEVICE_DOMAIN_INFO value in +dev->archdata.iommu to indicate that translation is disabled. + +With passthrough mode, we were attempting to dereference that as a +normal pointer to a struct device_domain_info when setting up an +identity mapping for the affected device. + +This fixes the problem by making device_to_iommu() explicitly check for +the special value and indicate that no IOMMU was found to handle the +devices in question. + +Signed-off-by: David Woodhouse +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/iommu/intel-iommu.c | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +--- a/drivers/iommu/intel-iommu.c ++++ b/drivers/iommu/intel-iommu.c +@@ -673,6 +673,11 @@ static void domain_update_iommu_cap(stru + domain->iommu_superpage = domain_update_iommu_superpage(NULL); + } + ++static int iommu_dummy(struct device *dev) ++{ ++ return dev->archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO; ++} ++ + static struct intel_iommu *device_to_iommu(struct device *dev, u8 *bus, u8 *devfn) + { + struct dmar_drhd_unit *drhd = NULL; +@@ -682,6 +687,9 @@ static struct intel_iommu *device_to_iom + u16 segment = 0; + int i; + ++ if (iommu_dummy(dev)) ++ return NULL; ++ + if (dev_is_pci(dev)) { + pdev = to_pci_dev(dev); + segment = pci_domain_nr(pdev->bus); +@@ -2974,11 +2982,6 @@ static inline struct dmar_domain *get_va + return __get_valid_domain_for_dev(dev); + } + +-static int iommu_dummy(struct device *dev) +-{ +- return dev->archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO; +-} +- + /* Check if the dev needs to go through non-identity map and unmap process.*/ + static int iommu_no_mapping(struct device *dev) + { diff --git a/queue-4.0/n_tty-fix-auditing-support-for-cannonical-mode.patch b/queue-4.0/n_tty-fix-auditing-support-for-cannonical-mode.patch new file mode 100644 index 00000000000..5bb3ffc8b61 --- /dev/null +++ b/queue-4.0/n_tty-fix-auditing-support-for-cannonical-mode.patch @@ -0,0 +1,64 @@ +From 72586c6061ab8c23ffd9f301ed19782a44ff5f04 Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Thu, 14 May 2015 11:42:17 -0700 +Subject: n_tty: Fix auditing support for cannonical mode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Laura Abbott + +commit 72586c6061ab8c23ffd9f301ed19782a44ff5f04 upstream. + +Commit 32f13521ca68bc624ff6effc77f308a52b038bf0 +("n_tty: Line copy to user buffer in canonical mode") +changed cannonical mode copying to use copy_to_user +but missed adding the call to the audit framework. +Add in the appropriate functions to get audit support. + +Fixes: 32f13521ca68 ("n_tty: Line copy to user buffer in canonical mode") +Reported-by: Miloslav Trmač +Signed-off-by: Laura Abbott +Reviewed-by: Peter Hurley +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/tty/n_tty.c | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +--- a/drivers/tty/n_tty.c ++++ b/drivers/tty/n_tty.c +@@ -162,6 +162,17 @@ static inline int tty_put_user(struct tt + return put_user(x, ptr); + } + ++static inline int tty_copy_to_user(struct tty_struct *tty, ++ void __user *to, ++ const void *from, ++ unsigned long n) ++{ ++ struct n_tty_data *ldata = tty->disc_data; ++ ++ tty_audit_add_data(tty, to, n, ldata->icanon); ++ return copy_to_user(to, from, n); ++} ++ + /** + * n_tty_kick_worker - start input worker (if required) + * @tty: terminal +@@ -2084,12 +2095,12 @@ static int canon_copy_from_read_buf(stru + __func__, eol, found, n, c, size, more); + + if (n > size) { +- ret = copy_to_user(*b, read_buf_addr(ldata, tail), size); ++ ret = tty_copy_to_user(tty, *b, read_buf_addr(ldata, tail), size); + if (ret) + return -EFAULT; +- ret = copy_to_user(*b + size, ldata->read_buf, n - size); ++ ret = tty_copy_to_user(tty, *b + size, ldata->read_buf, n - size); + } else +- ret = copy_to_user(*b, read_buf_addr(ldata, tail), n); ++ ret = tty_copy_to_user(tty, *b, read_buf_addr(ldata, tail), n); + + if (ret) + return -EFAULT; diff --git a/queue-4.0/series b/queue-4.0/series index 334e1d42d43..c7c27de0d5c 100644 --- a/queue-4.0/series +++ b/queue-4.0/series @@ -27,3 +27,19 @@ ipv4-udp-verify-multicast-group-is-ours-in-upd_v4_early_demux.patch be2net-replace-dma-pci_alloc_coherent-calls-with-dma_zalloc_coherent.patch bridge-disable-softirqs-around-br_fdb_update-to-avoid-lockup.patch netlink-disable-insertions-removals-during-rehash.patch +iio-adc-twl6030-gpadc-fix-modalias.patch +iio-adis16400-report-pressure-channel-scale.patch +iio-adis16400-use-channel-indices-for-the-two-voltage-channels.patch +iio-adis16400-compute-the-scan-mask-from-channel-indices.patch +iio-adis16400-fix-burst-mode.patch +iio-adis16400-fix-burst-transfer-for-adis16448.patch +drivers-base-cacheinfo-handle-absence-of-caches.patch +n_tty-fix-auditing-support-for-cannonical-mode.patch +iommu-vt-d-allow-rmrr-on-graphics-devices-too.patch +iommu-vt-d-fix-passthrough-mode-with-translation-disabled-devices.patch +alsa-hda-realtek-add-a-fixup-for-another-acer-aspire-9420.patch +alsa-usb-audio-add-mic-volume-fix-quirk-for-logitech-quickcam-fusion.patch +alsa-usb-audio-don-t-try-to-get-outlaw-rr2150-sample-rate.patch +alsa-usb-audio-add-maya44-usb-mixer-control-names.patch +alsa-usb-audio-fix-missing-input-volume-controls-in-maya44-usb.patch +alsa-usb-audio-add-native-dsd-support-for-jlsounds-i2soverusb.patch