Commit 3d534537 authored by Hans de Goede's avatar Hans de Goede Committed by Mark Brown

ASoC: rt5670: Add a rt5670_components() helper

The rt5670 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 rt5670_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: default avatarHans de Goede <hdegoede@redhat.com>
Acked-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20210402140747.174716-6-hdegoede@redhat.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 84cb0d55
...@@ -3007,6 +3007,45 @@ static const struct dmi_system_id dmi_platform_intel_quirks[] = { ...@@ -3007,6 +3007,45 @@ static const struct dmi_system_id dmi_platform_intel_quirks[] = {
{} {}
}; };
const char *rt5670_components(void)
{
unsigned long quirk;
bool dmic1 = false;
bool dmic2 = false;
bool dmic3 = false;
if (quirk_override) {
quirk = quirk_override;
} else {
dmi_check_system(dmi_platform_intel_quirks);
quirk = rt5670_quirk;
}
if ((quirk & RT5670_DMIC1_IN2P) ||
(quirk & RT5670_DMIC1_GPIO6) ||
(quirk & RT5670_DMIC1_GPIO7))
dmic1 = true;
if ((quirk & RT5670_DMIC2_INR) ||
(quirk & RT5670_DMIC2_GPIO8))
dmic2 = true;
if (quirk & RT5670_DMIC3_GPIO5)
dmic3 = true;
if (dmic1 && dmic2)
return "cfg-spk:2 cfg-mic:dmics12";
else if (dmic1)
return "cfg-spk:2 cfg-mic:dmic1";
else if (dmic2)
return "cfg-spk:2 cfg-mic:dmic2";
else if (dmic3)
return "cfg-spk:2 cfg-mic:dmic3";
return NULL;
}
EXPORT_SYMBOL_GPL(rt5670_components);
static int rt5670_i2c_probe(struct i2c_client *i2c, static int rt5670_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id) const struct i2c_device_id *id)
{ {
......
...@@ -2024,4 +2024,6 @@ void rt5670_jack_suspend(struct snd_soc_component *component); ...@@ -2024,4 +2024,6 @@ void rt5670_jack_suspend(struct snd_soc_component *component);
void rt5670_jack_resume(struct snd_soc_component *component); void rt5670_jack_resume(struct snd_soc_component *component);
int rt5670_set_jack_detect(struct snd_soc_component *component, int rt5670_set_jack_detect(struct snd_soc_component *component,
struct snd_soc_jack *jack); struct snd_soc_jack *jack);
const char *rt5670_components(void);
#endif /* __RT5670_H__ */ #endif /* __RT5670_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment