* [PATCH 0/2] iio: bmc150: buffer cleanup and support for a new chip @ 2015-06-12 8:31 Vlad Dogaru 2015-06-12 8:31 ` [PATCH 1/2] iio: magn: bmc150: decouple buffer and trigger Vlad Dogaru 2015-06-12 8:31 ` [PATCH 2/2] iio: magn: bmc150: add support for bmc156 Vlad Dogaru 0 siblings, 2 replies; 7+ messages in thread From: Vlad Dogaru @ 2015-06-12 8:31 UTC (permalink / raw) To: irina.tirdea, jic23, linux-iio; +Cc: Vlad Dogaru These aren't really related, but I've posted them as a series in the interest of applying them cleanly. Vlad Dogaru (2): iio: magn: bmc150: decouple buffer and trigger iio: magn: bmc150: add support for bmc156 drivers/iio/magnetometer/bmc150_magn.c | 71 +++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 31 deletions(-) -- 1.9.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] iio: magn: bmc150: decouple buffer and trigger 2015-06-12 8:31 [PATCH 0/2] iio: bmc150: buffer cleanup and support for a new chip Vlad Dogaru @ 2015-06-12 8:31 ` Vlad Dogaru 2015-06-13 18:04 ` Jonathan Cameron 2015-06-21 13:57 ` Jonathan Cameron 2015-06-12 8:31 ` [PATCH 2/2] iio: magn: bmc150: add support for bmc156 Vlad Dogaru 1 sibling, 2 replies; 7+ messages in thread From: Vlad Dogaru @ 2015-06-12 8:31 UTC (permalink / raw) To: irina.tirdea, jic23, linux-iio; +Cc: Vlad Dogaru Signed-off-by: Vlad Dogaru <vlad.dogaru@intel.com> --- drivers/iio/magnetometer/bmc150_magn.c | 69 +++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/drivers/iio/magnetometer/bmc150_magn.c b/drivers/iio/magnetometer/bmc150_magn.c index d4c1788..a0e64f1 100644 --- a/drivers/iio/magnetometer/bmc150_magn.c +++ b/drivers/iio/magnetometer/bmc150_magn.c @@ -588,17 +588,6 @@ static int bmc150_magn_write_raw(struct iio_dev *indio_dev, } } -static int bmc150_magn_validate_trigger(struct iio_dev *indio_dev, - struct iio_trigger *trig) -{ - struct bmc150_magn_data *data = iio_priv(indio_dev); - - if (data->dready_trig != trig) - return -EINVAL; - - return 0; -} - static ssize_t bmc150_magn_show_samp_freq_avail(struct device *dev, struct device_attribute *attr, char *buf) @@ -659,7 +648,6 @@ static const struct iio_info bmc150_magn_info = { .attrs = &bmc150_magn_attrs_group, .read_raw = bmc150_magn_read_raw, .write_raw = bmc150_magn_write_raw, - .validate_trigger = bmc150_magn_validate_trigger, .driver_module = THIS_MODULE, }; @@ -682,7 +670,7 @@ static irqreturn_t bmc150_magn_trigger_handler(int irq, void *p) pf->timestamp); err: - iio_trigger_notify_done(data->dready_trig); + iio_trigger_notify_done(indio_dev->trig); return IRQ_HANDLED; } @@ -827,6 +815,27 @@ static const struct iio_trigger_ops bmc150_magn_trigger_ops = { .owner = THIS_MODULE, }; +static int bmc150_magn_buffer_preenable(struct iio_dev *indio_dev) +{ + struct bmc150_magn_data *data = iio_priv(indio_dev); + + return bmc150_magn_set_power_state(data, true); +} + +static int bmc150_magn_buffer_postdisable(struct iio_dev *indio_dev) +{ + struct bmc150_magn_data *data = iio_priv(indio_dev); + + return bmc150_magn_set_power_state(data, false); +} + +static const struct iio_buffer_setup_ops bmc150_magn_buffer_setup_ops = { + .preenable = bmc150_magn_buffer_preenable, + .postenable = iio_triggered_buffer_postenable, + .predisable = iio_triggered_buffer_predisable, + .postdisable = bmc150_magn_buffer_postdisable, +}; + static int bmc150_magn_gpio_probe(struct i2c_client *client) { struct device *dev; @@ -932,16 +941,6 @@ static int bmc150_magn_probe(struct i2c_client *client, goto err_poweroff; } - ret = iio_triggered_buffer_setup(indio_dev, - &iio_pollfunc_store_time, - bmc150_magn_trigger_handler, - NULL); - if (ret < 0) { - dev_err(&client->dev, - "iio triggered buffer setup failed\n"); - goto err_trigger_unregister; - } - ret = request_threaded_irq(client->irq, iio_trigger_generic_data_rdy_poll, NULL, @@ -951,14 +950,24 @@ static int bmc150_magn_probe(struct i2c_client *client, if (ret < 0) { dev_err(&client->dev, "request irq %d failed\n", client->irq); - goto err_buffer_cleanup; + goto err_trigger_unregister; } } + ret = iio_triggered_buffer_setup(indio_dev, + iio_pollfunc_store_time, + bmc150_magn_trigger_handler, + &bmc150_magn_buffer_setup_ops); + if (ret < 0) { + dev_err(&client->dev, + "iio triggered buffer setup failed\n"); + goto err_free_irq; + } + ret = iio_device_register(indio_dev); if (ret < 0) { dev_err(&client->dev, "unable to register iio device\n"); - goto err_free_irq; + goto err_buffer_cleanup; } ret = pm_runtime_set_active(&client->dev); @@ -976,12 +985,11 @@ static int bmc150_magn_probe(struct i2c_client *client, err_iio_unregister: iio_device_unregister(indio_dev); +err_buffer_cleanup: + iio_triggered_buffer_cleanup(indio_dev); err_free_irq: if (client->irq > 0) free_irq(client->irq, data->dready_trig); -err_buffer_cleanup: - if (data->dready_trig) - iio_triggered_buffer_cleanup(indio_dev); err_trigger_unregister: if (data->dready_trig) iio_trigger_unregister(data->dready_trig); @@ -1000,14 +1008,13 @@ static int bmc150_magn_remove(struct i2c_client *client) pm_runtime_put_noidle(&client->dev); iio_device_unregister(indio_dev); + iio_triggered_buffer_cleanup(indio_dev); if (client->irq > 0) free_irq(data->client->irq, data->dready_trig); - if (data->dready_trig) { - iio_triggered_buffer_cleanup(indio_dev); + if (data->dready_trig) iio_trigger_unregister(data->dready_trig); - } mutex_lock(&data->mutex); bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SUSPEND, true); -- 1.9.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] iio: magn: bmc150: decouple buffer and trigger 2015-06-12 8:31 ` [PATCH 1/2] iio: magn: bmc150: decouple buffer and trigger Vlad Dogaru @ 2015-06-13 18:04 ` Jonathan Cameron 2015-06-23 14:18 ` Tirdea, Irina 2015-06-21 13:57 ` Jonathan Cameron 1 sibling, 1 reply; 7+ messages in thread From: Jonathan Cameron @ 2015-06-13 18:04 UTC (permalink / raw) To: Vlad Dogaru, irina.tirdea, linux-iio On 12/06/15 09:31, Vlad Dogaru wrote: > Signed-off-by: Vlad Dogaru <vlad.dogaru@intel.com> Looks good to me. Will let it sit for a while to give Irina and others time to comment though. We are looking at the next cycle now anyway so no rush! Jonathan > --- > drivers/iio/magnetometer/bmc150_magn.c | 69 +++++++++++++++++++--------------- > 1 file changed, 38 insertions(+), 31 deletions(-) > > diff --git a/drivers/iio/magnetometer/bmc150_magn.c b/drivers/iio/magnetometer/bmc150_magn.c > index d4c1788..a0e64f1 100644 > --- a/drivers/iio/magnetometer/bmc150_magn.c > +++ b/drivers/iio/magnetometer/bmc150_magn.c > @@ -588,17 +588,6 @@ static int bmc150_magn_write_raw(struct iio_dev *indio_dev, > } > } > > -static int bmc150_magn_validate_trigger(struct iio_dev *indio_dev, > - struct iio_trigger *trig) > -{ > - struct bmc150_magn_data *data = iio_priv(indio_dev); > - > - if (data->dready_trig != trig) > - return -EINVAL; > - > - return 0; > -} > - > static ssize_t bmc150_magn_show_samp_freq_avail(struct device *dev, > struct device_attribute *attr, > char *buf) > @@ -659,7 +648,6 @@ static const struct iio_info bmc150_magn_info = { > .attrs = &bmc150_magn_attrs_group, > .read_raw = bmc150_magn_read_raw, > .write_raw = bmc150_magn_write_raw, > - .validate_trigger = bmc150_magn_validate_trigger, > .driver_module = THIS_MODULE, > }; > > @@ -682,7 +670,7 @@ static irqreturn_t bmc150_magn_trigger_handler(int irq, void *p) > pf->timestamp); > > err: > - iio_trigger_notify_done(data->dready_trig); > + iio_trigger_notify_done(indio_dev->trig); > > return IRQ_HANDLED; > } > @@ -827,6 +815,27 @@ static const struct iio_trigger_ops bmc150_magn_trigger_ops = { > .owner = THIS_MODULE, > }; > > +static int bmc150_magn_buffer_preenable(struct iio_dev *indio_dev) > +{ > + struct bmc150_magn_data *data = iio_priv(indio_dev); > + > + return bmc150_magn_set_power_state(data, true); > +} > + > +static int bmc150_magn_buffer_postdisable(struct iio_dev *indio_dev) > +{ > + struct bmc150_magn_data *data = iio_priv(indio_dev); > + > + return bmc150_magn_set_power_state(data, false); > +} > + > +static const struct iio_buffer_setup_ops bmc150_magn_buffer_setup_ops = { > + .preenable = bmc150_magn_buffer_preenable, > + .postenable = iio_triggered_buffer_postenable, > + .predisable = iio_triggered_buffer_predisable, > + .postdisable = bmc150_magn_buffer_postdisable, > +}; > + > static int bmc150_magn_gpio_probe(struct i2c_client *client) > { > struct device *dev; > @@ -932,16 +941,6 @@ static int bmc150_magn_probe(struct i2c_client *client, > goto err_poweroff; > } > > - ret = iio_triggered_buffer_setup(indio_dev, > - &iio_pollfunc_store_time, > - bmc150_magn_trigger_handler, > - NULL); > - if (ret < 0) { > - dev_err(&client->dev, > - "iio triggered buffer setup failed\n"); > - goto err_trigger_unregister; > - } > - > ret = request_threaded_irq(client->irq, > iio_trigger_generic_data_rdy_poll, > NULL, > @@ -951,14 +950,24 @@ static int bmc150_magn_probe(struct i2c_client *client, > if (ret < 0) { > dev_err(&client->dev, "request irq %d failed\n", > client->irq); > - goto err_buffer_cleanup; > + goto err_trigger_unregister; > } > } > > + ret = iio_triggered_buffer_setup(indio_dev, > + iio_pollfunc_store_time, > + bmc150_magn_trigger_handler, > + &bmc150_magn_buffer_setup_ops); > + if (ret < 0) { > + dev_err(&client->dev, > + "iio triggered buffer setup failed\n"); > + goto err_free_irq; > + } > + > ret = iio_device_register(indio_dev); > if (ret < 0) { > dev_err(&client->dev, "unable to register iio device\n"); > - goto err_free_irq; > + goto err_buffer_cleanup; > } > > ret = pm_runtime_set_active(&client->dev); > @@ -976,12 +985,11 @@ static int bmc150_magn_probe(struct i2c_client *client, > > err_iio_unregister: > iio_device_unregister(indio_dev); > +err_buffer_cleanup: > + iio_triggered_buffer_cleanup(indio_dev); > err_free_irq: > if (client->irq > 0) > free_irq(client->irq, data->dready_trig); > -err_buffer_cleanup: > - if (data->dready_trig) > - iio_triggered_buffer_cleanup(indio_dev); > err_trigger_unregister: > if (data->dready_trig) > iio_trigger_unregister(data->dready_trig); > @@ -1000,14 +1008,13 @@ static int bmc150_magn_remove(struct i2c_client *client) > pm_runtime_put_noidle(&client->dev); > > iio_device_unregister(indio_dev); > + iio_triggered_buffer_cleanup(indio_dev); > > if (client->irq > 0) > free_irq(data->client->irq, data->dready_trig); > > - if (data->dready_trig) { > - iio_triggered_buffer_cleanup(indio_dev); > + if (data->dready_trig) > iio_trigger_unregister(data->dready_trig); > - } > > mutex_lock(&data->mutex); > bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SUSPEND, true); > ^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH 1/2] iio: magn: bmc150: decouple buffer and trigger 2015-06-13 18:04 ` Jonathan Cameron @ 2015-06-23 14:18 ` Tirdea, Irina 0 siblings, 0 replies; 7+ messages in thread From: Tirdea, Irina @ 2015-06-23 14:18 UTC (permalink / raw) To: Jonathan Cameron, Dogaru, Vlad, linux-iio@vger.kernel.org > -----Original Message----- > From: Jonathan Cameron [mailto:jic23@kernel.org] > Sent: 13 June, 2015 21:05 > To: Dogaru, Vlad; Tirdea, Irina; linux-iio@vger.kernel.org > Subject: Re: [PATCH 1/2] iio: magn: bmc150: decouple buffer and trigger >=20 > On 12/06/15 09:31, Vlad Dogaru wrote: > > Signed-off-by: Vlad Dogaru <vlad.dogaru@intel.com> > Looks good to me. Will let it sit for a while to give Irina and others > time to comment though. We are looking at the next cycle now anyway so > no rush! This already got merged, but looks fine to me. >=20 > Jonathan > > --- > > drivers/iio/magnetometer/bmc150_magn.c | 69 +++++++++++++++++++-------= -------- > > 1 file changed, 38 insertions(+), 31 deletions(-) > > > > diff --git a/drivers/iio/magnetometer/bmc150_magn.c b/drivers/iio/magne= tometer/bmc150_magn.c > > index d4c1788..a0e64f1 100644 > > --- a/drivers/iio/magnetometer/bmc150_magn.c > > +++ b/drivers/iio/magnetometer/bmc150_magn.c > > @@ -588,17 +588,6 @@ static int bmc150_magn_write_raw(struct iio_dev *i= ndio_dev, > > } > > } > > > > -static int bmc150_magn_validate_trigger(struct iio_dev *indio_dev, > > - struct iio_trigger *trig) > > -{ > > - struct bmc150_magn_data *data =3D iio_priv(indio_dev); > > - > > - if (data->dready_trig !=3D trig) > > - return -EINVAL; > > - > > - return 0; > > -} > > - > > static ssize_t bmc150_magn_show_samp_freq_avail(struct device *dev, > > struct device_attribute *attr, > > char *buf) > > @@ -659,7 +648,6 @@ static const struct iio_info bmc150_magn_info =3D { > > .attrs =3D &bmc150_magn_attrs_group, > > .read_raw =3D bmc150_magn_read_raw, > > .write_raw =3D bmc150_magn_write_raw, > > - .validate_trigger =3D bmc150_magn_validate_trigger, > > .driver_module =3D THIS_MODULE, > > }; > > > > @@ -682,7 +670,7 @@ static irqreturn_t bmc150_magn_trigger_handler(int = irq, void *p) > > pf->timestamp); > > > > err: > > - iio_trigger_notify_done(data->dready_trig); > > + iio_trigger_notify_done(indio_dev->trig); > > > > return IRQ_HANDLED; > > } > > @@ -827,6 +815,27 @@ static const struct iio_trigger_ops bmc150_magn_tr= igger_ops =3D { > > .owner =3D THIS_MODULE, > > }; > > > > +static int bmc150_magn_buffer_preenable(struct iio_dev *indio_dev) > > +{ > > + struct bmc150_magn_data *data =3D iio_priv(indio_dev); > > + > > + return bmc150_magn_set_power_state(data, true); > > +} > > + > > +static int bmc150_magn_buffer_postdisable(struct iio_dev *indio_dev) > > +{ > > + struct bmc150_magn_data *data =3D iio_priv(indio_dev); > > + > > + return bmc150_magn_set_power_state(data, false); > > +} > > + > > +static const struct iio_buffer_setup_ops bmc150_magn_buffer_setup_ops = =3D { > > + .preenable =3D bmc150_magn_buffer_preenable, > > + .postenable =3D iio_triggered_buffer_postenable, > > + .predisable =3D iio_triggered_buffer_predisable, > > + .postdisable =3D bmc150_magn_buffer_postdisable, > > +}; > > + > > static int bmc150_magn_gpio_probe(struct i2c_client *client) > > { > > struct device *dev; > > @@ -932,16 +941,6 @@ static int bmc150_magn_probe(struct i2c_client *cl= ient, > > goto err_poweroff; > > } > > > > - ret =3D iio_triggered_buffer_setup(indio_dev, > > - &iio_pollfunc_store_time, > > - bmc150_magn_trigger_handler, > > - NULL); > > - if (ret < 0) { > > - dev_err(&client->dev, > > - "iio triggered buffer setup failed\n"); > > - goto err_trigger_unregister; > > - } > > - > > ret =3D request_threaded_irq(client->irq, > > iio_trigger_generic_data_rdy_poll, > > NULL, > > @@ -951,14 +950,24 @@ static int bmc150_magn_probe(struct i2c_client *c= lient, > > if (ret < 0) { > > dev_err(&client->dev, "request irq %d failed\n", > > client->irq); > > - goto err_buffer_cleanup; > > + goto err_trigger_unregister; > > } > > } > > > > + ret =3D iio_triggered_buffer_setup(indio_dev, > > + iio_pollfunc_store_time, > > + bmc150_magn_trigger_handler, > > + &bmc150_magn_buffer_setup_ops); > > + if (ret < 0) { > > + dev_err(&client->dev, > > + "iio triggered buffer setup failed\n"); > > + goto err_free_irq; > > + } > > + > > ret =3D iio_device_register(indio_dev); > > if (ret < 0) { > > dev_err(&client->dev, "unable to register iio device\n"); > > - goto err_free_irq; > > + goto err_buffer_cleanup; > > } > > > > ret =3D pm_runtime_set_active(&client->dev); > > @@ -976,12 +985,11 @@ static int bmc150_magn_probe(struct i2c_client *c= lient, > > > > err_iio_unregister: > > iio_device_unregister(indio_dev); > > +err_buffer_cleanup: > > + iio_triggered_buffer_cleanup(indio_dev); > > err_free_irq: > > if (client->irq > 0) > > free_irq(client->irq, data->dready_trig); > > -err_buffer_cleanup: > > - if (data->dready_trig) > > - iio_triggered_buffer_cleanup(indio_dev); > > err_trigger_unregister: > > if (data->dready_trig) > > iio_trigger_unregister(data->dready_trig); > > @@ -1000,14 +1008,13 @@ static int bmc150_magn_remove(struct i2c_client= *client) > > pm_runtime_put_noidle(&client->dev); > > > > iio_device_unregister(indio_dev); > > + iio_triggered_buffer_cleanup(indio_dev); > > > > if (client->irq > 0) > > free_irq(data->client->irq, data->dready_trig); > > > > - if (data->dready_trig) { > > - iio_triggered_buffer_cleanup(indio_dev); > > + if (data->dready_trig) > > iio_trigger_unregister(data->dready_trig); > > - } > > > > mutex_lock(&data->mutex); > > bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SUSPEND, true= ); > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] iio: magn: bmc150: decouple buffer and trigger 2015-06-12 8:31 ` [PATCH 1/2] iio: magn: bmc150: decouple buffer and trigger Vlad Dogaru 2015-06-13 18:04 ` Jonathan Cameron @ 2015-06-21 13:57 ` Jonathan Cameron 1 sibling, 0 replies; 7+ messages in thread From: Jonathan Cameron @ 2015-06-21 13:57 UTC (permalink / raw) To: Vlad Dogaru, irina.tirdea, linux-iio On 12/06/15 09:31, Vlad Dogaru wrote: > Signed-off-by: Vlad Dogaru <vlad.dogaru@intel.com> Applied to the togreg branch of iio.git. Pushed out as testing for the autobuilders to play with it. Thanks, Jonathan > --- > drivers/iio/magnetometer/bmc150_magn.c | 69 +++++++++++++++++++--------------- > 1 file changed, 38 insertions(+), 31 deletions(-) > > diff --git a/drivers/iio/magnetometer/bmc150_magn.c b/drivers/iio/magnetometer/bmc150_magn.c > index d4c1788..a0e64f1 100644 > --- a/drivers/iio/magnetometer/bmc150_magn.c > +++ b/drivers/iio/magnetometer/bmc150_magn.c > @@ -588,17 +588,6 @@ static int bmc150_magn_write_raw(struct iio_dev *indio_dev, > } > } > > -static int bmc150_magn_validate_trigger(struct iio_dev *indio_dev, > - struct iio_trigger *trig) > -{ > - struct bmc150_magn_data *data = iio_priv(indio_dev); > - > - if (data->dready_trig != trig) > - return -EINVAL; > - > - return 0; > -} > - > static ssize_t bmc150_magn_show_samp_freq_avail(struct device *dev, > struct device_attribute *attr, > char *buf) > @@ -659,7 +648,6 @@ static const struct iio_info bmc150_magn_info = { > .attrs = &bmc150_magn_attrs_group, > .read_raw = bmc150_magn_read_raw, > .write_raw = bmc150_magn_write_raw, > - .validate_trigger = bmc150_magn_validate_trigger, > .driver_module = THIS_MODULE, > }; > > @@ -682,7 +670,7 @@ static irqreturn_t bmc150_magn_trigger_handler(int irq, void *p) > pf->timestamp); > > err: > - iio_trigger_notify_done(data->dready_trig); > + iio_trigger_notify_done(indio_dev->trig); > > return IRQ_HANDLED; > } > @@ -827,6 +815,27 @@ static const struct iio_trigger_ops bmc150_magn_trigger_ops = { > .owner = THIS_MODULE, > }; > > +static int bmc150_magn_buffer_preenable(struct iio_dev *indio_dev) > +{ > + struct bmc150_magn_data *data = iio_priv(indio_dev); > + > + return bmc150_magn_set_power_state(data, true); > +} > + > +static int bmc150_magn_buffer_postdisable(struct iio_dev *indio_dev) > +{ > + struct bmc150_magn_data *data = iio_priv(indio_dev); > + > + return bmc150_magn_set_power_state(data, false); > +} > + > +static const struct iio_buffer_setup_ops bmc150_magn_buffer_setup_ops = { > + .preenable = bmc150_magn_buffer_preenable, > + .postenable = iio_triggered_buffer_postenable, > + .predisable = iio_triggered_buffer_predisable, > + .postdisable = bmc150_magn_buffer_postdisable, > +}; > + > static int bmc150_magn_gpio_probe(struct i2c_client *client) > { > struct device *dev; > @@ -932,16 +941,6 @@ static int bmc150_magn_probe(struct i2c_client *client, > goto err_poweroff; > } > > - ret = iio_triggered_buffer_setup(indio_dev, > - &iio_pollfunc_store_time, > - bmc150_magn_trigger_handler, > - NULL); > - if (ret < 0) { > - dev_err(&client->dev, > - "iio triggered buffer setup failed\n"); > - goto err_trigger_unregister; > - } > - > ret = request_threaded_irq(client->irq, > iio_trigger_generic_data_rdy_poll, > NULL, > @@ -951,14 +950,24 @@ static int bmc150_magn_probe(struct i2c_client *client, > if (ret < 0) { > dev_err(&client->dev, "request irq %d failed\n", > client->irq); > - goto err_buffer_cleanup; > + goto err_trigger_unregister; > } > } > > + ret = iio_triggered_buffer_setup(indio_dev, > + iio_pollfunc_store_time, > + bmc150_magn_trigger_handler, > + &bmc150_magn_buffer_setup_ops); > + if (ret < 0) { > + dev_err(&client->dev, > + "iio triggered buffer setup failed\n"); > + goto err_free_irq; > + } > + > ret = iio_device_register(indio_dev); > if (ret < 0) { > dev_err(&client->dev, "unable to register iio device\n"); > - goto err_free_irq; > + goto err_buffer_cleanup; > } > > ret = pm_runtime_set_active(&client->dev); > @@ -976,12 +985,11 @@ static int bmc150_magn_probe(struct i2c_client *client, > > err_iio_unregister: > iio_device_unregister(indio_dev); > +err_buffer_cleanup: > + iio_triggered_buffer_cleanup(indio_dev); > err_free_irq: > if (client->irq > 0) > free_irq(client->irq, data->dready_trig); > -err_buffer_cleanup: > - if (data->dready_trig) > - iio_triggered_buffer_cleanup(indio_dev); > err_trigger_unregister: > if (data->dready_trig) > iio_trigger_unregister(data->dready_trig); > @@ -1000,14 +1008,13 @@ static int bmc150_magn_remove(struct i2c_client *client) > pm_runtime_put_noidle(&client->dev); > > iio_device_unregister(indio_dev); > + iio_triggered_buffer_cleanup(indio_dev); > > if (client->irq > 0) > free_irq(data->client->irq, data->dready_trig); > > - if (data->dready_trig) { > - iio_triggered_buffer_cleanup(indio_dev); > + if (data->dready_trig) > iio_trigger_unregister(data->dready_trig); > - } > > mutex_lock(&data->mutex); > bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SUSPEND, true); > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] iio: magn: bmc150: add support for bmc156 2015-06-12 8:31 [PATCH 0/2] iio: bmc150: buffer cleanup and support for a new chip Vlad Dogaru 2015-06-12 8:31 ` [PATCH 1/2] iio: magn: bmc150: decouple buffer and trigger Vlad Dogaru @ 2015-06-12 8:31 ` Vlad Dogaru 2015-06-21 13:57 ` Jonathan Cameron 1 sibling, 1 reply; 7+ messages in thread From: Vlad Dogaru @ 2015-06-12 8:31 UTC (permalink / raw) To: irina.tirdea, jic23, linux-iio; +Cc: Vlad Dogaru The BMC156 is a slightly less capable version of BMC150 which lacks support for magnetometer thresholds. Since this driver does not support those anyway, adding support is trivial. Datasheet is available at https://ae-bst.resource.bosch.com/media/products/dokumente/bmc156_1/BST-BMC156-DS000-01.pdf Signed-off-by: Vlad Dogaru <vlad.dogaru@intel.com> --- drivers/iio/magnetometer/bmc150_magn.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/iio/magnetometer/bmc150_magn.c b/drivers/iio/magnetometer/bmc150_magn.c index a0e64f1..cd00271 100644 --- a/drivers/iio/magnetometer/bmc150_magn.c +++ b/drivers/iio/magnetometer/bmc150_magn.c @@ -1089,12 +1089,14 @@ static const struct dev_pm_ops bmc150_magn_pm_ops = { static const struct acpi_device_id bmc150_magn_acpi_match[] = { {"BMC150B", 0}, + {"BMC156B", 0}, {}, }; MODULE_DEVICE_TABLE(acpi, bmc150_magn_acpi_match); static const struct i2c_device_id bmc150_magn_id[] = { {"bmc150_magn", 0}, + {"bmc156_magn", 0}, {}, }; MODULE_DEVICE_TABLE(i2c, bmc150_magn_id); -- 1.9.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] iio: magn: bmc150: add support for bmc156 2015-06-12 8:31 ` [PATCH 2/2] iio: magn: bmc150: add support for bmc156 Vlad Dogaru @ 2015-06-21 13:57 ` Jonathan Cameron 0 siblings, 0 replies; 7+ messages in thread From: Jonathan Cameron @ 2015-06-21 13:57 UTC (permalink / raw) To: Vlad Dogaru, irina.tirdea, linux-iio On 12/06/15 09:31, Vlad Dogaru wrote: > The BMC156 is a slightly less capable version of BMC150 which lacks > support for magnetometer thresholds. Since this driver does not support > those anyway, adding support is trivial. > > Datasheet is available at > https://ae-bst.resource.bosch.com/media/products/dokumente/bmc156_1/BST-BMC156-DS000-01.pdf > > Signed-off-by: Vlad Dogaru <vlad.dogaru@intel.com> Applied, Thanks, Jonathan > --- > drivers/iio/magnetometer/bmc150_magn.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/iio/magnetometer/bmc150_magn.c b/drivers/iio/magnetometer/bmc150_magn.c > index a0e64f1..cd00271 100644 > --- a/drivers/iio/magnetometer/bmc150_magn.c > +++ b/drivers/iio/magnetometer/bmc150_magn.c > @@ -1089,12 +1089,14 @@ static const struct dev_pm_ops bmc150_magn_pm_ops = { > > static const struct acpi_device_id bmc150_magn_acpi_match[] = { > {"BMC150B", 0}, > + {"BMC156B", 0}, > {}, > }; > MODULE_DEVICE_TABLE(acpi, bmc150_magn_acpi_match); > > static const struct i2c_device_id bmc150_magn_id[] = { > {"bmc150_magn", 0}, > + {"bmc156_magn", 0}, > {}, > }; > MODULE_DEVICE_TABLE(i2c, bmc150_magn_id); > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-06-23 14:18 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-06-12 8:31 [PATCH 0/2] iio: bmc150: buffer cleanup and support for a new chip Vlad Dogaru 2015-06-12 8:31 ` [PATCH 1/2] iio: magn: bmc150: decouple buffer and trigger Vlad Dogaru 2015-06-13 18:04 ` Jonathan Cameron 2015-06-23 14:18 ` Tirdea, Irina 2015-06-21 13:57 ` Jonathan Cameron 2015-06-12 8:31 ` [PATCH 2/2] iio: magn: bmc150: add support for bmc156 Vlad Dogaru 2015-06-21 13:57 ` Jonathan Cameron
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox