diff mbox series

hwmon: (tmp108) Add basic regulator support

Message ID Z0WJg5MMu_1AFYog@standask-GA-A55M-S2HP (mailing list archive)
State Accepted
Headers show
Series hwmon: (tmp108) Add basic regulator support | expand

Commit Message

Stanislav Jakubek Nov. 26, 2024, 8:40 a.m. UTC
TMP108/P3T1085 are powered by the V+/VCC regulator, add support for it.

Signed-off-by: Stanislav Jakubek <stano.jakubek@gmail.com>
---
 drivers/hwmon/tmp108.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Guenter Roeck Nov. 30, 2024, 5:58 p.m. UTC | #1
On 11/26/24 00:40, Stanislav Jakubek wrote:
> TMP108/P3T1085 are powered by the V+/VCC regulator, add support for it.
> 
> Signed-off-by: Stanislav Jakubek <stano.jakubek@gmail.com>
> ---
>   drivers/hwmon/tmp108.c | 5 +++++
>   1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/hwmon/tmp108.c b/drivers/hwmon/tmp108.c
> index 1f36af2cd2d9..85e4466259a3 100644
> --- a/drivers/hwmon/tmp108.c
> +++ b/drivers/hwmon/tmp108.c
> @@ -17,6 +17,7 @@
>   #include <linux/init.h>
>   #include <linux/jiffies.h>
>   #include <linux/regmap.h>
> +#include <linux/regulator/consumer.h>
>   #include <linux/slab.h>
>   
>   #define	DRIVER_NAME "tmp108"
> @@ -331,6 +332,10 @@ static int tmp108_common_probe(struct device *dev, struct regmap *regmap, char *
>   	u32 config;
>   	int err;
>   
> +	err = devm_regulator_get_enable(dev, "vcc");
> +	if (err)
> +		return dev_err_probe(dev, err, "Failed to enable regulator\n");
> +

Problem with this is that existing devicetree bindings do not provide
a reference to the regulator. Those would now fail to instantiate,
which would be unacceptable. I think you'll need something like

	err = devm_regulator_get_enable_optional(dev, "vcc");
	if (err && err != -ENODEV)
		return dev_err_probe(dev, err, "Failed to enable regulator\n");

Even though the regulator is now mandatory, existing devicetree bindings
don't know that.

Guenter
Stanislav Jakubek Dec. 4, 2024, 8:57 a.m. UTC | #2
On Sat, Nov 30, 2024 at 09:58:17AM -0800, Guenter Roeck wrote:
> On 11/26/24 00:40, Stanislav Jakubek wrote:
> > TMP108/P3T1085 are powered by the V+/VCC regulator, add support for it.
> > 
> > Signed-off-by: Stanislav Jakubek <stano.jakubek@gmail.com>
> > ---
> >   drivers/hwmon/tmp108.c | 5 +++++
> >   1 file changed, 5 insertions(+)
> > 
> > diff --git a/drivers/hwmon/tmp108.c b/drivers/hwmon/tmp108.c
> > index 1f36af2cd2d9..85e4466259a3 100644
> > --- a/drivers/hwmon/tmp108.c
> > +++ b/drivers/hwmon/tmp108.c
> > @@ -17,6 +17,7 @@
> >   #include <linux/init.h>
> >   #include <linux/jiffies.h>
> >   #include <linux/regmap.h>
> > +#include <linux/regulator/consumer.h>
> >   #include <linux/slab.h>
> >   #define	DRIVER_NAME "tmp108"
> > @@ -331,6 +332,10 @@ static int tmp108_common_probe(struct device *dev, struct regmap *regmap, char *
> >   	u32 config;
> >   	int err;
> > +	err = devm_regulator_get_enable(dev, "vcc");
> > +	if (err)
> > +		return dev_err_probe(dev, err, "Failed to enable regulator\n");
> > +
> 
> Problem with this is that existing devicetree bindings do not provide
> a reference to the regulator. Those would now fail to instantiate,
> which would be unacceptable. I think you'll need something like

Doesn't devm_regulator_get_enable fallback to a dummy regulator when
a reference to the regulator isn't provided?

lm90 does it this way too.

Regards,
Stanislav

> 
> 	err = devm_regulator_get_enable_optional(dev, "vcc");
> 	if (err && err != -ENODEV)
> 		return dev_err_probe(dev, err, "Failed to enable regulator\n");
> 
> Even though the regulator is now mandatory, existing devicetree bindings
> don't know that.
> 
> Guenter
>
Guenter Roeck Dec. 4, 2024, 2:15 p.m. UTC | #3
On 12/4/24 00:57, Stanislav Jakubek wrote:
> On Sat, Nov 30, 2024 at 09:58:17AM -0800, Guenter Roeck wrote:
>> On 11/26/24 00:40, Stanislav Jakubek wrote:
>>> TMP108/P3T1085 are powered by the V+/VCC regulator, add support for it.
>>>
>>> Signed-off-by: Stanislav Jakubek <stano.jakubek@gmail.com>
>>> ---
>>>    drivers/hwmon/tmp108.c | 5 +++++
>>>    1 file changed, 5 insertions(+)
>>>
>>> diff --git a/drivers/hwmon/tmp108.c b/drivers/hwmon/tmp108.c
>>> index 1f36af2cd2d9..85e4466259a3 100644
>>> --- a/drivers/hwmon/tmp108.c
>>> +++ b/drivers/hwmon/tmp108.c
>>> @@ -17,6 +17,7 @@
>>>    #include <linux/init.h>
>>>    #include <linux/jiffies.h>
>>>    #include <linux/regmap.h>
>>> +#include <linux/regulator/consumer.h>
>>>    #include <linux/slab.h>
>>>    #define	DRIVER_NAME "tmp108"
>>> @@ -331,6 +332,10 @@ static int tmp108_common_probe(struct device *dev, struct regmap *regmap, char *
>>>    	u32 config;
>>>    	int err;
>>> +	err = devm_regulator_get_enable(dev, "vcc");
>>> +	if (err)
>>> +		return dev_err_probe(dev, err, "Failed to enable regulator\n");
>>> +
>>
>> Problem with this is that existing devicetree bindings do not provide
>> a reference to the regulator. Those would now fail to instantiate,
>> which would be unacceptable. I think you'll need something like
> 
> Doesn't devm_regulator_get_enable fallback to a dummy regulator when
> a reference to the regulator isn't provided?
> 
> lm90 does it this way too.
> 

Ah yes, you are correct. I misinterpreted the code. I'll apply the patch.

Thanks,
Guenter

> Regards,
> Stanislav
> 
>>
>> 	err = devm_regulator_get_enable_optional(dev, "vcc");
>> 	if (err && err != -ENODEV)
>> 		return dev_err_probe(dev, err, "Failed to enable regulator\n");
>>
>> Even though the regulator is now mandatory, existing devicetree bindings
>> don't know that.
>>
>> Guenter
>>
Guenter Roeck Dec. 4, 2024, 2:16 p.m. UTC | #4
On Tue, Nov 26, 2024 at 09:40:35AM +0100, Stanislav Jakubek wrote:
> TMP108/P3T1085 are powered by the V+/VCC regulator, add support for it.
> 
> Signed-off-by: Stanislav Jakubek <stano.jakubek@gmail.com>

Applied.

Thanks,
Guenter
diff mbox series

Patch

diff --git a/drivers/hwmon/tmp108.c b/drivers/hwmon/tmp108.c
index 1f36af2cd2d9..85e4466259a3 100644
--- a/drivers/hwmon/tmp108.c
+++ b/drivers/hwmon/tmp108.c
@@ -17,6 +17,7 @@ 
 #include <linux/init.h>
 #include <linux/jiffies.h>
 #include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
 #include <linux/slab.h>
 
 #define	DRIVER_NAME "tmp108"
@@ -331,6 +332,10 @@  static int tmp108_common_probe(struct device *dev, struct regmap *regmap, char *
 	u32 config;
 	int err;
 
+	err = devm_regulator_get_enable(dev, "vcc");
+	if (err)
+		return dev_err_probe(dev, err, "Failed to enable regulator\n");
+
 	tmp108 = devm_kzalloc(dev, sizeof(*tmp108), GFP_KERNEL);
 	if (!tmp108)
 		return -ENOMEM;