Message ID | Z0WJg5MMu_1AFYog@standask-GA-A55M-S2HP (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | hwmon: (tmp108) Add basic regulator support | expand |
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
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 >
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 >>
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 --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;
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(+)