ASoC: codecs: ad193x: Remove capture support for codecs without ADC
authorCodrin Ciubotariu <codrin.ciubotariu@microchip.com>
Mon, 18 Feb 2019 16:10:28 +0000 (16:10 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 18 Feb 2019 17:40:50 +0000 (17:40 +0000)
Some ad193x codecs don't have ADCs, so they have no capture capabilities.
This way, we can use this driver in multicodec cards.

Signed-off-by: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/ad193x.c

index 4b60ebee491dce7090e70c20a09bf8601b73d50d..21a38cc9e3da8311fd1329cf69f012727b6d0f5c 100644 (file)
@@ -351,6 +351,20 @@ static struct snd_soc_dai_driver ad193x_dai = {
        .ops = &ad193x_dai_ops,
 };
 
+/* codec DAI instance for DAC only */
+static struct snd_soc_dai_driver ad193x_no_adc_dai = {
+       .name = "ad193x-hifi",
+       .playback = {
+               .stream_name = "Playback",
+               .channels_min = 2,
+               .channels_max = 8,
+               .rates = SNDRV_PCM_RATE_48000,
+               .formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S16_LE |
+                       SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE,
+       },
+       .ops = &ad193x_dai_ops,
+};
+
 static int ad193x_component_probe(struct snd_soc_component *component)
 {
        struct ad193x_priv *ad193x = snd_soc_component_get_drvdata(component);
@@ -444,8 +458,11 @@ int ad193x_probe(struct device *dev, struct regmap *regmap,
 
        dev_set_drvdata(dev, ad193x);
 
+       if (ad193x_has_adc(ad193x))
+               return devm_snd_soc_register_component(dev, &soc_component_dev_ad193x,
+                                                      &ad193x_dai, 1);
        return devm_snd_soc_register_component(dev, &soc_component_dev_ad193x,
-               &ad193x_dai, 1);
+               &ad193x_no_adc_dai, 1);
 }
 EXPORT_SYMBOL_GPL(ad193x_probe);