Overvoltage protection and brightness mode are currently hardcoded
as 29V and disabled in the driver. Make these configurable via DT.
Besides addressing review comments v3 folds in the patches to
disable the chip and turn of the regulator on brightness 0 from
https://lore.kernel.org/linux-leds/20191226101419.GE4033@amd/T/#t
Besides addressing review comments v2 also allows to limit the maximum led
current.
Patches are against next-20191220.
Changes from v2
- As per review comment from Pavel Machek
https://lore.kernel.org/linux-leds/20191226100615.GA4033@amd/T/#u
- Use default value in DT example
https://lore.kernel.org/linux-leds/20191226100842.GC4033@amd/T/#u
- Use uppercase LED in commit message
https://lore.kernel.org/linux-leds/20191226101336.GD4033@amd/T/#u
- Fix typo in commit message
- Use correct return value when checking if property is present
- Fold in
https://lore.kernel.org/linux-leds/20191226101419.GE4033@amd/T/#t
- Add Acked-By's from Pavel Machek, thanks!
Changes from v1
- As per review comments by Dan Murphy
https://lore.kernel.org/linux-leds/[email protected]/
- Split commits per propoerty
- Add new properties to DT example too
- Drop dev_dbg() statements
- ovp: fix 21V value parsing
- ovp: Set correct default value if DT parsing fails
- As per review comments by Pavel Machek
https://lore.kernel.org/linux-leds/20191221191515.GF32732@amd/
- Fix defaults (which is 29V)
- Use uV as Unit for ovp property
- Change property name to 'ti,ovp-microvolt' to make it shorter
- Honor led-max-microamp to not exceed the maximum led current
Guido Günther (9):
dt: bindings: lm3692x: Add ti,ovp-microvolt property
leds: lm3692x: Allow to configure over voltage protection
dt: bindings: lm3692x: Add ti,brightness-mapping-exponential property
leds: lm3692x: Allow to configure brigthness mode
dt: bindings: lm3692x: Add led-max-microamp property
leds: lm3692x: Make sure we don't exceed the maximum led current
leds: lm3692x: Move lm3692x_init and rename to lm3692x_leds_enable
leds: lm3692x: Split out lm3692x_leds_disable
leds: lm3692x: Disable chip on brightness 0
.../devicetree/bindings/leds/leds-lm3692x.txt | 11 +
drivers/leds/leds-lm3692x.c | 195 +++++++++++++-----
2 files changed, 149 insertions(+), 57 deletions(-)
--
2.23.0
This can be used to limit the current per LED strip.
Signed-off-by: Guido Günther <[email protected]>
Acked-by: Pavel Machek <[email protected]>
---
Documentation/devicetree/bindings/leds/leds-lm3692x.txt | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/devicetree/bindings/leds/leds-lm3692x.txt b/Documentation/devicetree/bindings/leds/leds-lm3692x.txt
index 197e3fd2ae87..b8939fdd19d6 100644
--- a/Documentation/devicetree/bindings/leds/leds-lm3692x.txt
+++ b/Documentation/devicetree/bindings/leds/leds-lm3692x.txt
@@ -37,6 +37,8 @@ Optional child properties:
- label : see Documentation/devicetree/bindings/leds/common.txt (deprecated)
- linux,default-trigger :
see Documentation/devicetree/bindings/leds/common.txt
+ - led-max-microamp :
+ see Documentation/devicetree/bindings/leds/common.txt
Example:
@@ -58,6 +60,7 @@ led-controller@36 {
function = LED_FUNCTION_BACKLIGHT;
color = <LED_COLOR_ID_WHITE>;
linux,default-trigger = "backlight";
+ led-max-microamp = <20000>;
};
}
--
2.23.0
Move the relevant parts out of lm3692x_remove() and
call it from there. No functional change.
Signed-off-by: Guido Günther <[email protected]>
Acked-by: Pavel Machek <[email protected]>
---
drivers/leds/leds-lm3692x.c | 42 +++++++++++++++++++++++--------------
1 file changed, 26 insertions(+), 16 deletions(-)
diff --git a/drivers/leds/leds-lm3692x.c b/drivers/leds/leds-lm3692x.c
index 2b8f87b829ae..075dc4b6b3b6 100644
--- a/drivers/leds/leds-lm3692x.c
+++ b/drivers/leds/leds-lm3692x.c
@@ -288,6 +288,30 @@ static int lm3692x_leds_enable(struct lm3692x_led *led)
return ret;
}
+static int lm3692x_leds_disable(struct lm3692x_led *led)
+{
+ int ret;
+
+ ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_DEVICE_EN, 0);
+ if (ret) {
+ dev_err(&led->client->dev, "Failed to disable regulator: %d\n",
+ ret);
+ return ret;
+ }
+
+ if (led->enable_gpio)
+ gpiod_direction_output(led->enable_gpio, 0);
+
+ if (led->regulator) {
+ ret = regulator_disable(led->regulator);
+ if (ret)
+ dev_err(&led->client->dev,
+ "Failed to disable regulator: %d\n", ret);
+ }
+
+ return ret;
+}
+
static int lm3692x_brightness_set(struct led_classdev *led_cdev,
enum led_brightness brt_val)
{
@@ -474,23 +498,9 @@ static int lm3692x_remove(struct i2c_client *client)
struct lm3692x_led *led = i2c_get_clientdata(client);
int ret;
- ret = regmap_update_bits(led->regmap, LM3692X_EN, LM3692X_DEVICE_EN, 0);
- if (ret) {
- dev_err(&led->client->dev, "Failed to disable regulator: %d\n",
- ret);
+ ret = lm3692x_leds_disable(led);
+ if (ret)
return ret;
- }
-
- if (led->enable_gpio)
- gpiod_direction_output(led->enable_gpio, 0);
-
- if (led->regulator) {
- ret = regulator_disable(led->regulator);
- if (ret)
- dev_err(&led->client->dev,
- "Failed to disable regulator: %d\n", ret);
- }
-
mutex_destroy(&led->lock);
return 0;
--
2.23.0
This allows to set the overvoltage protection to 17V, 21V, 25V or 29V.
Signed-off-by: Guido Günther <[email protected]>
Acked-by: Pavel Machek <[email protected]>
---
Documentation/devicetree/bindings/leds/leds-lm3692x.txt | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Documentation/devicetree/bindings/leds/leds-lm3692x.txt b/Documentation/devicetree/bindings/leds/leds-lm3692x.txt
index 4c2d923f8758..9b334695c410 100644
--- a/Documentation/devicetree/bindings/leds/leds-lm3692x.txt
+++ b/Documentation/devicetree/bindings/leds/leds-lm3692x.txt
@@ -18,6 +18,10 @@ Required properties:
Optional properties:
- enable-gpios : gpio pin to enable/disable the device.
- vled-supply : LED supply
+ - ti,ovp-microvolt: Overvoltage protection in
+ micro-volt, can be 17000000, 21000000, 25000000 or
+ 29000000. If ti,ovp-microvolt is not specified it
+ defaults to 29000000.
Required child properties:
- reg : 0 - Will enable all LED sync paths
@@ -44,6 +48,7 @@ led-controller@36 {
enable-gpios = <&gpio1 28 GPIO_ACTIVE_HIGH>;
vled-supply = <&vbatt>;
+ ti,ovp-microvolt = <29000000>;
led@0 {
reg = <0>;
--
2.23.0
On Sat, 4 Jan 2020 11:54:17 +0100, =?UTF-8?q?Guido=20G=C3=BCnther?= wrote:
> This allows to set the overvoltage protection to 17V, 21V, 25V or 29V.
>
> Signed-off-by: Guido G?nther <[email protected]>
> Acked-by: Pavel Machek <[email protected]>
> ---
> Documentation/devicetree/bindings/leds/leds-lm3692x.txt | 5 +++++
> 1 file changed, 5 insertions(+)
>
Reviewed-by: Rob Herring <[email protected]>
On Sat, 4 Jan 2020 11:54:21 +0100, =?UTF-8?q?Guido=20G=C3=BCnther?= wrote:
> This can be used to limit the current per LED strip.
>
> Signed-off-by: Guido G?nther <[email protected]>
> Acked-by: Pavel Machek <[email protected]>
> ---
> Documentation/devicetree/bindings/leds/leds-lm3692x.txt | 3 +++
> 1 file changed, 3 insertions(+)
>
Acked-by: Rob Herring <[email protected]>
Hi!
> Overvoltage protection and brightness mode are currently hardcoded
> as 29V and disabled in the driver. Make these configurable via DT.
>
> Besides addressing review comments v3 folds in the patches to
> disable the chip and turn of the regulator on brightness 0 from
>
> https://lore.kernel.org/linux-leds/20191226101419.GE4033@amd/T/#t
>
> Besides addressing review comments v2 also allows to limit the maximum led
> current.
> Patches are against next-20191220.
I applied everything but the "exponential" changes and the last
one. I'll apply the last one if I get version that applies on top of
leds tree.
Best regards,
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Hi,
On Mon, Jan 06, 2020 at 12:47:08AM +0100, Pavel Machek wrote:
> Hi!
>
> > Overvoltage protection and brightness mode are currently hardcoded
> > as 29V and disabled in the driver. Make these configurable via DT.
> >
> > Besides addressing review comments v3 folds in the patches to
> > disable the chip and turn of the regulator on brightness 0 from
> >
> > https://lore.kernel.org/linux-leds/20191226101419.GE4033@amd/T/#t
> >
> > Besides addressing review comments v2 also allows to limit the maximum led
> > current.
>
> > Patches are against next-20191220.
>
> I applied everything but the "exponential" changes and the last
> one. I'll apply the last one if I get version that applies on top of
> leds tree.
Thanks! Can I do anything to get the exponential part in? Is it because
you want the exponential mode to move to the backlight binding?
Cheers,
-- Guido
>
> Best regards,
> Pavel
>
> --
> (english) http://www.livejournal.com/~pavelmachek
> (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Hi!
> > > Patches are against next-20191220.
> >
> > I applied everything but the "exponential" changes and the last
> > one. I'll apply the last one if I get version that applies on top of
> > leds tree.
>
> Thanks! Can I do anything to get the exponential part in? Is it because
> you want the exponential mode to move to the backlight binding?
You'd have to do some serious convincing, explaining why we absolutely
need the exponential stuff.
Most devices today use linear brightness, and userspace needs to know
the relation, especially for RGB stuff.
You can set bigger max-brightness, and then do in-driver conversion to
use full dynamic brightness range...?
Best regards,
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html