ASoC: rt5645: Add a rt5645_components() helper

The rt5645 codec driver uses DMI quirks to configure the DMIC data-pins,
which means that it knows which DMIC interface is used on a specific
device.

ATM we duplicate this DMI matching inside the UCM profiles to select
the right DMIC interface. Add a rt5645_components() helper which the
machine-driver can use to set the components string of the card so
that UCM can get the info from the components string.

This way we only need to add new DMI quirks in one place.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://msgid.link/r/20231126214024.300505-6-hdegoede@redhat.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Hans de Goede 2023-11-26 22:40:22 +01:00 committed by Mark Brown
parent b4635b9cd9
commit 4cd7654553
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
2 changed files with 27 additions and 0 deletions

View File

@ -3902,6 +3902,30 @@ static void rt5645_get_pdata(struct device *codec_dev, struct rt5645_platform_da
}
}
const char *rt5645_components(struct device *codec_dev)
{
struct rt5645_platform_data pdata = { };
static char buf[32];
const char *mic;
int spk = 2;
rt5645_get_pdata(codec_dev, &pdata);
if (pdata.dmic1_data_pin && pdata.dmic2_data_pin)
mic = "dmics12";
else if (pdata.dmic1_data_pin)
mic = "dmic1";
else if (pdata.dmic2_data_pin)
mic = "dmic2";
else
mic = "in2";
snprintf(buf, sizeof(buf), "cfg-spk:%d cfg-mic:%s", spk, mic);
return buf;
}
EXPORT_SYMBOL_GPL(rt5645_components);
static int rt5645_i2c_probe(struct i2c_client *i2c)
{
struct rt5645_priv *rt5645;

View File

@ -2201,4 +2201,7 @@ int rt5645_sel_asrc_clk_src(struct snd_soc_component *component,
int rt5645_set_jack_detect(struct snd_soc_component *component,
struct snd_soc_jack *hp_jack, struct snd_soc_jack *mic_jack,
struct snd_soc_jack *btn_jack);
const char *rt5645_components(struct device *codec_dev);
#endif /* __RT5645_H__ */