Re: [PATCH 11/11] iio: pressure-core: st: Provide correct regulator support
On Wed, Sep 04, 2013 at 02:26:38PM +0100, Lee Jones wrote: > On Wed, 04 Sep 2013, Lars-Peter Clausen wrote: > > > I think this would be better handled with something like Mark Brown's > > > suggested regulator_get_optional [1,2]. > Thanks Mark, I didn't know that existed. It's only just gone into Linus' tree this merge window so it's very new. signature.asc Description: Digital signature
Re: [PATCH 11/11] iio: pressure-core: st: Provide correct regulator support
On Wed, 04 Sep 2013, Lars-Peter Clausen wrote: > On 09/04/2013 03:11 PM, Mark Rutland wrote: > > Hi Lee, > > > > On Wed, Sep 04, 2013 at 10:31:43AM +0100, Lee Jones wrote: > >> The power to some of the sensors are controlled by regulators. In most > >> cases these are 'always on', but if not they will fail to work until > >> the regulator is enabled using the relevant APIs. > >> > >> Signed-off-by: Lee Jones > >> --- > >> drivers/iio/pressure/st_pressure_core.c | 13 + > >> include/linux/iio/common/st_sensors.h | 3 +++ > >> 2 files changed, 16 insertions(+) > >> > >> diff --git a/drivers/iio/pressure/st_pressure_core.c > >> b/drivers/iio/pressure/st_pressure_core.c > >> index f452417..7beed89 100644 > >> --- a/drivers/iio/pressure/st_pressure_core.c > >> +++ b/drivers/iio/pressure/st_pressure_core.c > >> @@ -23,6 +23,7 @@ > >> #include > >> #include > >> #include > >> +#include > >> #include > >> > >> #include > >> @@ -315,6 +316,15 @@ int st_press_common_probe(struct iio_dev *indio_dev) > >>indio_dev->modes = INDIO_DIRECT_MODE; > >>indio_dev->info = _info; > >> > >> + /* Regulator not mandatory, but if requested we should enable it. */ > >> + pdata->regulator = regulator_get(_dev->dev, "vdd"); > >> + if (!IS_ERR_OR_NULL(pdata->regulator)) { > > > > Can regulator_get return NULL? As far as I can see, it either returns a > > valid reulator pointer or an ERR_PTR value. > > > > When you say "if requested", do you mean "if described in the dt"? If > > so, the above doesn't distunguish between a regulator not being listed > > and one failing to be got (e.g. if we got EPROBE_DEFER from > > regulator_get). > > > > I think this would be better handled with something like Mark Brown's > > suggested regulator_get_optional [1,2]. Thanks Mark, I didn't know that existed. > It can return NULL, but NULL is actually a valid regulator in that case, so > the check should only be IS_ERR. And yes regulator_get_optional is what > should be used here. Okay, I'll use that instead. -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 11/11] iio: pressure-core: st: Provide correct regulator support
On Wed, Sep 04, 2013 at 02:11:11PM +0100, Mark Rutland wrote: > On Wed, Sep 04, 2013 at 10:31:43AM +0100, Lee Jones wrote: > > + /* Regulator not mandatory, but if requested we should enable it. */ > > + pdata->regulator = regulator_get(_dev->dev, "vdd"); > > + if (!IS_ERR_OR_NULL(pdata->regulator)) { > Can regulator_get return NULL? As far as I can see, it either returns a > valid reulator pointer or an ERR_PTR value. Yes, NULL is a valid regulator. > When you say "if requested", do you mean "if described in the dt"? If > so, the above doesn't distunguish between a regulator not being listed > and one failing to be got (e.g. if we got EPROBE_DEFER from > regulator_get). > I think this would be better handled with something like Mark Brown's > suggested regulator_get_optional [1,2]. If the regulator may genuinely be absent from the system then it should be being requested using regulator_get_optional(). Otherwise it should be being requested using regulator_get(). In both cases it is important that the driver pays attention to errors. signature.asc Description: Digital signature
Re: [PATCH 11/11] iio: pressure-core: st: Provide correct regulator support
On 09/04/2013 03:11 PM, Mark Rutland wrote: > Hi Lee, > > On Wed, Sep 04, 2013 at 10:31:43AM +0100, Lee Jones wrote: >> The power to some of the sensors are controlled by regulators. In most >> cases these are 'always on', but if not they will fail to work until >> the regulator is enabled using the relevant APIs. >> >> Signed-off-by: Lee Jones >> --- >> drivers/iio/pressure/st_pressure_core.c | 13 + >> include/linux/iio/common/st_sensors.h | 3 +++ >> 2 files changed, 16 insertions(+) >> >> diff --git a/drivers/iio/pressure/st_pressure_core.c >> b/drivers/iio/pressure/st_pressure_core.c >> index f452417..7beed89 100644 >> --- a/drivers/iio/pressure/st_pressure_core.c >> +++ b/drivers/iio/pressure/st_pressure_core.c >> @@ -23,6 +23,7 @@ >> #include >> #include >> #include >> +#include >> #include >> >> #include >> @@ -315,6 +316,15 @@ int st_press_common_probe(struct iio_dev *indio_dev) >> indio_dev->modes = INDIO_DIRECT_MODE; >> indio_dev->info = _info; >> >> +/* Regulator not mandatory, but if requested we should enable it. */ >> +pdata->regulator = regulator_get(_dev->dev, "vdd"); >> +if (!IS_ERR_OR_NULL(pdata->regulator)) { > > Can regulator_get return NULL? As far as I can see, it either returns a > valid reulator pointer or an ERR_PTR value. > > When you say "if requested", do you mean "if described in the dt"? If > so, the above doesn't distunguish between a regulator not being listed > and one failing to be got (e.g. if we got EPROBE_DEFER from > regulator_get). > > I think this would be better handled with something like Mark Brown's > suggested regulator_get_optional [1,2]. It can return NULL, but NULL is actually a valid regulator in that case, so the check should only be IS_ERR. And yes regulator_get_optional is what should be used here. - Lars -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 11/11] iio: pressure-core: st: Provide correct regulator support
Hi Lee, On Wed, Sep 04, 2013 at 10:31:43AM +0100, Lee Jones wrote: > The power to some of the sensors are controlled by regulators. In most > cases these are 'always on', but if not they will fail to work until > the regulator is enabled using the relevant APIs. > > Signed-off-by: Lee Jones > --- > drivers/iio/pressure/st_pressure_core.c | 13 + > include/linux/iio/common/st_sensors.h | 3 +++ > 2 files changed, 16 insertions(+) > > diff --git a/drivers/iio/pressure/st_pressure_core.c > b/drivers/iio/pressure/st_pressure_core.c > index f452417..7beed89 100644 > --- a/drivers/iio/pressure/st_pressure_core.c > +++ b/drivers/iio/pressure/st_pressure_core.c > @@ -23,6 +23,7 @@ > #include > #include > #include > +#include > #include > > #include > @@ -315,6 +316,15 @@ int st_press_common_probe(struct iio_dev *indio_dev) > indio_dev->modes = INDIO_DIRECT_MODE; > indio_dev->info = _info; > > + /* Regulator not mandatory, but if requested we should enable it. */ > + pdata->regulator = regulator_get(_dev->dev, "vdd"); > + if (!IS_ERR_OR_NULL(pdata->regulator)) { Can regulator_get return NULL? As far as I can see, it either returns a valid reulator pointer or an ERR_PTR value. When you say "if requested", do you mean "if described in the dt"? If so, the above doesn't distunguish between a regulator not being listed and one failing to be got (e.g. if we got EPROBE_DEFER from regulator_get). I think this would be better handled with something like Mark Brown's suggested regulator_get_optional [1,2]. Thanks, Mark. [1] https://lkml.org/lkml/2013/7/30/328 (cover) [2] https://lkml.org/lkml/2013/7/30/334 (patches) > + err = regulator_enable(pdata->regulator); > + if (err != 0) > + dev_warn(_dev->dev, > + "Failed to enable specified vdd regulator\n"); > + } > + > err = st_sensors_check_device_support(indio_dev, > ARRAY_SIZE(st_press_sensors), > st_press_sensors); > @@ -363,6 +373,9 @@ void st_press_common_remove(struct iio_dev *indio_dev) > { > struct st_sensor_data *pdata = iio_priv(indio_dev); > > + if (!IS_ERR_OR_NULL(pdata->regulator)) > + regulator_disable(pdata->regulator); > + > iio_device_unregister(indio_dev); > if (pdata->get_irq_data_ready(indio_dev) > 0) { > st_sensors_deallocate_trigger(indio_dev); > diff --git a/include/linux/iio/common/st_sensors.h > b/include/linux/iio/common/st_sensors.h > index 4aef925..eb6ef3f 100644 > --- a/include/linux/iio/common/st_sensors.h > +++ b/include/linux/iio/common/st_sensors.h > @@ -16,6 +16,7 @@ > #include > #include > #include > +#include > > #define ST_SENSORS_TX_MAX_LENGTH 2 > #define ST_SENSORS_RX_MAX_LENGTH 6 > @@ -197,6 +198,7 @@ struct st_sensors { > * @trig: The trigger in use by the core driver. > * @sensor: Pointer to the current sensor struct in use. > * @current_fullscale: Maximum range of measure by the sensor. > + * @regulator: Pointer to sensor's power supply > * @enabled: Status of the sensor (false->off, true->on). > * @multiread_bit: Use or not particular bit for [I2C/SPI] multiread. > * @buffer_data: Data used by buffer part. > @@ -211,6 +213,7 @@ struct st_sensor_data { > struct iio_trigger *trig; > struct st_sensors *sensor; > struct st_sensor_fullscale_avl *current_fullscale; > + struct regulator *regulator; > > bool enabled; > bool multiread_bit; > -- > 1.8.1.2 > > > ___ > linux-arm-kernel mailing list > linux-arm-ker...@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 11/11] iio: pressure-core: st: Provide correct regulator support
Hi Lee, On Wed, Sep 04, 2013 at 10:31:43AM +0100, Lee Jones wrote: The power to some of the sensors are controlled by regulators. In most cases these are 'always on', but if not they will fail to work until the regulator is enabled using the relevant APIs. Signed-off-by: Lee Jones lee.jo...@linaro.org --- drivers/iio/pressure/st_pressure_core.c | 13 + include/linux/iio/common/st_sensors.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c index f452417..7beed89 100644 --- a/drivers/iio/pressure/st_pressure_core.c +++ b/drivers/iio/pressure/st_pressure_core.c @@ -23,6 +23,7 @@ #include linux/iio/sysfs.h #include linux/iio/trigger.h #include linux/iio/buffer.h +#include linux/regulator/consumer.h #include asm/unaligned.h #include linux/iio/common/st_sensors.h @@ -315,6 +316,15 @@ int st_press_common_probe(struct iio_dev *indio_dev) indio_dev-modes = INDIO_DIRECT_MODE; indio_dev-info = press_info; + /* Regulator not mandatory, but if requested we should enable it. */ + pdata-regulator = regulator_get(indio_dev-dev, vdd); + if (!IS_ERR_OR_NULL(pdata-regulator)) { Can regulator_get return NULL? As far as I can see, it either returns a valid reulator pointer or an ERR_PTR value. When you say if requested, do you mean if described in the dt? If so, the above doesn't distunguish between a regulator not being listed and one failing to be got (e.g. if we got EPROBE_DEFER from regulator_get). I think this would be better handled with something like Mark Brown's suggested regulator_get_optional [1,2]. Thanks, Mark. [1] https://lkml.org/lkml/2013/7/30/328 (cover) [2] https://lkml.org/lkml/2013/7/30/334 (patches) + err = regulator_enable(pdata-regulator); + if (err != 0) + dev_warn(indio_dev-dev, + Failed to enable specified vdd regulator\n); + } + err = st_sensors_check_device_support(indio_dev, ARRAY_SIZE(st_press_sensors), st_press_sensors); @@ -363,6 +373,9 @@ void st_press_common_remove(struct iio_dev *indio_dev) { struct st_sensor_data *pdata = iio_priv(indio_dev); + if (!IS_ERR_OR_NULL(pdata-regulator)) + regulator_disable(pdata-regulator); + iio_device_unregister(indio_dev); if (pdata-get_irq_data_ready(indio_dev) 0) { st_sensors_deallocate_trigger(indio_dev); diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h index 4aef925..eb6ef3f 100644 --- a/include/linux/iio/common/st_sensors.h +++ b/include/linux/iio/common/st_sensors.h @@ -16,6 +16,7 @@ #include linux/irqreturn.h #include linux/iio/trigger.h #include linux/bitops.h +#include linux/regulator/consumer.h #define ST_SENSORS_TX_MAX_LENGTH 2 #define ST_SENSORS_RX_MAX_LENGTH 6 @@ -197,6 +198,7 @@ struct st_sensors { * @trig: The trigger in use by the core driver. * @sensor: Pointer to the current sensor struct in use. * @current_fullscale: Maximum range of measure by the sensor. + * @regulator: Pointer to sensor's power supply * @enabled: Status of the sensor (false-off, true-on). * @multiread_bit: Use or not particular bit for [I2C/SPI] multiread. * @buffer_data: Data used by buffer part. @@ -211,6 +213,7 @@ struct st_sensor_data { struct iio_trigger *trig; struct st_sensors *sensor; struct st_sensor_fullscale_avl *current_fullscale; + struct regulator *regulator; bool enabled; bool multiread_bit; -- 1.8.1.2 ___ linux-arm-kernel mailing list linux-arm-ker...@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 11/11] iio: pressure-core: st: Provide correct regulator support
On 09/04/2013 03:11 PM, Mark Rutland wrote: Hi Lee, On Wed, Sep 04, 2013 at 10:31:43AM +0100, Lee Jones wrote: The power to some of the sensors are controlled by regulators. In most cases these are 'always on', but if not they will fail to work until the regulator is enabled using the relevant APIs. Signed-off-by: Lee Jones lee.jo...@linaro.org --- drivers/iio/pressure/st_pressure_core.c | 13 + include/linux/iio/common/st_sensors.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c index f452417..7beed89 100644 --- a/drivers/iio/pressure/st_pressure_core.c +++ b/drivers/iio/pressure/st_pressure_core.c @@ -23,6 +23,7 @@ #include linux/iio/sysfs.h #include linux/iio/trigger.h #include linux/iio/buffer.h +#include linux/regulator/consumer.h #include asm/unaligned.h #include linux/iio/common/st_sensors.h @@ -315,6 +316,15 @@ int st_press_common_probe(struct iio_dev *indio_dev) indio_dev-modes = INDIO_DIRECT_MODE; indio_dev-info = press_info; +/* Regulator not mandatory, but if requested we should enable it. */ +pdata-regulator = regulator_get(indio_dev-dev, vdd); +if (!IS_ERR_OR_NULL(pdata-regulator)) { Can regulator_get return NULL? As far as I can see, it either returns a valid reulator pointer or an ERR_PTR value. When you say if requested, do you mean if described in the dt? If so, the above doesn't distunguish between a regulator not being listed and one failing to be got (e.g. if we got EPROBE_DEFER from regulator_get). I think this would be better handled with something like Mark Brown's suggested regulator_get_optional [1,2]. It can return NULL, but NULL is actually a valid regulator in that case, so the check should only be IS_ERR. And yes regulator_get_optional is what should be used here. - Lars -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 11/11] iio: pressure-core: st: Provide correct regulator support
On Wed, Sep 04, 2013 at 02:11:11PM +0100, Mark Rutland wrote: On Wed, Sep 04, 2013 at 10:31:43AM +0100, Lee Jones wrote: + /* Regulator not mandatory, but if requested we should enable it. */ + pdata-regulator = regulator_get(indio_dev-dev, vdd); + if (!IS_ERR_OR_NULL(pdata-regulator)) { Can regulator_get return NULL? As far as I can see, it either returns a valid reulator pointer or an ERR_PTR value. Yes, NULL is a valid regulator. When you say if requested, do you mean if described in the dt? If so, the above doesn't distunguish between a regulator not being listed and one failing to be got (e.g. if we got EPROBE_DEFER from regulator_get). I think this would be better handled with something like Mark Brown's suggested regulator_get_optional [1,2]. If the regulator may genuinely be absent from the system then it should be being requested using regulator_get_optional(). Otherwise it should be being requested using regulator_get(). In both cases it is important that the driver pays attention to errors. signature.asc Description: Digital signature
Re: [PATCH 11/11] iio: pressure-core: st: Provide correct regulator support
On Wed, 04 Sep 2013, Lars-Peter Clausen wrote: On 09/04/2013 03:11 PM, Mark Rutland wrote: Hi Lee, On Wed, Sep 04, 2013 at 10:31:43AM +0100, Lee Jones wrote: The power to some of the sensors are controlled by regulators. In most cases these are 'always on', but if not they will fail to work until the regulator is enabled using the relevant APIs. Signed-off-by: Lee Jones lee.jo...@linaro.org --- drivers/iio/pressure/st_pressure_core.c | 13 + include/linux/iio/common/st_sensors.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c index f452417..7beed89 100644 --- a/drivers/iio/pressure/st_pressure_core.c +++ b/drivers/iio/pressure/st_pressure_core.c @@ -23,6 +23,7 @@ #include linux/iio/sysfs.h #include linux/iio/trigger.h #include linux/iio/buffer.h +#include linux/regulator/consumer.h #include asm/unaligned.h #include linux/iio/common/st_sensors.h @@ -315,6 +316,15 @@ int st_press_common_probe(struct iio_dev *indio_dev) indio_dev-modes = INDIO_DIRECT_MODE; indio_dev-info = press_info; + /* Regulator not mandatory, but if requested we should enable it. */ + pdata-regulator = regulator_get(indio_dev-dev, vdd); + if (!IS_ERR_OR_NULL(pdata-regulator)) { Can regulator_get return NULL? As far as I can see, it either returns a valid reulator pointer or an ERR_PTR value. When you say if requested, do you mean if described in the dt? If so, the above doesn't distunguish between a regulator not being listed and one failing to be got (e.g. if we got EPROBE_DEFER from regulator_get). I think this would be better handled with something like Mark Brown's suggested regulator_get_optional [1,2]. Thanks Mark, I didn't know that existed. It can return NULL, but NULL is actually a valid regulator in that case, so the check should only be IS_ERR. And yes regulator_get_optional is what should be used here. Okay, I'll use that instead. -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 11/11] iio: pressure-core: st: Provide correct regulator support
On Wed, Sep 04, 2013 at 02:26:38PM +0100, Lee Jones wrote: On Wed, 04 Sep 2013, Lars-Peter Clausen wrote: I think this would be better handled with something like Mark Brown's suggested regulator_get_optional [1,2]. Thanks Mark, I didn't know that existed. It's only just gone into Linus' tree this merge window so it's very new. signature.asc Description: Digital signature