Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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 <akshayaj.lkd@gmail.com>
Link: https://patch.msgid.link/20250814034544.93331-1-akshayaj.lkd@gmail.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Akshay Jindal and committed by
Jonathan Cameron
946bfea3 7c1ece9b

+20 -1
+20 -1
drivers/iio/light/ltr390.c
··· 680 680 return IRQ_HANDLED; 681 681 } 682 682 683 + static void ltr390_powerdown(void *priv) 684 + { 685 + struct ltr390_data *data = priv; 686 + 687 + guard(mutex)(&data->lock); 688 + 689 + /* Ensure that power off and interrupts are disabled */ 690 + if (regmap_clear_bits(data->regmap, LTR390_INT_CFG, 691 + LTR390_LS_INT_EN) < 0) 692 + dev_err(&data->client->dev, "failed to disable interrupts\n"); 693 + 694 + if (regmap_clear_bits(data->regmap, LTR390_MAIN_CTRL, 695 + LTR390_SENSOR_ENABLE) < 0) 696 + dev_err(&data->client->dev, "failed to disable sensor\n"); 697 + } 698 + 683 699 static int ltr390_probe(struct i2c_client *client) 684 700 { 685 701 struct ltr390_data *data; ··· 709 693 return -ENOMEM; 710 694 711 695 data = iio_priv(indio_dev); 712 - 713 696 data->regmap = devm_regmap_init_i2c(client, &ltr390_regmap_config); 714 697 if (IS_ERR(data->regmap)) 715 698 return dev_err_probe(dev, PTR_ERR(data->regmap), ··· 747 732 ret = regmap_set_bits(data->regmap, LTR390_MAIN_CTRL, LTR390_SENSOR_ENABLE); 748 733 if (ret) 749 734 return dev_err_probe(dev, ret, "failed to enable the sensor\n"); 735 + 736 + ret = devm_add_action_or_reset(dev, ltr390_powerdown, data); 737 + if (ret) 738 + return dev_err_probe(dev, ret, "failed to add action or reset\n"); 750 739 751 740 if (client->irq) { 752 741 ret = devm_request_threaded_irq(dev, client->irq,