Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 293750f9 authored by Daniel Mack's avatar Daniel Mack Committed by Mark Brown
Browse files

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: default avatarDaniel Mack <zonque@gmail.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent ddffeb8c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ Optional properties:

 - reset-gpio: 	a GPIO spec to define which pin is connected to the chip's
		!RESET pin
 - cirrus,amuteb-eq-bmutec:	When given, the Codec's AMUTEB=BMUTEC flag
				is enabled.

Examples:

+1 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@

struct cs4271_platform_data {
	int gpio_nreset;	/* GPIO driving Reset pin, if any */
	int amutec_eq_bmutec:1;	/* flag to enable AMUTEC=BMUTEC */
};

#endif /* __CS4271_H */
+18 −3
Original line number Diff line number Diff line
@@ -474,16 +474,26 @@ static int cs4271_probe(struct snd_soc_codec *codec)
	struct cs4271_platform_data *cs4271plat = codec->dev->platform_data;
	int ret;
	int gpio_nreset = -EINVAL;
	int amutec_eq_bmutec = 0;

#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,
						"reset-gpio", 0);

		if (!of_get_property(codec->dev->of_node,
				     "cirrus,amutec-eq-bmutec", NULL))
			amutec_eq_bmutec = 1;
	}
#endif

	if (cs4271plat && gpio_is_valid(cs4271plat->gpio_nreset))
	if (cs4271plat) {
		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_request(gpio_nreset, "CS4271 Reset"))
			gpio_nreset = -EINVAL;
@@ -528,6 +538,11 @@ static int cs4271_probe(struct snd_soc_codec *codec)
	/* Power-up sequence requires 85 uS */
	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,
		ARRAY_SIZE(cs4271_snd_controls));
}