generate a 5ms low pulse on sdb pin when startup, then the chip becomes more stable in the complex EM environment. Signed-off-by: Grant Feng <von81@xxxxxxx> --- drivers/leds/leds-is31fl319x.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/leds/leds-is31fl319x.c b/drivers/leds/leds-is31fl319x.c index ca6634b8683c..b4f70002cec9 100644 --- a/drivers/leds/leds-is31fl319x.c +++ b/drivers/leds/leds-is31fl319x.c @@ -16,6 +16,8 @@ #include <linux/of_device.h> #include <linux/regmap.h> #include <linux/slab.h> +#include <linux/delay.h> +#include <linux/gpio/consumer.h> /* register numbers */ #define IS31FL319X_SHUTDOWN 0x00 @@ -61,6 +63,7 @@ struct is31fl319x_chip { const struct is31fl319x_chipdef *cdef; struct i2c_client *client; + struct gpio_desc *sdb_pin; struct regmap *regmap; struct mutex lock; u32 audio_gain_db; @@ -265,6 +268,15 @@ static int is31fl319x_parse_dt(struct device *dev, is31->audio_gain_db = min(is31->audio_gain_db, IS31FL319X_AUDIO_GAIN_DB_MAX); + is31->sdb_pin = gpiod_get(dev, "sdb", GPIOD_ASIS); + if (IS_ERR(is31->sdb_pin)) { + dev_warn(dev, "failed to get gpio_sdb, try default\r\n"); + } else { + gpiod_direction_output(is31->sdb_pin, 0); + mdelay(5); + gpiod_direction_output(is31->sdb_pin, 1); + } + return 0; put_child_node: -- 2.17.1