ALSA: Allow passing platform_data to devices attached to AC97 bus
authorMarek Vasut <marek.vasut@gmail.com>
Wed, 22 Jul 2009 11:01:03 +0000 (13:01 +0200)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 23 Jul 2009 10:30:56 +0000 (11:30 +0100)
This patch allows passing platform_data to devices attached to AC97 bus
(like touchscreens, battery measurement chips ...).

Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
include/sound/ac97_codec.h
include/sound/soc-dai.h
sound/soc/soc-core.c

index 251fc1c..9b1c098 100644 (file)
@@ -642,4 +642,10 @@ int snd_ac97_pcm_double_rate_rules(struct snd_pcm_runtime *runtime);
 /* ad hoc AC97 device driver access */
 extern struct bus_type ac97_bus_type;
 
+/* AC97 platform_data adding function */
+static inline void snd_ac97_dev_add_pdata(struct snd_ac97 *ac97, void *data)
+{
+       ac97->dev.platform_data = data;
+}
+
 #endif /* __SOUND_AC97_CODEC_H */
index 05991b0..25d62ac 100644 (file)
@@ -179,6 +179,7 @@ struct snd_soc_dai {
        int ac97_control;
 
        struct device *dev;
+       void *ac97_pdata;       /* platform_data for the ac97 codec */
 
        /* DAI callbacks */
        int (*probe)(struct platform_device *pdev,
index 8bf49a4..5eabb71 100644 (file)
@@ -28,6 +28,7 @@
 #include <linux/bitops.h>
 #include <linux/debugfs.h>
 #include <linux/platform_device.h>
+#include <sound/ac97_codec.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
@@ -1461,8 +1462,11 @@ int snd_soc_init_card(struct snd_soc_device *socdev)
                                continue;
                        }
                }
-               if (card->dai_link[i].codec_dai->ac97_control)
+               if (card->dai_link[i].codec_dai->ac97_control) {
                        ac97 = 1;
+                       snd_ac97_dev_add_pdata(codec->ac97,
+                               card->dai_link[i].cpu_dai->ac97_pdata);
+               }
        }
        snprintf(codec->card->shortname, sizeof(codec->card->shortname),
                 "%s",  card->name);