aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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: