From: Akshay Jindal Date: Thu, 14 Aug 2025 03:45:43 +0000 (+0530) Subject: iio: light: ltr390: Add device powerdown functionality via devm api X-Git-Tag: v6.18-rc1~74^2~7^2~126 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=946bfea3657a3b569ce1e59b29014ef5eb8c6c30;p=thirdparty%2Fkernel%2Fstable.git iio: light: ltr390: Add device powerdown functionality via devm api Use devm_add_action_or_reset() to do cleanup when the device is removed. Signed-off-by: Akshay Jindal Link: https://patch.msgid.link/20250814034544.93331-1-akshayaj.lkd@gmail.com Signed-off-by: Jonathan Cameron --- diff --git a/drivers/iio/light/ltr390.c b/drivers/iio/light/ltr390.c index 7733830dca670..2e1cf62e82012 100644 --- a/drivers/iio/light/ltr390.c +++ b/drivers/iio/light/ltr390.c @@ -680,6 +680,22 @@ static irqreturn_t ltr390_interrupt_handler(int irq, void *private) return IRQ_HANDLED; } +static void ltr390_powerdown(void *priv) +{ + struct ltr390_data *data = priv; + + guard(mutex)(&data->lock); + + /* Ensure that power off and interrupts are disabled */ + if (regmap_clear_bits(data->regmap, LTR390_INT_CFG, + LTR390_LS_INT_EN) < 0) + dev_err(&data->client->dev, "failed to disable interrupts\n"); + + if (regmap_clear_bits(data->regmap, LTR390_MAIN_CTRL, + LTR390_SENSOR_ENABLE) < 0) + dev_err(&data->client->dev, "failed to disable sensor\n"); +} + static int ltr390_probe(struct i2c_client *client) { struct ltr390_data *data; @@ -693,7 +709,6 @@ static int ltr390_probe(struct i2c_client *client) return -ENOMEM; data = iio_priv(indio_dev); - data->regmap = devm_regmap_init_i2c(client, <r390_regmap_config); if (IS_ERR(data->regmap)) return dev_err_probe(dev, PTR_ERR(data->regmap), @@ -733,6 +748,10 @@ static int ltr390_probe(struct i2c_client *client) if (ret) return dev_err_probe(dev, ret, "failed to enable the sensor\n"); + ret = devm_add_action_or_reset(dev, ltr390_powerdown, data); + if (ret) + return dev_err_probe(dev, ret, "failed to add action or reset\n"); + if (client->irq) { ret = devm_request_threaded_irq(dev, client->irq, NULL, ltr390_interrupt_handler,