--- /dev/null
+From stable-bounces@linux.kernel.org Fri Jul 18 17:06:59 2008
+From: Tejun Heo <htejun@gmail.com>
+Date: Fri, 18 Jul 2008 19:14:40 -0400
+Subject: ahci: retry enabling AHCI a few times before spitting out WARN_ON()
+To: stable@kernel.org
+Cc: Jeff Garzik <jgarzik@redhat.com>
+Message-ID: <20080718191440.708f5f4a@redhat.com>
+
+From: Tejun Heo <htejun@gmail.com>
+
+commit 15fe982e429e0e6b7466719acb6cfd9dbfe47f0c upstream
+
+ahci: retry enabling AHCI a few times before spitting out WARN_ON()
+
+Some chips need AHCI_EN set more than once to actually set it. Try a
+few times before giving up and spitting out WARN_ON().
+
+Signed-off-by: Tejun Heo <htejun@gmail.com>
+Cc: Peer Chen <pchen@nvidia.com>
+Cc: Volker Armin Hemmann <volker.armin.hemmann@tu-clausthal.de>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/ahci.c | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -634,16 +634,27 @@ static inline void __iomem *ahci_port_ba
+
+ static void ahci_enable_ahci(void __iomem *mmio)
+ {
++ int i;
+ u32 tmp;
+
+ /* turn on AHCI_EN */
+ tmp = readl(mmio + HOST_CTL);
+- if (!(tmp & HOST_AHCI_EN)) {
++ if (tmp & HOST_AHCI_EN)
++ return;
++
++ /* Some controllers need AHCI_EN to be written multiple times.
++ * Try a few times before giving up.
++ */
++ for (i = 0; i < 5; i++) {
+ tmp |= HOST_AHCI_EN;
+ writel(tmp, mmio + HOST_CTL);
+ tmp = readl(mmio + HOST_CTL); /* flush && sanity check */
+- WARN_ON(!(tmp & HOST_AHCI_EN));
++ if (tmp & HOST_AHCI_EN)
++ return;
++ msleep(10);
+ }
++
++ WARN_ON(1);
+ }
+
+ /**
--- /dev/null
+From stable-bounces@linux.kernel.org Fri Jul 18 16:37:37 2008
+From: Pierre Ossman <drzeus@drzeus.cx>
+Date: Fri, 18 Jul 2008 19:04:27 -0400
+Subject: ALSA: trident - pause s/pdif output
+To: stable@kernel.org
+Cc: Takashi Iwai <tiwai@suse.de>, cebbert@redhat.com
+Message-ID: <20080718190427.7cdfe1da@redhat.com>
+
+
+From: Pierre Ossman <drzeus@drzeus.cx>
+
+Commit 981bcead3f2279a1ec6fb5f2c57aff79ed61a700 upstream.
+
+Stop the S/PDIF DMA engine and output when the device is told to pause.
+It will keep on looping the current buffer contents if this isn't done.
+
+Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
+Tested-by: Rene Herman <rene.herman@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Jaroslav Kysela <perex@perex.cz>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/trident/trident_main.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/sound/pci/trident/trident_main.c
++++ b/sound/pci/trident/trident_main.c
+@@ -1590,7 +1590,10 @@ static int snd_trident_trigger(struct sn
+ if (spdif_flag) {
+ if (trident->device != TRIDENT_DEVICE_ID_SI7018) {
+ outl(trident->spdif_pcm_bits, TRID_REG(trident, NX_SPCSTATUS));
+- outb(trident->spdif_pcm_ctrl, TRID_REG(trident, NX_SPCTRL_SPCSO + 3));
++ val = trident->spdif_pcm_ctrl;
++ if (!go)
++ val &= ~(0x28);
++ outb(val, TRID_REG(trident, NX_SPCTRL_SPCSO + 3));
+ } else {
+ outl(trident->spdif_pcm_bits, TRID_REG(trident, SI_SPDIF_CS));
+ val = inl(TRID_REG(trident, SI_SERIAL_INTF_CTRL)) | SPDIF_EN;
fix-build-on-compat-platforms-when-config_epoll-is-disabled.patch
arm-fix-fls-for-64-bit-arguments.patch
alsa-hda-fix-alc262_sony_unsol-hda_verb-array.patch
+alsa-trident-pause-s-pdif-output.patch
+ahci-retry-enabling-ahci-a-few-times-before-spitting-out-warn_on.patch