浏览代码

iio: light: ltr501: Powerdown device on error

Power down device when an error occurs  in order to avoid wasting
power. Move powerdown function up to be seen by the new call and
align parameters for the ltr501_write_contr() call.

Signed-off-by: Cristina Opriceana <cristina.opriceana@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cristina Opriceana 10 年之前
父节点
当前提交
1ca510b0ea
共有 1 个文件被更改,包括 10 次插入8 次删除
  1. 10 8
      drivers/iio/light/ltr501.c

+ 10 - 8
drivers/iio/light/ltr501.c

@@ -333,6 +333,13 @@ static int ltr501_init(struct ltr501_data *data)
 		data->ps_contr);
 		data->ps_contr);
 }
 }
 
 
+static int ltr501_powerdown(struct ltr501_data *data)
+{
+	return ltr501_write_contr(data->client,
+				  data->als_contr & ~LTR501_CONTR_ACTIVE,
+				  data->ps_contr & ~LTR501_CONTR_ACTIVE);
+}
+
 static int ltr501_probe(struct i2c_client *client,
 static int ltr501_probe(struct i2c_client *client,
 			  const struct i2c_device_id *id)
 			  const struct i2c_device_id *id)
 {
 {
@@ -370,7 +377,7 @@ static int ltr501_probe(struct i2c_client *client,
 	ret = iio_triggered_buffer_setup(indio_dev, NULL,
 	ret = iio_triggered_buffer_setup(indio_dev, NULL,
 		ltr501_trigger_handler, NULL);
 		ltr501_trigger_handler, NULL);
 	if (ret)
 	if (ret)
-		return ret;
+		goto powerdown_on_error;
 
 
 	ret = iio_device_register(indio_dev);
 	ret = iio_device_register(indio_dev);
 	if (ret)
 	if (ret)
@@ -380,16 +387,11 @@ static int ltr501_probe(struct i2c_client *client,
 
 
 error_unreg_buffer:
 error_unreg_buffer:
 	iio_triggered_buffer_cleanup(indio_dev);
 	iio_triggered_buffer_cleanup(indio_dev);
+powerdown_on_error:
+	ltr501_powerdown(data);
 	return ret;
 	return ret;
 }
 }
 
 
-static int ltr501_powerdown(struct ltr501_data *data)
-{
-	return ltr501_write_contr(data->client,
-		data->als_contr & ~LTR501_CONTR_ACTIVE,
-		data->ps_contr & ~LTR501_CONTR_ACTIVE);
-}
-
 static int ltr501_remove(struct i2c_client *client)
 static int ltr501_remove(struct i2c_client *client)
 {
 {
 	struct iio_dev *indio_dev = i2c_get_clientdata(client);
 	struct iio_dev *indio_dev = i2c_get_clientdata(client);