Linux-LEDs Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH v6 0/2] tps6105x add devicetree and leds support
@ 2019-12-16 14:32 Sven Van Asbroeck
  2019-12-16 14:32 ` [PATCH v6 1/2] leds: tps6105x: add driver for MFD chip LED mode Sven Van Asbroeck
  2019-12-16 14:32 ` [PATCH v6 2/2] dt-bindings: mfd: update TI tps6105x chip bindings Sven Van Asbroeck
  0 siblings, 2 replies; 5+ messages in thread
From: Sven Van Asbroeck @ 2019-12-16 14:32 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek
  Cc: Linus Walleij, Grigoryev Denis, Axel Lin, Jacek Anaszewski,
	Dan Murphy, Rob Herring, Mark Rutland, devicetree, linux-kernel,
	linux-leds

v5 -> v6:
	Dan Murphy's suggestions:
	- s/mfd/MFD/
	- s/led/LED/
	- Added copyright message
	- fixed regmap_update_bits alignment
	- added a comment to clarify that fwnode / devicetree support is
	  optional, and device_get_next_child_node() returning NULL is
	  supported
	Lee Jones's suggestions:
	- removed 'Tree:' line from commit message
	- changed over to relative paths

v4 -> v5:
	Added Jacek Anaszewski's Acked-by tag on both patches.
	Added Rob Herring's Reviewed-by tag on devicetree patch.
	Lee Jones:
	- tweaked commit message s/led/LED/
	- use relative paths in Devicetree binding docs, line up ':'s

v3 -> v4:
	Removed tps6105 mfd patch - it was accepted (Mark Brown).
	
	Use the new LED registration API - suggested by Jacek Anaszewski.
	
	Updated led dt bindings to document function, color usage.

v2 -> v3:
	Removed tps6105x regulator patch - it was accepted (Mark Brown).
	
	Removed devicetree/platdata bindings for tps6105x led naming.
	I can test only with a 4.19 vendor kernel, which does not have the
	latest led naming infrastructure (function/color). Drop devicetree/
	fwnode/pdata led naming in favour of hard-coding to "tps6105x::torch",
	so the patch can be tested by me, yet remains acceptable to upstream.

v1 -> v2:
	Select chip operational mode by looking at subnode name, _not_ its
	compatible property. Suggested by Mark Brown.

I needed led operation for this mfd chip, so I added a very simple
driver for this.

My platform (arm imx6q) is devicetree-based, so I added optional
devicetree support for this chip and its sub-drivers.

Sven Van Asbroeck (2):
  leds: tps6105x: add driver for MFD chip LED mode
  dt-bindings: mfd: update TI tps6105x chip bindings

 .../devicetree/bindings/mfd/tps6105x.txt      | 47 +++++++++-
 drivers/leds/Kconfig                          | 10 +++
 drivers/leds/Makefile                         |  1 +
 drivers/leds/leds-tps6105x.c                  | 89 +++++++++++++++++++
 4 files changed, 146 insertions(+), 1 deletion(-)
 create mode 100644 drivers/leds/leds-tps6105x.c

-- 
2.17.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v6 1/2] leds: tps6105x: add driver for MFD chip LED mode
  2019-12-16 14:32 [PATCH v6 0/2] tps6105x add devicetree and leds support Sven Van Asbroeck
@ 2019-12-16 14:32 ` Sven Van Asbroeck
  2019-12-21 19:04   ` Pavel Machek
  2019-12-16 14:32 ` [PATCH v6 2/2] dt-bindings: mfd: update TI tps6105x chip bindings Sven Van Asbroeck
  1 sibling, 1 reply; 5+ messages in thread
From: Sven Van Asbroeck @ 2019-12-16 14:32 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek
  Cc: Linus Walleij, Grigoryev Denis, Axel Lin, Jacek Anaszewski,
	Dan Murphy, Rob Herring, Mark Rutland, devicetree, linux-kernel,
	linux-leds

This driver adds support for the LED operational mode of the
tps6105x MFD device.

Acked-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
Signed-off-by: Sven Van Asbroeck <TheSven73@gmail.com>
---
 drivers/leds/Kconfig         | 10 ++++
 drivers/leds/Makefile        |  1 +
 drivers/leds/leds-tps6105x.c | 89 ++++++++++++++++++++++++++++++++++++
 3 files changed, 100 insertions(+)
 create mode 100644 drivers/leds/leds-tps6105x.c

diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
index 4b68520ac251..d82f1dea3711 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
@@ -836,6 +836,16 @@ config LEDS_LM36274
 	  Say Y to enable the LM36274 LED driver for TI LMU devices.
 	  This supports the LED device LM36274.
 
+config LEDS_TPS6105X
+	tristate "LED support for TI TPS6105X"
+	depends on LEDS_CLASS
+	depends on TPS6105X
+	default y if TPS6105X
+	help
+	  This driver supports TPS61050/TPS61052 LED chips.
+	  It is a single boost converter primarily for white LEDs and
+	  audio amplifiers.
+
 comment "LED Triggers"
 source "drivers/leds/trigger/Kconfig"
 
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
index 2da39e896ce8..d7e1107753fb 100644
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
@@ -85,6 +85,7 @@ obj-$(CONFIG_LEDS_LM3601X)		+= leds-lm3601x.o
 obj-$(CONFIG_LEDS_TI_LMU_COMMON)	+= leds-ti-lmu-common.o
 obj-$(CONFIG_LEDS_LM3697)		+= leds-lm3697.o
 obj-$(CONFIG_LEDS_LM36274)		+= leds-lm36274.o
+obj-$(CONFIG_LEDS_TPS6105X)		+= leds-tps6105x.o
 
 # LED SPI Drivers
 obj-$(CONFIG_LEDS_CR0014114)		+= leds-cr0014114.o
diff --git a/drivers/leds/leds-tps6105x.c b/drivers/leds/leds-tps6105x.c
new file mode 100644
index 000000000000..09fd88a6c8f0
--- /dev/null
+++ b/drivers/leds/leds-tps6105x.c
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2019 Sven Van Asbroeck
+ */
+
+#include <linux/leds.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/mfd/tps6105x.h>
+#include <linux/regmap.h>
+
+struct tps6105x_priv {
+	struct regmap *regmap;
+	struct led_classdev cdev;
+	struct fwnode_handle *fwnode;
+};
+
+static void tps6105x_handle_put(void *data)
+{
+	struct tps6105x_priv *priv = data;
+
+	fwnode_handle_put(priv->fwnode);
+}
+
+static int tps6105x_brightness_set(struct led_classdev *cdev,
+				  enum led_brightness brightness)
+{
+	struct tps6105x_priv *priv = container_of(cdev, struct tps6105x_priv,
+							cdev);
+
+	return regmap_update_bits(priv->regmap, TPS6105X_REG_0,
+				  TPS6105X_REG0_TORCHC_MASK,
+				  brightness << TPS6105X_REG0_TORCHC_SHIFT);
+}
+
+static int tps6105x_led_probe(struct platform_device *pdev)
+{
+	struct tps6105x *tps6105x = dev_get_platdata(&pdev->dev);
+	struct tps6105x_platform_data *pdata = tps6105x->pdata;
+	struct led_init_data init_data = { };
+	struct tps6105x_priv *priv;
+	int ret;
+
+	/* This instance is not set for torch mode so bail out */
+	if (pdata->mode != TPS6105X_MODE_TORCH) {
+		dev_info(&pdev->dev,
+			"chip not in torch mode, exit probe");
+		return -EINVAL;
+	}
+
+	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+	/* fwnode/devicetree is optional. NULL is allowed for priv->fwnode */
+	priv->fwnode = device_get_next_child_node(pdev->dev.parent, NULL);
+	ret = devm_add_action_or_reset(&pdev->dev, tps6105x_handle_put, priv);
+	if (ret)
+		return ret;
+	priv->regmap = tps6105x->regmap;
+	priv->cdev.brightness_set_blocking = tps6105x_brightness_set;
+	priv->cdev.max_brightness = 7;
+	init_data.devicename = "tps6105x";
+	init_data.default_label = ":torch";
+	init_data.fwnode = priv->fwnode;
+
+	ret = regmap_update_bits(tps6105x->regmap, TPS6105X_REG_0,
+				 TPS6105X_REG0_MODE_MASK |
+					TPS6105X_REG0_TORCHC_MASK,
+				 TPS6105X_REG0_MODE_TORCH <<
+					TPS6105X_REG0_MODE_SHIFT);
+	if (ret)
+		return ret;
+
+	return devm_led_classdev_register_ext(&pdev->dev, &priv->cdev,
+					      &init_data);
+}
+
+static struct platform_driver led_driver = {
+	.probe = tps6105x_led_probe,
+	.driver = {
+		.name = "tps6105x-leds",
+	},
+};
+
+module_platform_driver(led_driver);
+
+MODULE_DESCRIPTION("TPS6105x LED driver");
+MODULE_AUTHOR("Sven Van Asbroeck <TheSven73@gmail.com>");
+MODULE_LICENSE("GPL v2");
-- 
2.17.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v6 2/2] dt-bindings: mfd: update TI tps6105x chip bindings
  2019-12-16 14:32 [PATCH v6 0/2] tps6105x add devicetree and leds support Sven Van Asbroeck
  2019-12-16 14:32 ` [PATCH v6 1/2] leds: tps6105x: add driver for MFD chip LED mode Sven Van Asbroeck
@ 2019-12-16 14:32 ` Sven Van Asbroeck
  2019-12-16 16:38   ` Lee Jones
  1 sibling, 1 reply; 5+ messages in thread
From: Sven Van Asbroeck @ 2019-12-16 14:32 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek
  Cc: Linus Walleij, Grigoryev Denis, Axel Lin, Jacek Anaszewski,
	Dan Murphy, Rob Herring, Mark Rutland, devicetree, linux-kernel,
	linux-leds

The driver has been extended to optionally get its operational
mode, regulator init data and LED naming from the devicetree.

