Merge remote-tracking branch 'asoc/topic/simple-card' into asoc-next
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 11 Feb 2013 11:06:43 +0000 (11:06 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 11 Feb 2013 11:06:43 +0000 (11:06 +0000)
arch/arm/mach-shmobile/board-ap4evb.c
arch/arm/mach-shmobile/board-armadillo800eva.c
arch/arm/mach-shmobile/board-kzm9g.c
arch/arm/mach-shmobile/board-mackerel.c
arch/sh/boards/mach-ecovec24/setup.c
arch/sh/boards/mach-se/7724/setup.c
include/sound/simple_card.h
sound/soc/generic/simple-card.c

index 4c97903..08294fa 100644 (file)
@@ -686,21 +686,21 @@ static struct platform_device fsi_device = {
        },
 };
 
-static struct asoc_simple_dai_init_info fsi2_ak4643_init_info = {
-       .fmt            = SND_SOC_DAIFMT_LEFT_J,
-       .codec_daifmt   = SND_SOC_DAIFMT_CBM_CFM,
-       .cpu_daifmt     = SND_SOC_DAIFMT_CBS_CFS,
-       .sysclk         = 11289600,
-};
-
 static struct asoc_simple_card_info fsi2_ak4643_info = {
        .name           = "AK4643",
        .card           = "FSI2A-AK4643",
-       .cpu_dai        = "fsia-dai",
        .codec          = "ak4642-codec.0-0013",
        .platform       = "sh_fsi2",
-       .codec_dai      = "ak4642-hifi",
-       .init           = &fsi2_ak4643_init_info,
+       .daifmt         = SND_SOC_DAIFMT_LEFT_J,
+       .cpu_dai = {
+               .name   = "fsia-dai",
+               .fmt    = SND_SOC_DAIFMT_CBS_CFS,
+       },
+       .codec_dai = {
+               .name   = "ak4642-hifi",
+               .fmt    = SND_SOC_DAIFMT_CBM_CFM,
+               .sysclk = 11289600,
+       },
 };
 
 static struct platform_device fsi_ak4643_device = {
@@ -809,19 +809,18 @@ static struct platform_device lcdc1_device = {
        },
 };
 
-static struct asoc_simple_dai_init_info fsi2_hdmi_init_info = {
-       .cpu_daifmt     = SND_SOC_DAIFMT_CBM_CFM |
-                         SND_SOC_DAIFMT_IB_NF,
-};
-
 static struct asoc_simple_card_info fsi2_hdmi_info = {
        .name           = "HDMI",
        .card           = "FSI2B-HDMI",
-       .cpu_dai        = "fsib-dai",
        .codec          = "sh-mobile-hdmi",
        .platform       = "sh_fsi2",
-       .codec_dai      = "sh_mobile_hdmi-hifi",
-       .init           = &fsi2_hdmi_init_info,
+       .cpu_dai = {
+               .name   = "fsib-dai",
+               .fmt    = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF,
+       },
+       .codec_dai = {
+               .name   = "sh_mobile_hdmi-hifi",
+       },
 };
 
 static struct platform_device fsi_hdmi_device = {
index 5353adf..0679ca6 100644 (file)
@@ -806,21 +806,21 @@ static struct platform_device fsi_device = {
 };
 
 /* FSI-WM8978 */
-static struct asoc_simple_dai_init_info fsi_wm8978_init_info = {
-       .fmt            = SND_SOC_DAIFMT_I2S,
-       .codec_daifmt   = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_NB_NF,
-       .cpu_daifmt     = SND_SOC_DAIFMT_CBS_CFS,
-       .sysclk         = 12288000,
-};
-
 static struct asoc_simple_card_info fsi_wm8978_info = {
        .name           = "wm8978",
        .card           = "FSI2A-WM8978",
-       .cpu_dai        = "fsia-dai",
        .codec          = "wm8978.0-001a",
        .platform       = "sh_fsi2",
-       .codec_dai      = "wm8978-hifi",
-       .init           = &fsi_wm8978_init_info,
+       .daifmt         = SND_SOC_DAIFMT_I2S,
+       .cpu_dai = {
+               .name   = "fsia-dai",
+               .fmt    = SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_IB_NF,
+       },
+       .codec_dai = {
+               .name   = "wm8978-hifi",
+               .fmt    = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_NB_NF,
+               .sysclk = 12288000,
+       },
 };
 
 static struct platform_device fsi_wm8978_device = {
@@ -832,18 +832,18 @@ static struct platform_device fsi_wm8978_device = {
 };
 
 /* FSI-HDMI */
-static struct asoc_simple_dai_init_info fsi2_hdmi_init_info = {
-       .cpu_daifmt     = SND_SOC_DAIFMT_CBM_CFM,
-};
-
 static struct asoc_simple_card_info fsi2_hdmi_info = {
        .name           = "HDMI",
        .card           = "FSI2B-HDMI",
-       .cpu_dai        = "fsib-dai",
        .codec          = "sh-mobile-hdmi",
        .platform       = "sh_fsi2",
-       .codec_dai      = "sh_mobile_hdmi-hifi",
-       .init           = &fsi2_hdmi_init_info,
+       .cpu_dai = {
+               .name   = "fsib-dai",
+               .fmt    = SND_SOC_DAIFMT_CBM_CFM,
+       },
+       .codec_dai = {
+               .name = "sh_mobile_hdmi-hifi",
+       },
 };
 
 static struct platform_device fsi_hdmi_device = {
index c02448d..f41b71e 100644 (file)
@@ -525,21 +525,21 @@ static struct platform_device fsi_device = {
        },
 };
 
-static struct asoc_simple_dai_init_info fsi2_ak4648_init_info = {
-       .fmt            = SND_SOC_DAIFMT_LEFT_J,
-       .codec_daifmt   = SND_SOC_DAIFMT_CBM_CFM,
-       .cpu_daifmt     = SND_SOC_DAIFMT_CBS_CFS,
-       .sysclk         = 11289600,
-};
-
 static struct asoc_simple_card_info fsi2_ak4648_info = {
        .name           = "AK4648",
        .card           = "FSI2A-AK4648",
-       .cpu_dai        = "fsia-dai",
        .codec          = "ak4642-codec.0-0012",
        .platform       = "sh_fsi2",
-       .codec_dai      = "ak4642-hifi",
-       .init           = &fsi2_ak4648_init_info,
+       .daifmt         = SND_SOC_DAIFMT_LEFT_J,
+       .cpu_dai = {
+               .name   = "fsia-dai",
+               .fmt    = SND_SOC_DAIFMT_CBS_CFS,
+       },
+       .codec_dai = {
+               .name   = "ak4642-hifi",
+               .fmt    = SND_SOC_DAIFMT_CBM_CFM,
+               .sysclk = 11289600,
+       },
 };
 
 static struct platform_device fsi_ak4648_device = {
index b5d210b..3fd716d 100644 (file)
@@ -502,19 +502,18 @@ static struct platform_device hdmi_lcdc_device = {
        },
 };
 
-static struct asoc_simple_dai_init_info fsi2_hdmi_init_info = {
-       .cpu_daifmt     = SND_SOC_DAIFMT_CBM_CFM |
-                         SND_SOC_DAIFMT_IB_NF,
-};
-
 static struct asoc_simple_card_info fsi2_hdmi_info = {
        .name           = "HDMI",
        .card           = "FSI2B-HDMI",
-       .cpu_dai        = "fsib-dai",
        .codec          = "sh-mobile-hdmi",
        .platform       = "sh_fsi2",
-       .codec_dai      = "sh_mobile_hdmi-hifi",
-       .init           = &fsi2_hdmi_init_info,
+       .cpu_dai = {
+               .name   = "fsib-dai",
+               .fmt    = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF,
+       },
+       .codec_dai = {
+               .name   = "sh_mobile_hdmi-hifi",
+       },
 };
 
 static struct platform_device fsi_hdmi_device = {
@@ -893,21 +892,21 @@ static struct platform_device fsi_device = {
        },
 };
 
-static struct asoc_simple_dai_init_info fsi2_ak4643_init_info = {
-       .fmt            = SND_SOC_DAIFMT_LEFT_J,
-       .codec_daifmt   = SND_SOC_DAIFMT_CBM_CFM,
-       .cpu_daifmt     = SND_SOC_DAIFMT_CBS_CFS,
-       .sysclk         = 11289600,
-};
-
 static struct asoc_simple_card_info fsi2_ak4643_info = {
        .name           = "AK4643",
        .card           = "FSI2A-AK4643",
-       .cpu_dai        = "fsia-dai",
        .codec          = "ak4642-codec.0-0013",
        .platform       = "sh_fsi2",
-       .codec_dai      = "ak4642-hifi",
-       .init           = &fsi2_ak4643_init_info,
+       .daifmt         = SND_SOC_DAIFMT_LEFT_J,
+       .cpu_dai = {
+               .name   = "fsia-dai",
+               .fmt    = SND_SOC_DAIFMT_CBS_CFS,
+       },
+       .codec_dai = {
+               .name   = "ak4642-hifi",
+               .fmt    = SND_SOC_DAIFMT_CBM_CFM,
+               .sysclk = 11289600,
+       },
 };
 
 static struct platform_device fsi_ak4643_device = {
index 023b3f0..aaff767 100644 (file)
@@ -907,21 +907,20 @@ static struct platform_device fsi_device = {
        .resource       = fsi_resources,
 };
 
-static struct asoc_simple_dai_init_info fsi_da7210_init_info = {
-       .fmt            = SND_SOC_DAIFMT_I2S,
-       .codec_daifmt   = SND_SOC_DAIFMT_CBM_CFM,
-       .cpu_daifmt     = SND_SOC_DAIFMT_CBS_CFS |
-                         SND_SOC_DAIFMT_IB_NF,
-};
-
 static struct asoc_simple_card_info fsi_da7210_info = {
        .name           = "DA7210",
        .card           = "FSIB-DA7210",
-       .cpu_dai        = "fsib-dai",
        .codec          = "da7210.0-001a",
        .platform       = "sh_fsi.0",
-       .codec_dai      = "da7210-hifi",
-       .init           = &fsi_da7210_init_info,
+       .daifmt         = SND_SOC_DAIFMT_I2S,
+       .cpu_dai = {
+               .name   = "fsib-dai",
+               .fmt    = SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_IB_NF,
+       },
+       .codec_dai = {
+               .name   = "da7210-hifi",
+               .fmt    = SND_SOC_DAIFMT_CBM_CFM,
+       },
 };
 
 static struct platform_device fsi_da7210_device = {
index 975608f..4010e63 100644 (file)
@@ -299,22 +299,21 @@ static struct platform_device fsi_device = {
        .resource       = fsi_resources,
 };
 
-static struct asoc_simple_dai_init_info fsi2_ak4642_init_info = {
-       .fmt            = SND_SOC_DAIFMT_LEFT_J,
-       .codec_daifmt   = SND_SOC_DAIFMT_CBM_CFM,
-       .cpu_daifmt     = SND_SOC_DAIFMT_CBS_CFS |
-                         SND_SOC_DAIFMT_IB_NF,
-       .sysclk         = 11289600,
-};
-
 static struct asoc_simple_card_info fsi_ak4642_info = {
        .name           = "AK4642",
        .card           = "FSIA-AK4642",
-       .cpu_dai        = "fsia-dai",
        .codec          = "ak4642-codec.0-0012",
        .platform       = "sh_fsi.0",
-       .codec_dai      = "ak4642-hifi",
-       .init           = &fsi2_ak4642_init_info,
+       .daifmt         = SND_SOC_DAIFMT_LEFT_J,
+       .cpu_dai = {
+               .name   = "fsia-dai",
+               .fmt    = SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_IB_NF,
+       },
+       .codec_dai = {
+               .name   = "ak4642-hifi",
+               .fmt    = SND_SOC_DAIFMT_CBM_CFM,
+               .sysclk = 11289600,
+       },
 };
 
 static struct platform_device fsi_ak4642_device = {
index 4b62b8d..6c74527 100644 (file)
 
 #include <sound/soc.h>
 
-struct asoc_simple_dai_init_info {
+struct asoc_simple_dai {
+       const char *name;
        unsigned int fmt;
-       unsigned int cpu_daifmt;
-       unsigned int codec_daifmt;
        unsigned int sysclk;
 };
 
 struct asoc_simple_card_info {
        const char *name;
        const char *card;
-       const char *cpu_dai;
        const char *codec;
        const char *platform;
-       const char *codec_dai;
-       struct asoc_simple_dai_init_info *init; /* for snd_link.init */
+
+       unsigned int daifmt;
+       struct asoc_simple_dai cpu_dai;
+       struct asoc_simple_dai codec_dai;
 
        /* used in simple-card.c */
        struct snd_soc_dai_link snd_link;
index b4b4cab..6cf8355 100644 (file)
 #define asoc_simple_get_card_info(p) \
        container_of(p->dai_link, struct asoc_simple_card_info, snd_link)
 
+static int __asoc_simple_card_dai_init(struct snd_soc_dai *dai,
+                                      struct asoc_simple_dai *set,
+                                      unsigned int daifmt)
+{
+       int ret = 0;
+
+       daifmt |= set->fmt;
+
+       if (!ret && daifmt)
+               ret = snd_soc_dai_set_fmt(dai, daifmt);
+
+       if (!ret && set->sysclk)
+               ret = snd_soc_dai_set_sysclk(dai, 0, set->sysclk, 0);
+
+       return ret;
+}
+
 static int asoc_simple_card_dai_init(struct snd_soc_pcm_runtime *rtd)
 {
-       struct asoc_simple_card_info *cinfo = asoc_simple_get_card_info(rtd);
-       struct asoc_simple_dai_init_info *iinfo = cinfo->init;
+       struct asoc_simple_card_info *info = asoc_simple_get_card_info(rtd);
        struct snd_soc_dai *codec = rtd->codec_dai;
        struct snd_soc_dai *cpu = rtd->cpu_dai;
-       unsigned int cpu_daifmt = iinfo->fmt | iinfo->cpu_daifmt;
-       unsigned int codec_daifmt = iinfo->fmt | iinfo->codec_daifmt;
+       unsigned int daifmt = info->daifmt;
        int ret;
 
-       if (codec_daifmt) {
-               ret = snd_soc_dai_set_fmt(codec, codec_daifmt);
-               if (ret < 0)
-                       return ret;
-       }
-
-       if (iinfo->sysclk) {
-               ret = snd_soc_dai_set_sysclk(codec, 0, iinfo->sysclk, 0);
-               if (ret < 0)
-                       return ret;
-       }
+       ret = __asoc_simple_card_dai_init(codec, &info->codec_dai, daifmt);
+       if (ret < 0)
+               return ret;
 
-       if (cpu_daifmt) {
-               ret = snd_soc_dai_set_fmt(cpu, cpu_daifmt);
-               if (ret < 0)
-                       return ret;
-       }
+       ret = __asoc_simple_card_dai_init(cpu, &info->cpu_dai, daifmt);
+       if (ret < 0)
+               return ret;
 
        return 0;
 }
@@ -50,19 +55,20 @@ static int asoc_simple_card_dai_init(struct snd_soc_pcm_runtime *rtd)
 static int asoc_simple_card_probe(struct platform_device *pdev)
 {
        struct asoc_simple_card_info *cinfo = pdev->dev.platform_data;
+       struct device *dev = &pdev->dev;
 
        if (!cinfo) {
-               dev_err(&pdev->dev, "no info for asoc-simple-card\n");
+               dev_err(dev, "no info for asoc-simple-card\n");
                return -EINVAL;
        }
 
        if (!cinfo->name        ||
            !cinfo->card        ||
-           !cinfo->cpu_dai     ||
            !cinfo->codec       ||
            !cinfo->platform    ||
-           !cinfo->codec_dai) {
-               dev_err(&pdev->dev, "insufficient asoc_simple_card_info settings\n");
+           !cinfo->cpu_dai.name ||
+           !cinfo->codec_dai.name) {
+               dev_err(dev, "insufficient asoc_simple_card_info settings\n");
                return -EINVAL;
        }
 
@@ -71,14 +77,11 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
         */
        cinfo->snd_link.name            = cinfo->name;
        cinfo->snd_link.stream_name     = cinfo->name;
-       cinfo->snd_link.cpu_dai_name    = cinfo->cpu_dai;
+       cinfo->snd_link.cpu_dai_name    = cinfo->cpu_dai.name;
        cinfo->snd_link.platform_name   = cinfo->platform;
        cinfo->snd_link.codec_name      = cinfo->codec;
-       cinfo->snd_link.codec_dai_name  = cinfo->codec_dai;
-
-       /* enable snd_link.init if cinfo has settings */
-       if (cinfo->init)
-               cinfo->snd_link.init    = asoc_simple_card_dai_init;
+       cinfo->snd_link.codec_dai_name  = cinfo->codec_dai.name;
+       cinfo->snd_link.init            = asoc_simple_card_dai_init;
 
        /*
         * init snd_soc_card