]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - sound/soc/nuc900/nuc900-ac97.c
Merge branch 'for-2.6.36' into for-2.6.37
[mv-sheeva.git] / sound / soc / nuc900 / nuc900-ac97.c
index f7b44e081420d63e8fb19b3cbb1e9ca3c82ec3bd..02b64a17dec2ae111f20639841b9fb78c436e0ed 100644 (file)
@@ -25,7 +25,7 @@
 
 #include <mach/mfp.h>
 
-#include "nuc900-auido.h"
+#include "nuc900-audio.h"
 
 static DEFINE_MUTEX(ac97_mutex);
 struct nuc900_audio *nuc900_ac97_data;
@@ -66,9 +66,8 @@ static unsigned short nuc900_ac97_read(struct snd_ac97 *ac97,
        udelay(100);
 
        /* polling the AC_R_FINISH */
-       val = AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON);
-       val &= AC_R_FINISH;
-       while (!val && timeout--)
+       while (!(AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON) & AC_R_FINISH)
+                                                               && timeout--)
                mdelay(1);
 
        if (!timeout) {
@@ -121,9 +120,8 @@ static void nuc900_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
        udelay(100);
 
        /* polling the AC_W_FINISH */
-       tmp = AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON);
-       tmp &= AC_W_FINISH;
-       while (tmp && timeout--)
+       while ((AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON) & AC_W_FINISH)
+                                                               && timeout--)
                mdelay(1);
 
        if (!timeout)
@@ -149,7 +147,7 @@ static void nuc900_ac97_warm_reset(struct snd_ac97 *ac97)
        val |= AC_W_RES;
        AUDIO_WRITE(nuc900_audio->mmio + ACTL_ACCON, val);
 
-       udelay(1000);
+       udelay(100);
 
        val = nuc900_checkready();
        if (!!val)
@@ -170,40 +168,30 @@ static void nuc900_ac97_cold_reset(struct snd_ac97 *ac97)
        val |= ACTL_RESET_BIT;
        AUDIO_WRITE(nuc900_audio->mmio + ACTL_RESET, val);
 
-       udelay(1000);
-
        val = AUDIO_READ(nuc900_audio->mmio + ACTL_RESET);
        val &= (~ACTL_RESET_BIT);
        AUDIO_WRITE(nuc900_audio->mmio + ACTL_RESET, val);
 
-       udelay(1000);
-
        /* reset AC-link interface */
 
        val = AUDIO_READ(nuc900_audio->mmio + ACTL_RESET);
        val |= AC_RESET;
        AUDIO_WRITE(nuc900_audio->mmio + ACTL_RESET, val);
 
-       udelay(1000);
-
        val = AUDIO_READ(nuc900_audio->mmio + ACTL_RESET);
        val &= ~AC_RESET;
        AUDIO_WRITE(nuc900_audio->mmio + ACTL_RESET, val);
 
-       udelay(1000);
-
        /* cold reset AC 97 */
        val = AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON);
        val |= AC_C_RES;
        AUDIO_WRITE(nuc900_audio->mmio + ACTL_ACCON, val);
 
-       udelay(1000);
-
        val = AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON);
        val &= (~AC_C_RES);
        AUDIO_WRITE(nuc900_audio->mmio + ACTL_ACCON, val);
 
-       udelay(1000);
+       udelay(100);
 
        mutex_unlock(&ac97_mutex);
 
@@ -222,7 +210,7 @@ static int nuc900_ac97_trigger(struct snd_pcm_substream *substream,
                                int cmd, struct snd_soc_dai *dai)
 {
        struct nuc900_audio *nuc900_audio = nuc900_ac97_data;
-       int ret, stype = SUBSTREAM_TYPE(substream);
+       int ret;
        unsigned long val, tmp;
 
        ret = 0;
@@ -231,7 +219,7 @@ static int nuc900_ac97_trigger(struct snd_pcm_substream *substream,
        case SNDRV_PCM_TRIGGER_START:
        case SNDRV_PCM_TRIGGER_RESUME:
                val = AUDIO_READ(nuc900_audio->mmio + ACTL_RESET);
-               if (PCM_TX == stype) {
+               if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
                        tmp = AUDIO_READ(nuc900_audio->mmio + ACTL_ACOS0);
                        tmp |= (SLOT3_VALID | SLOT4_VALID | VALID_FRAME);
                        AUDIO_WRITE(nuc900_audio->mmio + ACTL_ACOS0, tmp);
@@ -254,7 +242,7 @@ static int nuc900_ac97_trigger(struct snd_pcm_substream *substream,
        case SNDRV_PCM_TRIGGER_STOP:
        case SNDRV_PCM_TRIGGER_SUSPEND:
                val = AUDIO_READ(nuc900_audio->mmio + ACTL_RESET);
-               if (PCM_TX == stype) {
+               if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
                        tmp = AUDIO_READ(nuc900_audio->mmio + ACTL_ACOS0);
                        tmp &= ~(SLOT3_VALID | SLOT4_VALID);
                        AUDIO_WRITE(nuc900_audio->mmio + ACTL_ACOS0, tmp);
@@ -309,8 +297,7 @@ static struct snd_soc_dai_ops nuc900_ac97_dai_ops = {
        .trigger        = nuc900_ac97_trigger,
 };
 
-struct snd_soc_dai nuc900_ac97_dai = {
-       .name                   = "nuc900-ac97",
+static struct snd_soc_dai_driver nuc900_ac97_dai = {
        .probe                  = nuc900_ac97_probe,
        .remove                 = nuc900_ac97_remove,
        .ac97_control           = 1,
@@ -328,7 +315,6 @@ struct snd_soc_dai nuc900_ac97_dai = {
        },
        .ops = &nuc900_ac97_dai_ops,
 }
-EXPORT_SYMBOL_GPL(nuc900_ac97_dai);
 
 static int __devinit nuc900_ac97_drvprobe(struct platform_device *pdev)
 {
@@ -377,9 +363,7 @@ static int __devinit nuc900_ac97_drvprobe(struct platform_device *pdev)
 
        nuc900_ac97_data = nuc900_audio;
 
-       nuc900_audio->dev = nuc900_ac97_dai.dev =  &pdev->dev;
-
-       ret = snd_soc_register_dai(&nuc900_ac97_dai);
+       ret = snd_soc_register_dai(&pdev->dev, &nuc900_ac97_dai);
        if (ret)
                goto out3;
 
@@ -402,7 +386,7 @@ out0:
 static int __devexit nuc900_ac97_drvremove(struct platform_device *pdev)
 {
 
-       snd_soc_unregister_dai(&nuc900_ac97_dai);
+       snd_soc_unregister_dai(&pdev->dev);
 
        clk_put(nuc900_ac97_data->clk);
        iounmap(nuc900_ac97_data->mmio);
@@ -416,7 +400,7 @@ static int __devexit nuc900_ac97_drvremove(struct platform_device *pdev)
 
 static struct platform_driver nuc900_ac97_driver = {
        .driver = {
-               .name   = "nuc900-audio",
+               .name   = "nuc900-ac97",
                .owner  = THIS_MODULE,
        },
        .probe          = nuc900_ac97_drvprobe,