ASoC: cs4271: add support for AMUTEB=BMUTEC feature
The CS4271 has a feature to sync its analog mute flags, so one mute circuitry can be used for both channels. Give users access to this feature with a new DT property and a flag in the platform data. Signed-off-by: Daniel Mack <zonque@gmail.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
ddffeb8c4d
commit
293750f9bc
|
@ -18,6 +18,8 @@ Optional properties:
|
||||||
|
|
||||||
- reset-gpio: a GPIO spec to define which pin is connected to the chip's
|
- reset-gpio: a GPIO spec to define which pin is connected to the chip's
|
||||||
!RESET pin
|
!RESET pin
|
||||||
|
- cirrus,amuteb-eq-bmutec: When given, the Codec's AMUTEB=BMUTEC flag
|
||||||
|
is enabled.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
struct cs4271_platform_data {
|
struct cs4271_platform_data {
|
||||||
int gpio_nreset; /* GPIO driving Reset pin, if any */
|
int gpio_nreset; /* GPIO driving Reset pin, if any */
|
||||||
|
int amutec_eq_bmutec:1; /* flag to enable AMUTEC=BMUTEC */
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __CS4271_H */
|
#endif /* __CS4271_H */
|
||||||
|
|
|
@ -474,15 +474,25 @@ static int cs4271_probe(struct snd_soc_codec *codec)
|
||||||
struct cs4271_platform_data *cs4271plat = codec->dev->platform_data;
|
struct cs4271_platform_data *cs4271plat = codec->dev->platform_data;
|
||||||
int ret;
|
int ret;
|
||||||
int gpio_nreset = -EINVAL;
|
int gpio_nreset = -EINVAL;
|
||||||
|
int amutec_eq_bmutec = 0;
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
if (of_match_device(cs4271_dt_ids, codec->dev))
|
if (of_match_device(cs4271_dt_ids, codec->dev)) {
|
||||||
gpio_nreset = of_get_named_gpio(codec->dev->of_node,
|
gpio_nreset = of_get_named_gpio(codec->dev->of_node,
|
||||||
"reset-gpio", 0);
|
"reset-gpio", 0);
|
||||||
|
|
||||||
|
if (!of_get_property(codec->dev->of_node,
|
||||||
|
"cirrus,amutec-eq-bmutec", NULL))
|
||||||
|
amutec_eq_bmutec = 1;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (cs4271plat && gpio_is_valid(cs4271plat->gpio_nreset))
|
if (cs4271plat) {
|
||||||
gpio_nreset = cs4271plat->gpio_nreset;
|
if (gpio_is_valid(cs4271plat->gpio_nreset))
|
||||||
|
gpio_nreset = cs4271plat->gpio_nreset;
|
||||||
|
|
||||||
|
amutec_eq_bmutec = cs4271plat->amutec_eq_bmutec;
|
||||||
|
}
|
||||||
|
|
||||||
if (gpio_nreset >= 0)
|
if (gpio_nreset >= 0)
|
||||||
if (gpio_request(gpio_nreset, "CS4271 Reset"))
|
if (gpio_request(gpio_nreset, "CS4271 Reset"))
|
||||||
|
@ -528,6 +538,11 @@ static int cs4271_probe(struct snd_soc_codec *codec)
|
||||||
/* Power-up sequence requires 85 uS */
|
/* Power-up sequence requires 85 uS */
|
||||||
udelay(85);
|
udelay(85);
|
||||||
|
|
||||||
|
if (amutec_eq_bmutec)
|
||||||
|
snd_soc_update_bits(codec, CS4271_MODE2,
|
||||||
|
CS4271_MODE2_MUTECAEQUB,
|
||||||
|
CS4271_MODE2_MUTECAEQUB);
|
||||||
|
|
||||||
return snd_soc_add_codec_controls(codec, cs4271_snd_controls,
|
return snd_soc_add_codec_controls(codec, cs4271_snd_controls,
|
||||||
ARRAY_SIZE(cs4271_snd_controls));
|
ARRAY_SIZE(cs4271_snd_controls));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue