Current simple-card supports sysclk settings but it is only for codec. In order to abolish deviation between cpu and codec, and in order to simplify processing, this patch adds asoc_simple_dai_set for initializing.
Signed-off-by: Kuninori Morimoto kuninori.morimoto.gx@renesas.com --- arch/arm/mach-shmobile/board-ap4evb.c | 11 +++--- arch/arm/mach-shmobile/board-armadillo800eva.c | 10 +++--- arch/arm/mach-shmobile/board-kzm9g.c | 8 ++--- arch/arm/mach-shmobile/board-mackerel.c | 11 +++--- arch/sh/boards/mach-ecovec24/setup.c | 7 ++-- arch/sh/boards/mach-se/7724/setup.c | 9 +++-- include/sound/simple_card.h | 12 ++++--- sound/soc/generic/simple-card.c | 44 ++++++++++++++---------- 8 files changed, 59 insertions(+), 53 deletions(-)
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index 4c97903..60e6be4 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c @@ -687,10 +687,10 @@ 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, + .daifmt = SND_SOC_DAIFMT_LEFT_J, + .cpu_set.daifmt = SND_SOC_DAIFMT_CBS_CFS, + .codec_set.daifmt = SND_SOC_DAIFMT_CBM_CFM, + .codec_set.sysclk = 11289600, };
static struct asoc_simple_card_info fsi2_ak4643_info = { @@ -810,8 +810,7 @@ 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, + .cpu_set.daifmt = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF, };
static struct asoc_simple_card_info fsi2_hdmi_info = { diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c index 042a21e..278324c 100644 --- a/arch/arm/mach-shmobile/board-armadillo800eva.c +++ b/arch/arm/mach-shmobile/board-armadillo800eva.c @@ -808,10 +808,10 @@ 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, + .daifmt = SND_SOC_DAIFMT_I2S, + .cpu_set.daifmt = SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_IB_NF, + .codec_set.daifmt = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_NB_NF, + .codec_set.sysclk = 12288000, };
static struct asoc_simple_card_info fsi_wm8978_info = { @@ -834,7 +834,7 @@ 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, + .cpu_set.daifmt = SND_SOC_DAIFMT_CBM_CFM, };
static struct asoc_simple_card_info fsi2_hdmi_info = { diff --git a/arch/arm/mach-shmobile/board-kzm9g.c b/arch/arm/mach-shmobile/board-kzm9g.c index 9ca7ce5..59a6dc3 100644 --- a/arch/arm/mach-shmobile/board-kzm9g.c +++ b/arch/arm/mach-shmobile/board-kzm9g.c @@ -527,10 +527,10 @@ 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, + .daifmt = SND_SOC_DAIFMT_LEFT_J, + .cpu_set.daifmt = SND_SOC_DAIFMT_CBS_CFS, + .codec_set.daifmt = SND_SOC_DAIFMT_CBM_CFM, + .codec_set.sysclk = 11289600, };
static struct asoc_simple_card_info fsi2_ak4648_info = { diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index b5d210b..d6380be 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c @@ -503,8 +503,7 @@ 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, + .cpu_set.daifmt = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF, };
static struct asoc_simple_card_info fsi2_hdmi_info = { @@ -894,10 +893,10 @@ 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, + .daifmt = SND_SOC_DAIFMT_LEFT_J, + .cpu_set.daifmt = SND_SOC_DAIFMT_CBS_CFS, + .codec_set.daifmt = SND_SOC_DAIFMT_CBM_CFM, + .codec_set.sysclk = 11289600, };
static struct asoc_simple_card_info fsi2_ak4643_info = { diff --git a/arch/sh/boards/mach-ecovec24/setup.c b/arch/sh/boards/mach-ecovec24/setup.c index 8ebe4c7..8e68d79 100644 --- a/arch/sh/boards/mach-ecovec24/setup.c +++ b/arch/sh/boards/mach-ecovec24/setup.c @@ -898,10 +898,9 @@ static struct platform_device fsi_device = { };
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, + .daifmt = SND_SOC_DAIFMT_I2S, + .codec_set.daifmt = SND_SOC_DAIFMT_CBM_CFM, + .cpu_set.daifmt = SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_IB_NF, };
static struct asoc_simple_card_info fsi_da7210_info = { diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index 975608f..8bf853f 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c @@ -300,11 +300,10 @@ static struct platform_device fsi_device = { };
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, + .daifmt = SND_SOC_DAIFMT_LEFT_J, + .cpu_set.daifmt = SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_IB_NF, + .codec_set.daifmt = SND_SOC_DAIFMT_CBM_CFM, + .codec_set.sysclk = 11289600, };
static struct asoc_simple_card_info fsi_ak4642_info = { diff --git a/include/sound/simple_card.h b/include/sound/simple_card.h index 4b62b8d..f99b586 100644 --- a/include/sound/simple_card.h +++ b/include/sound/simple_card.h @@ -14,13 +14,17 @@
#include <sound/soc.h>
-struct asoc_simple_dai_init_info { - unsigned int fmt; - unsigned int cpu_daifmt; - unsigned int codec_daifmt; +struct asoc_simple_dai_set { + unsigned int daifmt; unsigned int sysclk; };
+struct asoc_simple_dai_init_info { + unsigned int daifmt; + struct asoc_simple_dai_set cpu_set; + struct asoc_simple_dai_set codec_set; +}; + struct asoc_simple_card_info { const char *name; const char *card; diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c index bc050ec..aba6290 100644 --- a/sound/soc/generic/simple-card.c +++ b/sound/soc/generic/simple-card.c @@ -16,33 +16,39 @@ #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 *set, + unsigned int daifmt) +{ + int ret = 0; + + daifmt |= set->daifmt; + + 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_dai_init_info *info = cinfo->init; 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; - } + ret = __asoc_simple_card_dai_init(codec, &info->codec_set, 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; - } - - 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_set, daifmt); + if (ret < 0) + return ret;
return 0; }