This allows the driver to be probed and removed as a module powering it down on remove(). Signed-off-by: Hernán Gonzalez <hernan@xxxxxxxxxxxxxxxxxxxx> --- drivers/staging/iio/cdc/ad7746.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/staging/iio/cdc/ad7746.c b/drivers/staging/iio/cdc/ad7746.c index c29a221..05506bf9 100644 --- a/drivers/staging/iio/cdc/ad7746.c +++ b/drivers/staging/iio/cdc/ad7746.c @@ -775,6 +775,31 @@ static int ad7746_probe(struct i2c_client *client, return 0; } +static int ad7746_remove(struct i2c_client *client) +{ + struct iio_dev *indio_dev = i2c_get_clientdata(client); + struct ad7746_chip_info *chip = iio_priv(indio_dev); + unsigned char regval; + int ret; + + mutex_lock(&chip->lock); + + regval = chip->config | AD7746_CONF_MODE_PWRDN; + ret = i2c_smbus_write_byte_data(chip->client, AD7746_REG_CFG, regval); + + mutex_unlock(&chip->lock); + + if (ret < 0) { + dev_warn(&client->dev, "Could NOT Power Down!\n"); + goto out; + } + + iio_device_unregister(indio_dev); + +out: + return ret; +} + static const struct i2c_device_id ad7746_id[] = { { "ad7745", 7745 }, { "ad7746", 7746 }, @@ -799,6 +824,7 @@ static struct i2c_driver ad7746_driver = { .of_match_table = of_match_ptr(ad7746_of_match), }, .probe = ad7746_probe, + .remove = ad7746_remove, .id_table = ad7746_id, }; module_i2c_driver(ad7746_driver); -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html