ASoC: tas6424: Add support for the standby pin
The standby pin can be connected to a GPIO. In that case we have to drive it to the correct values for the TAS6424 to operate properly. Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
b24c539b4d
commit
e3976aa6fb
|
@ -6,6 +6,7 @@ Required properties:
|
|||
- compatible: "ti,tas6424" - TAS6424
|
||||
- reg: I2C slave address
|
||||
- sound-dai-cells: must be equal to 0
|
||||
- standby-gpios: GPIO used to shut the TAS6424 down.
|
||||
|
||||
Example:
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/pcm_params.h>
|
||||
|
@ -43,6 +44,7 @@ struct tas6424_data {
|
|||
unsigned int last_fault1;
|
||||
unsigned int last_fault2;
|
||||
unsigned int last_warn;
|
||||
struct gpio_desc *standby_gpio;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -627,6 +629,22 @@ static int tas6424_i2c_probe(struct i2c_client *client,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get control of the standby pin and set it LOW to take the codec
|
||||
* out of the stand-by mode.
|
||||
* Note: The actual pin polarity is taken care of in the GPIO lib
|
||||
* according the polarity specified in the DTS.
|
||||
*/
|
||||
tas6424->standby_gpio = devm_gpiod_get_optional(dev, "standby",
|
||||
GPIOD_OUT_LOW);
|
||||
if (IS_ERR(tas6424->standby_gpio)) {
|
||||
if (PTR_ERR(tas6424->standby_gpio) == -EPROBE_DEFER)
|
||||
return -EPROBE_DEFER;
|
||||
dev_info(dev, "failed to get standby GPIO: %ld\n",
|
||||
PTR_ERR(tas6424->standby_gpio));
|
||||
tas6424->standby_gpio = NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(tas6424->supplies); i++)
|
||||
tas6424->supplies[i].supply = tas6424_supply_names[i];
|
||||
ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(tas6424->supplies),
|
||||
|
@ -671,6 +689,10 @@ static int tas6424_i2c_remove(struct i2c_client *client)
|
|||
|
||||
cancel_delayed_work_sync(&tas6424->fault_check_work);
|
||||
|
||||
/* put the codec in stand-by */
|
||||
if (tas6424->standby_gpio)
|
||||
gpiod_set_value_cansleep(tas6424->standby_gpio, 1);
|
||||
|
||||
ret = regulator_bulk_disable(ARRAY_SIZE(tas6424->supplies),
|
||||
tas6424->supplies);
|
||||
if (ret < 0) {
|
||||
|
|
Loading…
Reference in New Issue