From: Greg Kroah-Hartman Date: Mon, 23 Aug 2010 17:23:38 +0000 (-0700) Subject: .35 patches X-Git-Tag: v2.6.32.21~42 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=083e2f9beddbd88c1e93aa6b7518378632741358;p=thirdparty%2Fkernel%2Fstable-queue.git .35 patches --- diff --git a/queue-2.6.35/acpi-fix-bogus-preemption-logic.patch b/queue-2.6.35/acpi-fix-bogus-preemption-logic.patch new file mode 100644 index 00000000000..2df63c4fd06 --- /dev/null +++ b/queue-2.6.35/acpi-fix-bogus-preemption-logic.patch @@ -0,0 +1,81 @@ +From 0a7992c90828a65281c3c9cf180be3b432d277b2 Mon Sep 17 00:00:00 2001 +From: Thomas Gleixner +Date: Wed, 11 Aug 2010 14:17:29 -0700 +Subject: acpi: fix bogus preemption logic + +From: Thomas Gleixner + +commit 0a7992c90828a65281c3c9cf180be3b432d277b2 upstream. + +The ACPI_PREEMPTION_POINT() logic was introduced in commit 8bd108d +(ACPICA: add preemption point after each opcode parse). The follow up +commits abe1dfab6, 138d15692, c084ca70 tried to fix the preemption logic +back and forth, but nobody noticed that the usage of +in_atomic_preempt_off() in that context is wrong. + +The check which guards the call of cond_resched() is: + + if (!in_atomic_preempt_off() && !irqs_disabled()) + +in_atomic_preempt_off() is not intended for general use as the comment +above the macro definition clearly says: + + * Check whether we were atomic before we did preempt_disable(): + * (used by the scheduler, *after* releasing the kernel lock) + +On a CONFIG_PREEMPT=n kernel the usage of in_atomic_preempt_off() works by +accident, but with CONFIG_PREEMPT=y it's just broken. + +The whole purpose of the ACPI_PREEMPTION_POINT() is to reduce the latency +on a CONFIG_PREEMPT=n kernel, so make ACPI_PREEMPTION_POINT() depend on +CONFIG_PREEMPT=n and remove the in_atomic_preempt_off() check. + +Addresses https://bugzilla.kernel.org/show_bug.cgi?id=16210 + +[akpm@linux-foundation.org: fix build] +Signed-off-by: Thomas Gleixner +Cc: Len Brown +Cc: Francois Valenduc +Cc: Lin Ming +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/acpi/apei/erst.c | 1 + + include/acpi/platform/aclinux.h | 10 +++++++--- + 2 files changed, 8 insertions(+), 3 deletions(-) + +--- a/drivers/acpi/apei/erst.c ++++ b/drivers/acpi/apei/erst.c +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + #include + + #include "apei-internal.h" +--- a/include/acpi/platform/aclinux.h ++++ b/include/acpi/platform/aclinux.h +@@ -148,13 +148,17 @@ static inline void *acpi_os_acquire_obje + #define ACPI_ALLOCATE_ZEROED(a) acpi_os_allocate_zeroed(a) + #define ACPI_FREE(a) kfree(a) + +-/* Used within ACPICA to show where it is safe to preempt execution */ +-#include ++#ifndef CONFIG_PREEMPT ++/* ++ * Used within ACPICA to show where it is safe to preempt execution ++ * when CONFIG_PREEMPT=n ++ */ + #define ACPI_PREEMPTION_POINT() \ + do { \ +- if (!in_atomic_preempt_off() && !irqs_disabled()) \ ++ if (!irqs_disabled()) \ + cond_resched(); \ + } while (0) ++#endif + + #endif /* __KERNEL__ */ + diff --git a/queue-2.6.35/alsa-emu10k1-delay-the-pcm-interrupts-add-pcm_irq_delay-parameter.patch b/queue-2.6.35/alsa-emu10k1-delay-the-pcm-interrupts-add-pcm_irq_delay-parameter.patch new file mode 100644 index 00000000000..ab6bbe4bad1 --- /dev/null +++ b/queue-2.6.35/alsa-emu10k1-delay-the-pcm-interrupts-add-pcm_irq_delay-parameter.patch @@ -0,0 +1,164 @@ +From 56385a12d9bb9e173751f74b6c430742018cafc0 Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Wed, 18 Aug 2010 14:08:17 +0200 +Subject: ALSA: emu10k1 - delay the PCM interrupts (add pcm_irq_delay parameter) + +From: Jaroslav Kysela + +commit 56385a12d9bb9e173751f74b6c430742018cafc0 upstream. + +With some hardware combinations, the PCM interrupts are acknowledged +before the period boundary from the emu10k1 chip. The midlevel PCM code +gets confused and the playback stream is interrupted. + +It seems that the interrupt processing shift by 2 samples is enough +to fix this issue. This default value does not harm other, +non-affected hardware. + +More information: Kernel bugzilla bug#16300 + +[A copmile warning fixed by tiwai] + +Signed-off-by: Jaroslav Kysela +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + include/sound/emu10k1.h | 1 + + sound/core/pcm_native.c | 4 ++++ + sound/pci/emu10k1/emu10k1.c | 4 ++++ + sound/pci/emu10k1/emupcm.c | 30 ++++++++++++++++++++++++++---- + sound/pci/emu10k1/memory.c | 4 +++- + 5 files changed, 38 insertions(+), 5 deletions(-) + +--- a/include/sound/emu10k1.h ++++ b/include/sound/emu10k1.h +@@ -1707,6 +1707,7 @@ struct snd_emu10k1 { + unsigned int card_type; /* EMU10K1_CARD_* */ + unsigned int ecard_ctrl; /* ecard control bits */ + unsigned long dma_mask; /* PCI DMA mask */ ++ unsigned int delay_pcm_irq; /* in samples */ + int max_cache_pages; /* max memory size / PAGE_SIZE */ + struct snd_dma_buffer silent_page; /* silent page */ + struct snd_dma_buffer ptb_pages; /* page table pages */ +--- a/sound/core/pcm_native.c ++++ b/sound/core/pcm_native.c +@@ -981,6 +981,10 @@ static int snd_pcm_do_pause(struct snd_p + { + if (substream->runtime->trigger_master != substream) + return 0; ++ /* some drivers might use hw_ptr to recover from the pause - ++ update the hw_ptr now */ ++ if (push) ++ snd_pcm_update_hw_ptr(substream); + /* The jiffies check in snd_pcm_update_hw_ptr*() is done by + * a delta betwen the current jiffies, this gives a large enough + * delta, effectively to skip the check once. +--- a/sound/pci/emu10k1/emu10k1.c ++++ b/sound/pci/emu10k1/emu10k1.c +@@ -52,6 +52,7 @@ static int max_synth_voices[SNDRV_CARDS] + static int max_buffer_size[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 128}; + static int enable_ir[SNDRV_CARDS]; + static uint subsystem[SNDRV_CARDS]; /* Force card subsystem model */ ++static uint delay_pcm_irq[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2}; + + module_param_array(index, int, NULL, 0444); + MODULE_PARM_DESC(index, "Index value for the EMU10K1 soundcard."); +@@ -73,6 +74,8 @@ module_param_array(enable_ir, bool, NULL + MODULE_PARM_DESC(enable_ir, "Enable IR."); + module_param_array(subsystem, uint, NULL, 0444); + MODULE_PARM_DESC(subsystem, "Force card subsystem model."); ++module_param_array(delay_pcm_irq, uint, NULL, 0444); ++MODULE_PARM_DESC(delay_pcm_irq, "Delay PCM interrupt by specified number of samples (default 0)."); + /* + * Class 0401: 1102:0008 (rev 00) Subsystem: 1102:1001 -> Audigy2 Value Model:SB0400 + */ +@@ -127,6 +130,7 @@ static int __devinit snd_card_emu10k1_pr + &emu)) < 0) + goto error; + card->private_data = emu; ++ emu->delay_pcm_irq = delay_pcm_irq[dev] & 0x1f; + if ((err = snd_emu10k1_pcm(emu, 0, NULL)) < 0) + goto error; + if ((err = snd_emu10k1_pcm_mic(emu, 1, NULL)) < 0) +--- a/sound/pci/emu10k1/emupcm.c ++++ b/sound/pci/emu10k1/emupcm.c +@@ -332,7 +332,7 @@ static void snd_emu10k1_pcm_init_voice(s + evoice->epcm->ccca_start_addr = start_addr + ccis; + if (extra) { + start_addr += ccis; +- end_addr += ccis; ++ end_addr += ccis + emu->delay_pcm_irq; + } + if (stereo && !extra) { + snd_emu10k1_ptr_write(emu, CPF, voice, CPF_STEREO_MASK); +@@ -360,7 +360,9 @@ static void snd_emu10k1_pcm_init_voice(s + /* Assumption that PT is already 0 so no harm overwriting */ + snd_emu10k1_ptr_write(emu, PTRX, voice, (send_amount[0] << 8) | send_amount[1]); + snd_emu10k1_ptr_write(emu, DSL, voice, end_addr | (send_amount[3] << 24)); +- snd_emu10k1_ptr_write(emu, PSST, voice, start_addr | (send_amount[2] << 24)); ++ snd_emu10k1_ptr_write(emu, PSST, voice, ++ (start_addr + (extra ? emu->delay_pcm_irq : 0)) | ++ (send_amount[2] << 24)); + if (emu->card_capabilities->emu_model) + pitch_target = PITCH_48000; /* Disable interpolators on emu1010 card */ + else +@@ -732,6 +734,23 @@ static void snd_emu10k1_playback_stop_vo + snd_emu10k1_ptr_write(emu, IP, voice, 0); + } + ++static inline void snd_emu10k1_playback_mangle_extra(struct snd_emu10k1 *emu, ++ struct snd_emu10k1_pcm *epcm, ++ struct snd_pcm_substream *substream, ++ struct snd_pcm_runtime *runtime) ++{ ++ unsigned int ptr, period_pos; ++ ++ /* try to sychronize the current position for the interrupt ++ source voice */ ++ period_pos = runtime->status->hw_ptr - runtime->hw_ptr_interrupt; ++ period_pos %= runtime->period_size; ++ ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->extra->number); ++ ptr &= ~0x00ffffff; ++ ptr |= epcm->ccca_start_addr + period_pos; ++ snd_emu10k1_ptr_write(emu, CCCA, epcm->extra->number, ptr); ++} ++ + static int snd_emu10k1_playback_trigger(struct snd_pcm_substream *substream, + int cmd) + { +@@ -753,6 +772,8 @@ static int snd_emu10k1_playback_trigger( + /* follow thru */ + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: + case SNDRV_PCM_TRIGGER_RESUME: ++ if (cmd == SNDRV_PCM_TRIGGER_PAUSE_RELEASE) ++ snd_emu10k1_playback_mangle_extra(emu, epcm, substream, runtime); + mix = &emu->pcm_mixer[substream->number]; + snd_emu10k1_playback_prepare_voice(emu, epcm->voices[0], 1, 0, mix); + snd_emu10k1_playback_prepare_voice(emu, epcm->voices[1], 0, 0, mix); +@@ -869,8 +890,9 @@ static snd_pcm_uframes_t snd_emu10k1_pla + #endif + /* + printk(KERN_DEBUG +- "ptr = 0x%x, buffer_size = 0x%x, period_size = 0x%x\n", +- ptr, runtime->buffer_size, runtime->period_size); ++ "ptr = 0x%lx, buffer_size = 0x%lx, period_size = 0x%lx\n", ++ (long)ptr, (long)runtime->buffer_size, ++ (long)runtime->period_size); + */ + return ptr; + } +--- a/sound/pci/emu10k1/memory.c ++++ b/sound/pci/emu10k1/memory.c +@@ -310,8 +310,10 @@ snd_emu10k1_alloc_pages(struct snd_emu10 + if (snd_BUG_ON(!hdr)) + return NULL; + ++ idx = runtime->period_size >= runtime->buffer_size ? ++ (emu->delay_pcm_irq * 2) : 0; + mutex_lock(&hdr->block_mutex); +- blk = search_empty(emu, runtime->dma_bytes); ++ blk = search_empty(emu, runtime->dma_bytes + idx); + if (blk == NULL) { + mutex_unlock(&hdr->block_mutex); + return NULL; diff --git a/queue-2.6.35/alsa-hda-add-quirk-for-dell-vostro-1220.patch b/queue-2.6.35/alsa-hda-add-quirk-for-dell-vostro-1220.patch new file mode 100644 index 00000000000..ccf5e06c0b9 --- /dev/null +++ b/queue-2.6.35/alsa-hda-add-quirk-for-dell-vostro-1220.patch @@ -0,0 +1,31 @@ +From c3e68fad88143fd1fe8fe640207fb19c0f087dbc Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 16 Aug 2010 10:15:57 +0200 +Subject: ALSA: hda - Add quirk for Dell Vostro 1220 + +From: Takashi Iwai + +commit c3e68fad88143fd1fe8fe640207fb19c0f087dbc upstream. + +model=dell-vostro is needed for Dell Vostro 1220 with Coexnat 5067. + +Reference: Novell bnc#631066 + https://bugzilla.novell.com/show_bug.cgi?id=631066 + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_conexant.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/patch_conexant.c ++++ b/sound/pci/hda/patch_conexant.c +@@ -2970,6 +2970,7 @@ static struct snd_pci_quirk cxt5066_cfg_ + SND_PCI_QUIRK(0x1028, 0x02f5, "Dell", + CXT5066_DELL_LAPTOP), + SND_PCI_QUIRK(0x152d, 0x0833, "OLPC XO-1.5", CXT5066_OLPC_XO_1_5), ++ SND_PCI_QUIRK(0x1028, 0x02d8, "Dell Vostro", CXT5066_DELL_VOSTO), + SND_PCI_QUIRK(0x1028, 0x0402, "Dell Vostro", CXT5066_DELL_VOSTO), + SND_PCI_QUIRK(0x1028, 0x0408, "Dell Inspiron One 19T", CXT5066_IDEAPAD), + SND_PCI_QUIRK(0x1179, 0xff50, "Toshiba Satellite P500-PSPGSC-01800T", CXT5066_OLPC_XO_1_5), diff --git a/queue-2.6.35/alsa-hda-fix-missing-stream-for-second-adc-on-realtek-alc260-hda-codec.patch b/queue-2.6.35/alsa-hda-fix-missing-stream-for-second-adc-on-realtek-alc260-hda-codec.patch new file mode 100644 index 00000000000..cd9fd2f4ce6 --- /dev/null +++ b/queue-2.6.35/alsa-hda-fix-missing-stream-for-second-adc-on-realtek-alc260-hda-codec.patch @@ -0,0 +1,34 @@ +From 53bacfbbb2ddd981287b58a511c8b8f5df179886 Mon Sep 17 00:00:00 2001 +From: Jonathan Woithe +Date: Sun, 8 Aug 2010 00:17:05 +0930 +Subject: ALSA: hda - Fix missing stream for second ADC on Realtek ALC260 HDA codec + +From: Jonathan Woithe + +commit 53bacfbbb2ddd981287b58a511c8b8f5df179886 upstream. + +I discovered tonight that ALSA no longer sets up a stream for the second ADC +provided by the Realtek ALC260 HDA codec. At some point alc_build_pcms() +started using stream_analog_alt_capture when constructing the second ADC +stream, but patch_alc260() was never updated accordingly. I have no idea +when this regression occurred. The trivial patch to patch_alc260() given +below fixes the problem as far as I can tell. The patch is against 2.6.35. + +Signed-off-by: Jonathan Woithe +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 +@@ -6864,6 +6864,7 @@ static int patch_alc260(struct hda_codec + + spec->stream_analog_playback = &alc260_pcm_analog_playback; + spec->stream_analog_capture = &alc260_pcm_analog_capture; ++ spec->stream_analog_alt_capture = &alc260_pcm_analog_capture; + + spec->stream_digital_playback = &alc260_pcm_digital_playback; + spec->stream_digital_capture = &alc260_pcm_digital_capture; diff --git a/queue-2.6.35/alsa-riptide-fix-detection-load-of-firmware-files.patch b/queue-2.6.35/alsa-riptide-fix-detection-load-of-firmware-files.patch new file mode 100644 index 00000000000..cfa87177369 --- /dev/null +++ b/queue-2.6.35/alsa-riptide-fix-detection-load-of-firmware-files.patch @@ -0,0 +1,46 @@ +From a5ba6beb839cfa288960c92cd2668a2601c24dda Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 16 Aug 2010 08:08:48 +0200 +Subject: ALSA: riptide - Fix detection / load of firmware files + +From: Takashi Iwai + +commit a5ba6beb839cfa288960c92cd2668a2601c24dda upstream. + +The detection and loading of firmeware on riptide driver has been broken +due to rewrite of some codes, checking the presense wrongly. +This patch fixes the logic again. + +Reference: kernel bug 16596 + https://bugzilla.kernel.org/show_bug.cgi?id=16596 + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/riptide/riptide.c | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +--- a/sound/pci/riptide/riptide.c ++++ b/sound/pci/riptide/riptide.c +@@ -1224,15 +1224,14 @@ static int try_to_load_firmware(struct c + firmware.firmware.ASIC, firmware.firmware.CODEC, + firmware.firmware.AUXDSP, firmware.firmware.PROG); + ++ if (!chip) ++ return 1; ++ + for (i = 0; i < FIRMWARE_VERSIONS; i++) { + if (!memcmp(&firmware_versions[i], &firmware, sizeof(firmware))) +- break; +- } +- if (i >= FIRMWARE_VERSIONS) +- return 0; /* no match */ ++ return 1; /* OK */ + +- if (!chip) +- return 1; /* OK */ ++ } + + snd_printdd("Writing Firmware\n"); + if (!chip->fw_entry) { diff --git a/queue-2.6.35/asoc-fix-inverted-mute-controls-for-wm8580.patch b/queue-2.6.35/asoc-fix-inverted-mute-controls-for-wm8580.patch new file mode 100644 index 00000000000..b2ddafed2e1 --- /dev/null +++ b/queue-2.6.35/asoc-fix-inverted-mute-controls-for-wm8580.patch @@ -0,0 +1,32 @@ +From 4f0ed9a51bc8ef16c2589112fdb110479e4b0df1 Mon Sep 17 00:00:00 2001 +From: Mark Brown +Date: Fri, 6 Aug 2010 17:57:12 +0100 +Subject: ASoC: Fix inverted mute controls for WM8580 + +From: Mark Brown + +commit 4f0ed9a51bc8ef16c2589112fdb110479e4b0df1 upstream. + +Signed-off-by: Mark Brown +Acked-by: Liam Girdwood +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/codecs/wm8580.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/sound/soc/codecs/wm8580.c ++++ b/sound/soc/codecs/wm8580.c +@@ -269,9 +269,9 @@ SOC_DOUBLE("DAC2 Invert Switch", WM8580_ + SOC_DOUBLE("DAC3 Invert Switch", WM8580_DAC_CONTROL4, 4, 5, 1, 0), + + SOC_SINGLE("DAC ZC Switch", WM8580_DAC_CONTROL5, 5, 1, 0), +-SOC_SINGLE("DAC1 Switch", WM8580_DAC_CONTROL5, 0, 1, 0), +-SOC_SINGLE("DAC2 Switch", WM8580_DAC_CONTROL5, 1, 1, 0), +-SOC_SINGLE("DAC3 Switch", WM8580_DAC_CONTROL5, 2, 1, 0), ++SOC_SINGLE("DAC1 Switch", WM8580_DAC_CONTROL5, 0, 1, 1), ++SOC_SINGLE("DAC2 Switch", WM8580_DAC_CONTROL5, 1, 1, 1), ++SOC_SINGLE("DAC3 Switch", WM8580_DAC_CONTROL5, 2, 1, 1), + + SOC_DOUBLE("ADC Mute Switch", WM8580_ADC_CONTROL1, 0, 1, 1, 0), + SOC_SINGLE("ADC High-Pass Filter Switch", WM8580_ADC_CONTROL1, 4, 1, 0), diff --git a/queue-2.6.35/asoc-register-cache-should-be-1-byte-aligned-for-1-byte-long-register.patch b/queue-2.6.35/asoc-register-cache-should-be-1-byte-aligned-for-1-byte-long-register.patch new file mode 100644 index 00000000000..1add5cf0c6a --- /dev/null +++ b/queue-2.6.35/asoc-register-cache-should-be-1-byte-aligned-for-1-byte-long-register.patch @@ -0,0 +1,39 @@ +From ac770267a7cd85a747b6111db46f66d1515e7cd7 Mon Sep 17 00:00:00 2001 +From: Cliff Cai +Date: Sat, 7 Aug 2010 11:16:27 -0400 +Subject: ASoC: register cache should be 1 byte aligned for 1 byte long register + +From: Cliff Cai + +commit ac770267a7cd85a747b6111db46f66d1515e7cd7 upstream. + +Signed-off-by: Cliff Cai +Signed-off-by: Mike Frysinger +Acked-by: Liam Girdwood +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/soc-cache.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/sound/soc/soc-cache.c ++++ b/sound/soc/soc-cache.c +@@ -340,7 +340,7 @@ static unsigned int snd_soc_16_8_read_i2 + static unsigned int snd_soc_16_8_read(struct snd_soc_codec *codec, + unsigned int reg) + { +- u16 *cache = codec->reg_cache; ++ u8 *cache = codec->reg_cache; + + reg &= 0xff; + if (reg >= codec->reg_cache_size) +@@ -351,7 +351,7 @@ static unsigned int snd_soc_16_8_read(st + static int snd_soc_16_8_write(struct snd_soc_codec *codec, unsigned int reg, + unsigned int value) + { +- u16 *cache = codec->reg_cache; ++ u8 *cache = codec->reg_cache; + u8 data[3]; + int ret; + diff --git a/queue-2.6.35/asoc-remove-dsp-mode-support-for-wm8776.patch b/queue-2.6.35/asoc-remove-dsp-mode-support-for-wm8776.patch new file mode 100644 index 00000000000..d64274fb408 --- /dev/null +++ b/queue-2.6.35/asoc-remove-dsp-mode-support-for-wm8776.patch @@ -0,0 +1,35 @@ +From b2c1e07b81a126e5846dfc3d36f559d861df59f4 Mon Sep 17 00:00:00 2001 +From: Mark Brown +Date: Mon, 16 Aug 2010 11:46:57 +0100 +Subject: ASoC: Remove DSP mode support for WM8776 + +From: Mark Brown + +commit b2c1e07b81a126e5846dfc3d36f559d861df59f4 upstream. + +This is not supported by current hardware revisions. + +Signed-off-by: Mark Brown +Acked-by: Liam Girdwood +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/codecs/wm8776.c | 7 ------- + 1 file changed, 7 deletions(-) + +--- a/sound/soc/codecs/wm8776.c ++++ b/sound/soc/codecs/wm8776.c +@@ -178,13 +178,6 @@ static int wm8776_set_fmt(struct snd_soc + case SND_SOC_DAIFMT_LEFT_J: + iface |= 0x0001; + break; +- /* FIXME: CHECK A/B */ +- case SND_SOC_DAIFMT_DSP_A: +- iface |= 0x0003; +- break; +- case SND_SOC_DAIFMT_DSP_B: +- iface |= 0x0007; +- break; + default: + return -EINVAL; + } diff --git a/queue-2.6.35/memstick-fix-hangs-on-unexpected-device-removal-in-mspro_blk.patch b/queue-2.6.35/memstick-fix-hangs-on-unexpected-device-removal-in-mspro_blk.patch new file mode 100644 index 00000000000..8ac25367f88 --- /dev/null +++ b/queue-2.6.35/memstick-fix-hangs-on-unexpected-device-removal-in-mspro_blk.patch @@ -0,0 +1,42 @@ +From d862b13bc8cbab9692fbe0ef44c40d0488b81af1 Mon Sep 17 00:00:00 2001 +From: Maxim Levitsky +Date: Wed, 11 Aug 2010 14:17:52 -0700 +Subject: memstick: fix hangs on unexpected device removal in mspro_blk + +From: Maxim Levitsky + +commit d862b13bc8cbab9692fbe0ef44c40d0488b81af1 upstream. + +mspro_block_remove() is called from detect thread that first calls the +mspro_block_stop(), which stops the request queue. If we call +del_gendisk() with the queue stopped we get a deadlock. + +Signed-off-by: Maxim Levitsky +Cc: Alex Dubov +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/memstick/core/mspro_block.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/drivers/memstick/core/mspro_block.c ++++ b/drivers/memstick/core/mspro_block.c +@@ -1331,13 +1331,14 @@ static void mspro_block_remove(struct me + struct mspro_block_data *msb = memstick_get_drvdata(card); + unsigned long flags; + +- del_gendisk(msb->disk); +- dev_dbg(&card->dev, "mspro block remove\n"); + spin_lock_irqsave(&msb->q_lock, flags); + msb->eject = 1; + blk_start_queue(msb->queue); + spin_unlock_irqrestore(&msb->q_lock, flags); + ++ del_gendisk(msb->disk); ++ dev_dbg(&card->dev, "mspro block remove\n"); ++ + blk_cleanup_queue(msb->queue); + msb->queue = NULL; + diff --git a/queue-2.6.35/memstick-init-sysfs-attributes.patch b/queue-2.6.35/memstick-init-sysfs-attributes.patch new file mode 100644 index 00000000000..636368d4d8c --- /dev/null +++ b/queue-2.6.35/memstick-init-sysfs-attributes.patch @@ -0,0 +1,31 @@ +From 21fd0495ea61d53e0ebe575330e343ce4e6d2a61 Mon Sep 17 00:00:00 2001 +From: Maxim Levitsky +Date: Wed, 11 Aug 2010 14:17:52 -0700 +Subject: memstick: init sysfs attributes + +From: Maxim Levitsky + +commit 21fd0495ea61d53e0ebe575330e343ce4e6d2a61 upstream. + +Otherwise lockdep complains. + +Signed-off-by: Maxim Levitsky +Cc: Alex Dubov +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/memstick/core/mspro_block.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/memstick/core/mspro_block.c ++++ b/drivers/memstick/core/mspro_block.c +@@ -1040,6 +1040,7 @@ static int mspro_block_read_attributes(s + snprintf(s_attr->name, sizeof(s_attr->name), + "attr_x%02x", attr->entries[cnt].id); + ++ sysfs_attr_init(&s_attr->dev_attr.attr); + s_attr->dev_attr.attr.name = s_attr->name; + s_attr->dev_attr.attr.mode = S_IRUGO; + s_attr->dev_attr.show = mspro_block_attr_show(s_attr->id); diff --git a/queue-2.6.35/regulator-default-gpio-controlled-wm8994-regulators-to-disabled.patch b/queue-2.6.35/regulator-default-gpio-controlled-wm8994-regulators-to-disabled.patch new file mode 100644 index 00000000000..4c87756b425 --- /dev/null +++ b/queue-2.6.35/regulator-default-gpio-controlled-wm8994-regulators-to-disabled.patch @@ -0,0 +1,46 @@ +From c4604e49c1a5832a58789a22eba7ca982933e1be Mon Sep 17 00:00:00 2001 +From: Joonyoung Shim +Date: Fri, 6 Aug 2010 15:48:24 +0100 +Subject: regulator: Default GPIO controlled WM8994 regulators to disabled + +From: Joonyoung Shim + +commit c4604e49c1a5832a58789a22eba7ca982933e1be upstream. + +This ensures that if the GPIO was not enabled prior to the driver +starting the regulator API will insert the required powerup ramp +delay when it enables the regulator. The gpiolib API does not +provide this information. + +[Rewrote changelog to describe the actual change -- broonie.] + +Signed-off-by: Joonyoung Shim +Signed-off-by: Mark Brown +Signed-off-by: Liam Girdwood +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/regulator/wm8994-regulator.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +--- a/drivers/regulator/wm8994-regulator.c ++++ b/drivers/regulator/wm8994-regulator.c +@@ -219,8 +219,6 @@ static __devinit int wm8994_ldo_probe(st + + ldo->wm8994 = wm8994; + +- ldo->is_enabled = true; +- + if (pdata->ldo[id].enable && gpio_is_valid(pdata->ldo[id].enable)) { + ldo->enable = pdata->ldo[id].enable; + +@@ -237,7 +235,8 @@ static __devinit int wm8994_ldo_probe(st + ret); + goto err_gpio; + } +- } ++ } else ++ ldo->is_enabled = true; + + ldo->regulator = regulator_register(&wm8994_ldo_desc[id], &pdev->dev, + pdata->ldo[id].init_data, ldo);