aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Pargmann <mpa@pengutronix.de>2014-05-27 04:24:19 -0400
committerMark Brown <broonie@linaro.org>2014-06-01 06:55:07 -0400
commit85e59af24056ca7ffaf617cf6201c519e31dc668 (patch)
tree078aeeaa7fc17babcd10df32c8d6f50a2874ee46
parentfcdbadef378bc9cc64cb8cbfd96c23fc15812923 (diff)
ASoC: fsl-ssi: make fsl,mode property optional
The simple soundcard binding has its own way for specifying the dai format. To be able to use this binding we have to make the fsl,mode property optional. As the property is used in existing devicetrees keep the option around for compatibility reasons. Signed-off-by: Markus Pargmann <mpa@pengutronix.de> Tested-By: Michael Grzeschik <mgr@pengutronix.de> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--sound/soc/fsl/fsl_ssi.c41
1 files changed, 26 insertions, 15 deletions
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
index fa650112925a..18eacf5e399d 100644
--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -660,12 +660,9 @@ static int fsl_ssi_hw_params(struct snd_pcm_substream *substream,
660 return 0; 660 return 0;
661} 661}
662 662
663/** 663static int _fsl_ssi_set_dai_fmt(struct fsl_ssi_private *ssi_private,
664 * fsl_ssi_set_dai_fmt - configure Digital Audio Interface Format. 664 unsigned int fmt)
665 */
666static int fsl_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
667{ 665{
668 struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(cpu_dai);
669 struct ccsr_ssi __iomem *ssi = ssi_private->ssi; 666 struct ccsr_ssi __iomem *ssi = ssi_private->ssi;
670 u32 strcr = 0, stcr, srcr, scr, mask; 667 u32 strcr = 0, stcr, srcr, scr, mask;
671 u8 wm; 668 u8 wm;
@@ -804,6 +801,17 @@ static int fsl_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
804 fsl_ssi_setup_ac97(ssi_private); 801 fsl_ssi_setup_ac97(ssi_private);
805 802
806 return 0; 803 return 0;
804
805}
806
807/**
808 * fsl_ssi_set_dai_fmt - configure Digital Audio Interface Format.
809 */
810static int fsl_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
811{
812 struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(cpu_dai);
813
814 return _fsl_ssi_set_dai_fmt(ssi_private, fmt);
807} 815}
808 816
809/** 817/**
@@ -1135,7 +1143,6 @@ static int fsl_ssi_probe(struct platform_device *pdev)
1135 const uint32_t *iprop; 1143 const uint32_t *iprop;
1136 struct resource res; 1144 struct resource res;
1137 char name[64]; 1145 char name[64];
1138 bool ac97 = false;
1139 1146
1140 /* SSIs that are not connected on the board should have a 1147 /* SSIs that are not connected on the board should have a
1141 * status = "disabled" 1148 * status = "disabled"
@@ -1148,14 +1155,6 @@ static int fsl_ssi_probe(struct platform_device *pdev)
1148 if (!of_id || !of_id->data) 1155 if (!of_id || !of_id->data)
1149 return -EINVAL; 1156 return -EINVAL;
1150 1157
1151 sprop = of_get_property(np, "fsl,mode", NULL);
1152 if (!sprop) {
1153 dev_err(&pdev->dev, "fsl,mode property is necessary\n");
1154 return -EINVAL;
1155 }
1156 if (!strcmp(sprop, "ac97-slave"))
1157 ac97 = true;
1158
1159 ssi_private = devm_kzalloc(&pdev->dev, sizeof(*ssi_private), 1158 ssi_private = devm_kzalloc(&pdev->dev, sizeof(*ssi_private),
1160 GFP_KERNEL); 1159 GFP_KERNEL);
1161 if (!ssi_private) { 1160 if (!ssi_private) {
@@ -1165,10 +1164,19 @@ static int fsl_ssi_probe(struct platform_device *pdev)
1165 1164
1166 ssi_private->soc = of_id->data; 1165 ssi_private->soc = of_id->data;
1167 1166
1167 sprop = of_get_property(np, "fsl,mode", NULL);
1168 if (sprop) {
1169 if (!strcmp(sprop, "ac97-slave"))
1170 ssi_private->dai_fmt = SND_SOC_DAIFMT_AC97;
1171 else if (!strcmp(sprop, "i2s-slave"))
1172 ssi_private->dai_fmt = SND_SOC_DAIFMT_I2S |
1173 SND_SOC_DAIFMT_CBM_CFM;
1174 }
1175
1168 ssi_private->use_dma = !of_property_read_bool(np, 1176 ssi_private->use_dma = !of_property_read_bool(np,
1169 "fsl,fiq-stream-filter"); 1177 "fsl,fiq-stream-filter");
1170 1178
1171 if (ac97) { 1179 if (fsl_ssi_is_ac97(ssi_private)) {
1172 memcpy(&ssi_private->cpu_dai_drv, &fsl_ssi_ac97_dai, 1180 memcpy(&ssi_private->cpu_dai_drv, &fsl_ssi_ac97_dai,
1173 sizeof(fsl_ssi_ac97_dai)); 1181 sizeof(fsl_ssi_ac97_dai));
1174 1182
@@ -1279,6 +1287,9 @@ static int fsl_ssi_probe(struct platform_device *pdev)
1279 } 1287 }
1280 1288
1281done: 1289done:
1290 if (ssi_private->dai_fmt)
1291 _fsl_ssi_set_dai_fmt(ssi_private, ssi_private->dai_fmt);
1292
1282 return 0; 1293 return 0;
1283 1294
1284error_sound_card: 1295error_sound_card: