Re: [PATCH V7 2/2] iio: accell: mma8452: add vdd/vddio regulator operation support
On 12.01.19 20:11, Jonathan Cameron wrote: > On Tue, 8 Jan 2019 14:48:48 + > Anson Huang wrote: > >> Hi, Martin >> >> From Anson's iPhone 6 >> >> >>> 在 2019年1月8日,19:41,Martin Kepplinger 写道: >>> On 08.01.19 10:14, Anson Huang wrote: The accelerometer's power supply could be controllable on some platforms, such as i.MX6Q-SABRESD board, the mma8451's power supplies are controlled by a GPIO fixed regulator, need to make sure the regulators are enabled before any communication with mma8451, this patch adds vdd/vddio regulator operation support. Signed-off-by: Anson Huang Acked-by: Martin Kepplinger --- ChangeLog Since V6: - separate the error handling of regulators get to make code easy to read. --- drivers/iio/accel/mma8452.c | 105 ++-- 1 file changed, 83 insertions(+), 22 deletions(-) diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c index 421a0a8..3027811 100644 --- a/drivers/iio/accel/mma8452.c +++ b/drivers/iio/accel/mma8452.c @@ -31,6 +31,7 @@ #include #include #include +#include #define MMA8452_STATUS0x00 #define MMA8452_STATUS_DRDY(BIT(2) | BIT(1) | BIT(0)) @@ -107,6 +108,8 @@ struct mma8452_data { u8 data_cfg; const struct mma_chip_info *chip_info; int sleep_val; +struct regulator *vdd_reg; +struct regulator *vddio_reg; }; /** @@ -1534,9 +1537,39 @@ static int mma8452_probe(struct i2c_client *client, mutex_init(&data->lock); data->chip_info = match->data; +data->vdd_reg = devm_regulator_get(&client->dev, "vdd"); +if (IS_ERR(data->vdd_reg)) { +if (PTR_ERR(data->vdd_reg) == -EPROBE_DEFER) +return -EPROBE_DEFER; + +dev_err(&client->dev, "failed to get VDD regulator!\n"); +return PTR_ERR(data->vdd_reg); +} + +data->vddio_reg = devm_regulator_get(&client->dev, "vddio"); +if (IS_ERR(data->vddio_reg)) { +if (PTR_ERR(data->vddio_reg) == -EPROBE_DEFER) +return -EPROBE_DEFER; + +dev_err(&client->dev, "failed to get VDDIO regulator!\n"); +return PTR_ERR(data->vddio_reg); +} + +ret = regulator_enable(data->vdd_reg); +if (ret) { +dev_err(&client->dev, "failed to enable VDD regulator!\n"); +return ret; +} + +ret = regulator_enable(data->vddio_reg); +if (ret) { +dev_err(&client->dev, "failed to enable VDDIO regulator!\n"); +goto disable_regulator_vdd; +} + ret = i2c_smbus_read_byte_data(client, MMA8452_WHO_AM_I); if (ret < 0) -return ret; +goto disable_regulators; switch (ret) { case MMA8451_DEVICE_ID: @@ -1549,7 +1582,8 @@ static int mma8452_probe(struct i2c_client *client, break; /* else: fall through */ default: -return -ENODEV; +ret = -ENODEV; +goto disable_regulators; } dev_info(&client->dev, "registering %s accelerometer; ID 0x%x\n", @@ -1566,13 +1600,13 @@ static int mma8452_probe(struct i2c_client *client, ret = mma8452_reset(client); if (ret < 0) -return ret; +goto disable_regulators; data->data_cfg = MMA8452_DATA_CFG_FS_2G; ret = i2c_smbus_write_byte_data(client, MMA8452_DATA_CFG, data->data_cfg); if (ret < 0) -return ret; +goto disable_regulators; /* * By default set transient threshold to max to avoid events if @@ -1581,7 +1615,7 @@ static int mma8452_probe(struct i2c_client *client, ret = i2c_smbus_write_byte_data(client, MMA8452_TRANSIENT_THS, MMA8452_TRANSIENT_THS_MASK); if (ret < 0) -return ret; +goto disable_regulators; if (client->irq) { int irq2; @@ -1595,7 +1629,7 @@ static int mma8452_probe(struct i2c_client *client, MMA8452_CTRL_REG5, data->chip_info->all_events); if (ret < 0) -return ret; +goto disable_regulators; dev_dbg(&client->dev, "using interrupt line INT1\n"); } @@ -1604,11 +1638,11 @@ static int mma8452_probe(struct i2c_client *client, MMA8452_CTRL_REG4, data->chip_info->enabled_events); if (ret < 0) -return ret; +goto disable_regulators; ret = mma8452_trigger_setup(indio_dev);
Re: [PATCH V7 2/2] iio: accell: mma8452: add vdd/vddio regulator operation support
On Tue, 8 Jan 2019 14:48:48 + Anson Huang wrote: > Hi, Martin > > From Anson's iPhone 6 > > > > 在 2019年1月8日,19:41,Martin Kepplinger 写道: > > > >> On 08.01.19 10:14, Anson Huang wrote: > >> The accelerometer's power supply could be controllable on some > >> platforms, such as i.MX6Q-SABRESD board, the mma8451's power supplies > >> are controlled by a GPIO fixed regulator, need to make sure the > >> regulators are enabled before any communication with mma8451, this > >> patch adds vdd/vddio regulator operation support. > >> > >> Signed-off-by: Anson Huang > >> Acked-by: Martin Kepplinger > >> --- > >> ChangeLog Since V6: > >> - separate the error handling of regulators get to make code easy to read. > >> --- > >> drivers/iio/accel/mma8452.c | 105 > >> ++-- > >> 1 file changed, 83 insertions(+), 22 deletions(-) > >> > >> diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c > >> index 421a0a8..3027811 100644 > >> --- a/drivers/iio/accel/mma8452.c > >> +++ b/drivers/iio/accel/mma8452.c > >> @@ -31,6 +31,7 @@ > >> #include > >> #include > >> #include > >> +#include > >> > >> #define MMA8452_STATUS0x00 > >> #define MMA8452_STATUS_DRDY(BIT(2) | BIT(1) | BIT(0)) > >> @@ -107,6 +108,8 @@ struct mma8452_data { > >>u8 data_cfg; > >>const struct mma_chip_info *chip_info; > >>int sleep_val; > >> +struct regulator *vdd_reg; > >> +struct regulator *vddio_reg; > >> }; > >> > >> /** > >> @@ -1534,9 +1537,39 @@ static int mma8452_probe(struct i2c_client *client, > >>mutex_init(&data->lock); > >>data->chip_info = match->data; > >> > >> +data->vdd_reg = devm_regulator_get(&client->dev, "vdd"); > >> +if (IS_ERR(data->vdd_reg)) { > >> +if (PTR_ERR(data->vdd_reg) == -EPROBE_DEFER) > >> +return -EPROBE_DEFER; > >> + > >> +dev_err(&client->dev, "failed to get VDD regulator!\n"); > >> +return PTR_ERR(data->vdd_reg); > >> +} > >> + > >> +data->vddio_reg = devm_regulator_get(&client->dev, "vddio"); > >> +if (IS_ERR(data->vddio_reg)) { > >> +if (PTR_ERR(data->vddio_reg) == -EPROBE_DEFER) > >> +return -EPROBE_DEFER; > >> + > >> +dev_err(&client->dev, "failed to get VDDIO regulator!\n"); > >> +return PTR_ERR(data->vddio_reg); > >> +} > >> + > >> +ret = regulator_enable(data->vdd_reg); > >> +if (ret) { > >> +dev_err(&client->dev, "failed to enable VDD regulator!\n"); > >> +return ret; > >> +} > >> + > >> +ret = regulator_enable(data->vddio_reg); > >> +if (ret) { > >> +dev_err(&client->dev, "failed to enable VDDIO regulator!\n"); > >> +goto disable_regulator_vdd; > >> +} > >> + > >>ret = i2c_smbus_read_byte_data(client, MMA8452_WHO_AM_I); > >>if (ret < 0) > >> -return ret; > >> +goto disable_regulators; > >> > >>switch (ret) { > >>case MMA8451_DEVICE_ID: > >> @@ -1549,7 +1582,8 @@ static int mma8452_probe(struct i2c_client *client, > >>break; > >>/* else: fall through */ > >>default: > >> -return -ENODEV; > >> +ret = -ENODEV; > >> +goto disable_regulators; > >>} > >> > >>dev_info(&client->dev, "registering %s accelerometer; ID 0x%x\n", > >> @@ -1566,13 +1600,13 @@ static int mma8452_probe(struct i2c_client *client, > >> > >>ret = mma8452_reset(client); > >>if (ret < 0) > >> -return ret; > >> +goto disable_regulators; > >> > >>data->data_cfg = MMA8452_DATA_CFG_FS_2G; > >>ret = i2c_smbus_write_byte_data(client, MMA8452_DATA_CFG, > >>data->data_cfg); > >>if (ret < 0) > >> -return ret; > >> +goto disable_regulators; > >> > >>/* > >> * By default set transient threshold to max to avoid events if > >> @@ -1581,7 +1615,7 @@ static int mma8452_probe(struct i2c_client *client, > >>ret = i2c_smbus_write_byte_data(client, MMA8452_TRANSIENT_THS, > >>MMA8452_TRANSIENT_THS_MASK); > >>if (ret < 0) > >> -return ret; > >> +goto disable_regulators; > >> > >>if (client->irq) { > >>int irq2; > >> @@ -1595,7 +1629,7 @@ static int mma8452_probe(struct i2c_client *client, > >>MMA8452_CTRL_REG5, > >>data->chip_info->all_events); > >>if (ret < 0) > >> -return ret; > >> +goto disable_regulators; > >> > >>dev_dbg(&client->dev, "using interrupt line INT1\n"); > >>} > >> @@ -1604,11 +1638,11 @@ static int mma8452_probe(struct i2c_client *client, > >>MMA8452_CTRL_REG4, > >>data->chip_info->enabled_events); > >>if (ret < 0) > >> -return ret; > >> +goto disable_regulators; > >> > >>ret = mma8452_trigger_setup(indio_dev); > >>if (ret < 0) > >> -retu
Re: [PATCH V7 2/2] iio: accell: mma8452: add vdd/vddio regulator operation support
Hi, Martin From Anson's iPhone 6 > 在 2019年1月8日,19:41,Martin Kepplinger 写道: > >> On 08.01.19 10:14, Anson Huang wrote: >> The accelerometer's power supply could be controllable on some >> platforms, such as i.MX6Q-SABRESD board, the mma8451's power supplies >> are controlled by a GPIO fixed regulator, need to make sure the >> regulators are enabled before any communication with mma8451, this >> patch adds vdd/vddio regulator operation support. >> >> Signed-off-by: Anson Huang >> Acked-by: Martin Kepplinger >> --- >> ChangeLog Since V6: >> - separate the error handling of regulators get to make code easy to read. >> --- >> drivers/iio/accel/mma8452.c | 105 >> ++-- >> 1 file changed, 83 insertions(+), 22 deletions(-) >> >> diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c >> index 421a0a8..3027811 100644 >> --- a/drivers/iio/accel/mma8452.c >> +++ b/drivers/iio/accel/mma8452.c >> @@ -31,6 +31,7 @@ >> #include >> #include >> #include >> +#include >> >> #define MMA8452_STATUS0x00 >> #define MMA8452_STATUS_DRDY(BIT(2) | BIT(1) | BIT(0)) >> @@ -107,6 +108,8 @@ struct mma8452_data { >>u8 data_cfg; >>const struct mma_chip_info *chip_info; >>int sleep_val; >> +struct regulator *vdd_reg; >> +struct regulator *vddio_reg; >> }; >> >> /** >> @@ -1534,9 +1537,39 @@ static int mma8452_probe(struct i2c_client *client, >>mutex_init(&data->lock); >>data->chip_info = match->data; >> >> +data->vdd_reg = devm_regulator_get(&client->dev, "vdd"); >> +if (IS_ERR(data->vdd_reg)) { >> +if (PTR_ERR(data->vdd_reg) == -EPROBE_DEFER) >> +return -EPROBE_DEFER; >> + >> +dev_err(&client->dev, "failed to get VDD regulator!\n"); >> +return PTR_ERR(data->vdd_reg); >> +} >> + >> +data->vddio_reg = devm_regulator_get(&client->dev, "vddio"); >> +if (IS_ERR(data->vddio_reg)) { >> +if (PTR_ERR(data->vddio_reg) == -EPROBE_DEFER) >> +return -EPROBE_DEFER; >> + >> +dev_err(&client->dev, "failed to get VDDIO regulator!\n"); >> +return PTR_ERR(data->vddio_reg); >> +} >> + >> +ret = regulator_enable(data->vdd_reg); >> +if (ret) { >> +dev_err(&client->dev, "failed to enable VDD regulator!\n"); >> +return ret; >> +} >> + >> +ret = regulator_enable(data->vddio_reg); >> +if (ret) { >> +dev_err(&client->dev, "failed to enable VDDIO regulator!\n"); >> +goto disable_regulator_vdd; >> +} >> + >>ret = i2c_smbus_read_byte_data(client, MMA8452_WHO_AM_I); >>if (ret < 0) >> -return ret; >> +goto disable_regulators; >> >>switch (ret) { >>case MMA8451_DEVICE_ID: >> @@ -1549,7 +1582,8 @@ static int mma8452_probe(struct i2c_client *client, >>break; >>/* else: fall through */ >>default: >> -return -ENODEV; >> +ret = -ENODEV; >> +goto disable_regulators; >>} >> >>dev_info(&client->dev, "registering %s accelerometer; ID 0x%x\n", >> @@ -1566,13 +1600,13 @@ static int mma8452_probe(struct i2c_client *client, >> >>ret = mma8452_reset(client); >>if (ret < 0) >> -return ret; >> +goto disable_regulators; >> >>data->data_cfg = MMA8452_DATA_CFG_FS_2G; >>ret = i2c_smbus_write_byte_data(client, MMA8452_DATA_CFG, >>data->data_cfg); >>if (ret < 0) >> -return ret; >> +goto disable_regulators; >> >>/* >> * By default set transient threshold to max to avoid events if >> @@ -1581,7 +1615,7 @@ static int mma8452_probe(struct i2c_client *client, >>ret = i2c_smbus_write_byte_data(client, MMA8452_TRANSIENT_THS, >>MMA8452_TRANSIENT_THS_MASK); >>if (ret < 0) >> -return ret; >> +goto disable_regulators; >> >>if (client->irq) { >>int irq2; >> @@ -1595,7 +1629,7 @@ static int mma8452_probe(struct i2c_client *client, >>MMA8452_CTRL_REG5, >>data->chip_info->all_events); >>if (ret < 0) >> -return ret; >> +goto disable_regulators; >> >>dev_dbg(&client->dev, "using interrupt line INT1\n"); >>} >> @@ -1604,11 +1638,11 @@ static int mma8452_probe(struct i2c_client *client, >>MMA8452_CTRL_REG4, >>data->chip_info->enabled_events); >>if (ret < 0) >> -return ret; >> +goto disable_regulators; >> >>ret = mma8452_trigger_setup(indio_dev); >>if (ret < 0) >> -return ret; >> +goto disable_regulators; >>} >> >>data->ctrl_reg1 = MMA8452_CTRL_ACTIVE | >> @@ -1661,12 +1695,19 @@ static int mma8452_probe(struct i2c_client *client, >> trigger_cleanup: >>mma8452_trigger_cleanup(indio_dev); >> >> +disable_regulators: >> +regulator_disable(data->vddio_reg); >> + >> +disable_
Re: [PATCH V7 2/2] iio: accell: mma8452: add vdd/vddio regulator operation support
On 08.01.19 10:14, Anson Huang wrote: > The accelerometer's power supply could be controllable on some > platforms, such as i.MX6Q-SABRESD board, the mma8451's power supplies > are controlled by a GPIO fixed regulator, need to make sure the > regulators are enabled before any communication with mma8451, this > patch adds vdd/vddio regulator operation support. > > Signed-off-by: Anson Huang > Acked-by: Martin Kepplinger > --- > ChangeLog Since V6: > - separate the error handling of regulators get to make code easy to read. > --- > drivers/iio/accel/mma8452.c | 105 > ++-- > 1 file changed, 83 insertions(+), 22 deletions(-) > > diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c > index 421a0a8..3027811 100644 > --- a/drivers/iio/accel/mma8452.c > +++ b/drivers/iio/accel/mma8452.c > @@ -31,6 +31,7 @@ > #include > #include > #include > +#include > > #define MMA8452_STATUS 0x00 > #define MMA8452_STATUS_DRDY (BIT(2) | BIT(1) | BIT(0)) > @@ -107,6 +108,8 @@ struct mma8452_data { > u8 data_cfg; > const struct mma_chip_info *chip_info; > int sleep_val; > + struct regulator *vdd_reg; > + struct regulator *vddio_reg; > }; > > /** > @@ -1534,9 +1537,39 @@ static int mma8452_probe(struct i2c_client *client, > mutex_init(&data->lock); > data->chip_info = match->data; > > + data->vdd_reg = devm_regulator_get(&client->dev, "vdd"); > + if (IS_ERR(data->vdd_reg)) { > + if (PTR_ERR(data->vdd_reg) == -EPROBE_DEFER) > + return -EPROBE_DEFER; > + > + dev_err(&client->dev, "failed to get VDD regulator!\n"); > + return PTR_ERR(data->vdd_reg); > + } > + > + data->vddio_reg = devm_regulator_get(&client->dev, "vddio"); > + if (IS_ERR(data->vddio_reg)) { > + if (PTR_ERR(data->vddio_reg) == -EPROBE_DEFER) > + return -EPROBE_DEFER; > + > + dev_err(&client->dev, "failed to get VDDIO regulator!\n"); > + return PTR_ERR(data->vddio_reg); > + } > + > + ret = regulator_enable(data->vdd_reg); > + if (ret) { > + dev_err(&client->dev, "failed to enable VDD regulator!\n"); > + return ret; > + } > + > + ret = regulator_enable(data->vddio_reg); > + if (ret) { > + dev_err(&client->dev, "failed to enable VDDIO regulator!\n"); > + goto disable_regulator_vdd; > + } > + > ret = i2c_smbus_read_byte_data(client, MMA8452_WHO_AM_I); > if (ret < 0) > - return ret; > + goto disable_regulators; > > switch (ret) { > case MMA8451_DEVICE_ID: > @@ -1549,7 +1582,8 @@ static int mma8452_probe(struct i2c_client *client, > break; > /* else: fall through */ > default: > - return -ENODEV; > + ret = -ENODEV; > + goto disable_regulators; > } > > dev_info(&client->dev, "registering %s accelerometer; ID 0x%x\n", > @@ -1566,13 +1600,13 @@ static int mma8452_probe(struct i2c_client *client, > > ret = mma8452_reset(client); > if (ret < 0) > - return ret; > + goto disable_regulators; > > data->data_cfg = MMA8452_DATA_CFG_FS_2G; > ret = i2c_smbus_write_byte_data(client, MMA8452_DATA_CFG, > data->data_cfg); > if (ret < 0) > - return ret; > + goto disable_regulators; > > /* >* By default set transient threshold to max to avoid events if > @@ -1581,7 +1615,7 @@ static int mma8452_probe(struct i2c_client *client, > ret = i2c_smbus_write_byte_data(client, MMA8452_TRANSIENT_THS, > MMA8452_TRANSIENT_THS_MASK); > if (ret < 0) > - return ret; > + goto disable_regulators; > > if (client->irq) { > int irq2; > @@ -1595,7 +1629,7 @@ static int mma8452_probe(struct i2c_client *client, > MMA8452_CTRL_REG5, > data->chip_info->all_events); > if (ret < 0) > - return ret; > + goto disable_regulators; > > dev_dbg(&client->dev, "using interrupt line INT1\n"); > } > @@ -1604,11 +1638,11 @@ static int mma8452_probe(struct i2c_client *client, > MMA8452_CTRL_REG4, > data->chip_info->enabled_events); > if (ret < 0) > - return ret; > + goto disable_regulators; > > ret = mma8452_trigger_setup(indio_dev); > if (ret < 0) > - return ret; > + goto disable_regulators; >
[PATCH V7 2/2] iio: accell: mma8452: add vdd/vddio regulator operation support
The accelerometer's power supply could be controllable on some platforms, such as i.MX6Q-SABRESD board, the mma8451's power supplies are controlled by a GPIO fixed regulator, need to make sure the regulators are enabled before any communication with mma8451, this patch adds vdd/vddio regulator operation support. Signed-off-by: Anson Huang Acked-by: Martin Kepplinger --- ChangeLog Since V6: - separate the error handling of regulators get to make code easy to read. --- drivers/iio/accel/mma8452.c | 105 ++-- 1 file changed, 83 insertions(+), 22 deletions(-) diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c index 421a0a8..3027811 100644 --- a/drivers/iio/accel/mma8452.c +++ b/drivers/iio/accel/mma8452.c @@ -31,6 +31,7 @@ #include #include #include +#include #define MMA8452_STATUS 0x00 #define MMA8452_STATUS_DRDY (BIT(2) | BIT(1) | BIT(0)) @@ -107,6 +108,8 @@ struct mma8452_data { u8 data_cfg; const struct mma_chip_info *chip_info; int sleep_val; + struct regulator *vdd_reg; + struct regulator *vddio_reg; }; /** @@ -1534,9 +1537,39 @@ static int mma8452_probe(struct i2c_client *client, mutex_init(&data->lock); data->chip_info = match->data; + data->vdd_reg = devm_regulator_get(&client->dev, "vdd"); + if (IS_ERR(data->vdd_reg)) { + if (PTR_ERR(data->vdd_reg) == -EPROBE_DEFER) + return -EPROBE_DEFER; + + dev_err(&client->dev, "failed to get VDD regulator!\n"); + return PTR_ERR(data->vdd_reg); + } + + data->vddio_reg = devm_regulator_get(&client->dev, "vddio"); + if (IS_ERR(data->vddio_reg)) { + if (PTR_ERR(data->vddio_reg) == -EPROBE_DEFER) + return -EPROBE_DEFER; + + dev_err(&client->dev, "failed to get VDDIO regulator!\n"); + return PTR_ERR(data->vddio_reg); + } + + ret = regulator_enable(data->vdd_reg); + if (ret) { + dev_err(&client->dev, "failed to enable VDD regulator!\n"); + return ret; + } + + ret = regulator_enable(data->vddio_reg); + if (ret) { + dev_err(&client->dev, "failed to enable VDDIO regulator!\n"); + goto disable_regulator_vdd; + } + ret = i2c_smbus_read_byte_data(client, MMA8452_WHO_AM_I); if (ret < 0) - return ret; + goto disable_regulators; switch (ret) { case MMA8451_DEVICE_ID: @@ -1549,7 +1582,8 @@ static int mma8452_probe(struct i2c_client *client, break; /* else: fall through */ default: - return -ENODEV; + ret = -ENODEV; + goto disable_regulators; } dev_info(&client->dev, "registering %s accelerometer; ID 0x%x\n", @@ -1566,13 +1600,13 @@ static int mma8452_probe(struct i2c_client *client, ret = mma8452_reset(client); if (ret < 0) - return ret; + goto disable_regulators; data->data_cfg = MMA8452_DATA_CFG_FS_2G; ret = i2c_smbus_write_byte_data(client, MMA8452_DATA_CFG, data->data_cfg); if (ret < 0) - return ret; + goto disable_regulators; /* * By default set transient threshold to max to avoid events if @@ -1581,7 +1615,7 @@ static int mma8452_probe(struct i2c_client *client, ret = i2c_smbus_write_byte_data(client, MMA8452_TRANSIENT_THS, MMA8452_TRANSIENT_THS_MASK); if (ret < 0) - return ret; + goto disable_regulators; if (client->irq) { int irq2; @@ -1595,7 +1629,7 @@ static int mma8452_probe(struct i2c_client *client, MMA8452_CTRL_REG5, data->chip_info->all_events); if (ret < 0) - return ret; + goto disable_regulators; dev_dbg(&client->dev, "using interrupt line INT1\n"); } @@ -1604,11 +1638,11 @@ static int mma8452_probe(struct i2c_client *client, MMA8452_CTRL_REG4, data->chip_info->enabled_events); if (ret < 0) - return ret; + goto disable_regulators; ret = mma8452_trigger_setup(indio_dev); if (ret < 0) - return ret; + goto disable_regulators; } data->ctrl_reg1 = MMA8452_CTRL_ACTIVE | @@ -1661,12 +1695,19 @@ static int mma8452_probe(struct i2c_client *client, trigger_cleanup