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;
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),
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,