Acked-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Sven Van Asbroeck <TheSven73@gmail.com>
---
 .../devicetree/bindings/mfd/tps6105x.txt      | 47 ++++++++++++++++++-
 1 file changed, 46 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/mfd/tps6105x.txt b/Documentation/devicetree/bindings/mfd/tps6105x.txt
index 93602c7a19c8..dc448a9d5b4d 100644
--- a/Documentation/devicetree/bindings/mfd/tps6105x.txt
+++ b/Documentation/devicetree/bindings/mfd/tps6105x.txt
@@ -7,11 +7,56 @@ Required properties:
 - compatible:		"ti,tps61050" or "ti,tps61052"
 - reg:			Specifies the I2C slave address
 
-Example:
+Optional sub-node:
+
+This subnode selects the chip's operational mode.
+There can be at most one single available subnode.
+
+- regulator: presence of this sub-node puts the chip in regulator mode.
+	see ../regulator/regulator.yaml
+
+- led: presence of this sub-node puts the chip in led mode.
+	Optional properties:
+	- function : see ../leds/common.txt
+	- color    : see ../leds/common.txt
+	- label    : see ../leds/common.txt
+			(deprecated)
+
+Example (GPIO operation only):
+
+i2c0 {
+	tps61052@33 {
+		compatible = "ti,tps61052";
+		reg = <0x33>;
+	};
+};
+
+Example (GPIO + regulator operation):
 
 i2c0 {
 	tps61052@33 {
 		compatible = "ti,tps61052";
 		reg = <0x33>;
+
+		regulator {
+			regulator-min-microvolt = <5000000>;
+			regulator-max-microvolt = <5000000>;
+			regulator-always-on;
+		};
+	};
+};
+
+Example (GPIO + led operation):
+
+#include <dt-bindings/leds/common.h>
+
+i2c0 {
+	tps61052@33 {
+		compatible = "ti,tps61052";
+		reg = <0x33>;
+
+		led {
+			color = <LED_COLOR_ID_WHITE>;
+		};
 	};
 };
-- 
2.17.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v6 2/2] dt-bindings: mfd: update TI tps6105x chip bindings
  2019-12-16 14:32 ` [PATCH v6 2/2] dt-bindings: mfd: update TI tps6105x chip bindings Sven Van Asbroeck
@ 2019-12-16 16:38   ` Lee Jones
  0 siblings, 0 replies; 5+ messages in thread
From: Lee Jones @ 2019-12-16 16:38 UTC (permalink / raw)
  To: Sven Van Asbroeck
  Cc: Pavel Machek, Linus Walleij, Grigoryev Denis, Axel Lin,
	Jacek Anaszewski, Dan Murphy, Rob Herring, Mark Rutland,
	devicetree, linux-kernel, linux-leds

On Mon, 16 Dec 2019, Sven Van Asbroeck wrote:

> The driver has been extended to optionally get its operational
> mode, regulator init data and LED naming from the devicetree.
> 
> Acked-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
> Reviewed-by: Rob Herring <robh@kernel.org>
> Signed-off-by: Sven Van Asbroeck <TheSven73@gmail.com>
> ---
>  .../devicetree/bindings/mfd/tps6105x.txt      | 47 ++++++++++++++++++-
>  1 file changed, 46 insertions(+), 1 deletion(-)

For my own reference:
  Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org>

-- 
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v6 1/2] leds: tps6105x: add driver for MFD chip LED mode
  2019-12-16 14:32 ` [PATCH v6 1/2] leds: tps6105x: add driver for MFD chip LED mode Sven Van Asbroeck
@ 2019-12-21 19:04   ` Pavel Machek
  0 siblings, 0 replies; 5+ messages in thread
From: Pavel Machek @ 2019-12-21 19:04 UTC (permalink / raw)
  To: Sven Van Asbroeck
  Cc: Lee Jones, Linus Walleij, Grigoryev Denis, Axel Lin,
	Jacek Anaszewski, Dan Murphy, Rob Herring, Mark Rutland,
	devicetree, linux-kernel, linux-leds

[-- Attachment #1: Type: text/plain, Size: 458 bytes --]

On Mon 2019-12-16 09:32:58, Sven Van Asbroeck wrote:
> This driver adds support for the LED operational mode of the
> tps6105x MFD device.
> 
> Acked-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
> Signed-off-by: Sven Van Asbroeck <TheSven73@gmail.com>

Thanks, applied both patches.
							Pavel
							
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, back to index

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-16 14:32 [PATCH v6 0/2] tps6105x add devicetree and leds support Sven Van Asbroeck
2019-12-16 14:32 ` [PATCH v6 1/2] leds: tps6105x: add driver for MFD chip LED mode Sven Van Asbroeck
2019-12-21 19:04   ` Pavel Machek
2019-12-16 14:32 ` [PATCH v6 2/2] dt-bindings: mfd: update TI tps6105x chip bindings Sven Van Asbroeck
2019-12-16 16:38   ` Lee Jones

Linux-LEDs Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-leds/0 linux-leds/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-leds linux-leds/ https://lore.kernel.org/linux-leds \
		linux-leds@vger.kernel.org
	public-inbox-index linux-leds

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-leds


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git