lkml.org 
[lkml]   [2018]   [Apr]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 1/3] ASoC: tas6424: Add support for the standby pin
    Date
    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>
    ---
    .../devicetree/bindings/sound/ti,tas6424.txt | 1 +
    sound/soc/codecs/tas6424.c | 22 ++++++++++++++++++++++
    2 files changed, 23 insertions(+)

    diff --git a/Documentation/devicetree/bindings/sound/ti,tas6424.txt b/Documentation/devicetree/bindings/sound/ti,tas6424.txt
    index 1c4ada0..df71e41 100644
    --- a/Documentation/devicetree/bindings/sound/ti,tas6424.txt
    +++ b/Documentation/devicetree/bindings/sound/ti,tas6424.txt
    @@ -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:

    diff --git a/sound/soc/codecs/tas6424.c b/sound/soc/codecs/tas6424.c
    index 4f3a16c..5abb17f 100644
    --- a/sound/soc/codecs/tas6424.c
    +++ b/sound/soc/codecs/tas6424.c
    @@ -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) {
    --
    2.7.4
    \
     
     \ /
      Last update: 2018-04-27 15:57    [W:4.438 / U:0.184 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site