2020-09-20 20:45:49

by Marek Behún

[permalink] [raw]
Subject: [PATCH leds] leds: regulator: remove driver

The leds-regulator driver only supports the old platform data binding
and no in-tree code uses it. It also seems that no OpenWRT board uses
it.

Remove this driver.

Signed-off-by: Marek Behún <[email protected]>
---
drivers/leds/Kconfig | 7 --
drivers/leds/Makefile | 1 -
drivers/leds/leds-regulator.c | 200 ---------------------------------
include/linux/leds-regulator.h | 42 -------
4 files changed, 250 deletions(-)
delete mode 100644 drivers/leds/leds-regulator.c
delete mode 100644 include/linux/leds-regulator.h

diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
index a008170e73cd8..905e1ff367f33 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
@@ -586,13 +586,6 @@ config LEDS_PWM
help
This option enables support for pwm driven LEDs

-config LEDS_REGULATOR
- tristate "REGULATOR driven LED support"
- depends on LEDS_CLASS
- depends on REGULATOR
- help
- This option enables support for regulator driven LEDs.
-
config LEDS_BD2802
tristate "LED driver for BD2802 RGB LED"
depends on LEDS_CLASS
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
index 778cb4bb8c520..159878eb95f28 100644
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
@@ -78,7 +78,6 @@ obj-$(CONFIG_LEDS_PCA963X) += leds-pca963x.o
obj-$(CONFIG_LEDS_PM8058) += leds-pm8058.o
obj-$(CONFIG_LEDS_POWERNV) += leds-powernv.o
obj-$(CONFIG_LEDS_PWM) += leds-pwm.o
-obj-$(CONFIG_LEDS_REGULATOR) += leds-regulator.o
obj-$(CONFIG_LEDS_S3C24XX) += leds-s3c24xx.o
obj-$(CONFIG_LEDS_SC27XX_BLTC) += leds-sc27xx-bltc.o
obj-$(CONFIG_LEDS_SGM3140) += leds-sgm3140.o
diff --git a/drivers/leds/leds-regulator.c b/drivers/leds/leds-regulator.c
deleted file mode 100644
index 208c98918433e..0000000000000
--- a/drivers/leds/leds-regulator.c
+++ /dev/null
@@ -1,200 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * leds-regulator.c - LED class driver for regulator driven LEDs.
- *
- * Copyright (C) 2009 Antonio Ospite <[email protected]>
- *
- * Inspired by leds-wm8350 driver.
- */
-
-#include <linux/module.h>
-#include <linux/err.h>
-#include <linux/slab.h>
-#include <linux/leds.h>
-#include <linux/leds-regulator.h>
-#include <linux/platform_device.h>
-#include <linux/regulator/consumer.h>
-
-#define to_regulator_led(led_cdev) \
- container_of(led_cdev, struct regulator_led, cdev)
-
-struct regulator_led {
- struct led_classdev cdev;
- int enabled;
- struct mutex mutex;
-
- struct regulator *vcc;
-};
-
-static inline int led_regulator_get_max_brightness(struct regulator *supply)
-{
- int ret;
- int voltage = regulator_list_voltage(supply, 0);
-
- if (voltage <= 0)
- return 1;
-
- /* even if regulator can't change voltages,
- * we still assume it can change status
- * and the LED can be turned on and off.
- */
- ret = regulator_set_voltage(supply, voltage, voltage);
- if (ret < 0)
- return 1;
-
- return regulator_count_voltages(supply);
-}
-
-static int led_regulator_get_voltage(struct regulator *supply,
- enum led_brightness brightness)
-{
- if (brightness == 0)
- return -EINVAL;
-
- return regulator_list_voltage(supply, brightness - 1);
-}
-
-
-static void regulator_led_enable(struct regulator_led *led)
-{
- int ret;
-
- if (led->enabled)
- return;
-
- ret = regulator_enable(led->vcc);
- if (ret != 0) {
- dev_err(led->cdev.dev, "Failed to enable vcc: %d\n", ret);
- return;
- }
-
- led->enabled = 1;
-}
-
-static void regulator_led_disable(struct regulator_led *led)
-{
- int ret;
-
- if (!led->enabled)
- return;
-
- ret = regulator_disable(led->vcc);
- if (ret != 0) {
- dev_err(led->cdev.dev, "Failed to disable vcc: %d\n", ret);
- return;
- }
-
- led->enabled = 0;
-}
-
-static int regulator_led_brightness_set(struct led_classdev *led_cdev,
- enum led_brightness value)
-{
- struct regulator_led *led = to_regulator_led(led_cdev);
- int voltage;
- int ret = 0;
-
- mutex_lock(&led->mutex);
-
- if (value == LED_OFF) {
- regulator_led_disable(led);
- goto out;
- }
-
- if (led->cdev.max_brightness > 1) {
- voltage = led_regulator_get_voltage(led->vcc, value);
- dev_dbg(led->cdev.dev, "brightness: %d voltage: %d\n",
- value, voltage);
-
- ret = regulator_set_voltage(led->vcc, voltage, voltage);
- if (ret != 0)
- dev_err(led->cdev.dev, "Failed to set voltage %d: %d\n",
- voltage, ret);
- }
-
- regulator_led_enable(led);
-
-out:
- mutex_unlock(&led->mutex);
- return ret;
-}
-
-static int regulator_led_probe(struct platform_device *pdev)
-{
- struct led_regulator_platform_data *pdata =
- dev_get_platdata(&pdev->dev);
- struct regulator_led *led;
- struct regulator *vcc;
- int ret = 0;
-
- if (pdata == NULL) {
- dev_err(&pdev->dev, "no platform data\n");
- return -ENODEV;
- }
-
- vcc = devm_regulator_get_exclusive(&pdev->dev, "vled");
- if (IS_ERR(vcc)) {
- dev_err(&pdev->dev, "Cannot get vcc for %s\n", pdata->name);
- return PTR_ERR(vcc);
- }
-
- led = devm_kzalloc(&pdev->dev, sizeof(*led), GFP_KERNEL);
- if (led == NULL)
- return -ENOMEM;
-
- led->cdev.max_brightness = led_regulator_get_max_brightness(vcc);
- if (pdata->brightness > led->cdev.max_brightness) {
- dev_err(&pdev->dev, "Invalid default brightness %d\n",
- pdata->brightness);
- return -EINVAL;
- }
-
- led->cdev.brightness_set_blocking = regulator_led_brightness_set;
- led->cdev.name = pdata->name;
- led->cdev.flags |= LED_CORE_SUSPENDRESUME;
- led->vcc = vcc;
-
- /* to handle correctly an already enabled regulator */
- if (regulator_is_enabled(led->vcc))
- led->enabled = 1;
-
- mutex_init(&led->mutex);
-
- platform_set_drvdata(pdev, led);
-
- ret = led_classdev_register(&pdev->dev, &led->cdev);
- if (ret < 0)
- return ret;
-
- /* to expose the default value to userspace */
- led->cdev.brightness = pdata->brightness;
-
- /* Set the default led status */
- regulator_led_brightness_set(&led->cdev, led->cdev.brightness);
-
- return 0;
-}
-
-static int regulator_led_remove(struct platform_device *pdev)
-{
- struct regulator_led *led = platform_get_drvdata(pdev);
-
- led_classdev_unregister(&led->cdev);
- regulator_led_disable(led);
- return 0;
-}
-
-static struct platform_driver regulator_led_driver = {
- .driver = {
- .name = "leds-regulator",
- },
- .probe = regulator_led_probe,
- .remove = regulator_led_remove,
-};
-
-module_platform_driver(regulator_led_driver);
-
-MODULE_AUTHOR("Antonio Ospite <[email protected]>");
-MODULE_DESCRIPTION("Regulator driven LED driver");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:leds-regulator");
diff --git a/include/linux/leds-regulator.h b/include/linux/leds-regulator.h
deleted file mode 100644
index 899f816073a14..0000000000000
--- a/include/linux/leds-regulator.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * leds-regulator.h - platform data structure for regulator driven LEDs.
- *
- * Copyright (C) 2009 Antonio Ospite <[email protected]>
- */
-
-#ifndef __LINUX_LEDS_REGULATOR_H
-#define __LINUX_LEDS_REGULATOR_H
-
-/*
- * Use "vled" as supply id when declaring the regulator consumer:
- *
- * static struct regulator_consumer_supply pcap_regulator_VVIB_consumers [] = {
- * { .dev_name = "leds-regulator.0", .supply = "vled" },
- * };
- *
- * If you have several regulator driven LEDs, you can append a numerical id to
- * .dev_name as done above, and use the same id when declaring the platform
- * device:
- *
- * static struct led_regulator_platform_data a780_vibrator_data = {
- * .name = "a780::vibrator",
- * };
- *
- * static struct platform_device a780_vibrator = {
- * .name = "leds-regulator",
- * .id = 0,
- * .dev = {
- * .platform_data = &a780_vibrator_data,
- * },
- * };
- */
-
-#include <linux/leds.h>
-
-struct led_regulator_platform_data {
- char *name; /* LED name as expected by LED class */
- enum led_brightness brightness; /* initial brightness value */
-};
-
-#endif /* __LINUX_LEDS_REGULATOR_H */
--
2.26.2


2020-09-20 21:48:05

by Pavel Machek

[permalink] [raw]
Subject: Re: [PATCH leds] leds: regulator: remove driver

On Sun 2020-09-20 22:42:03, Marek Beh?n wrote:
> The leds-regulator driver only supports the old platform data binding
> and no in-tree code uses it. It also seems that no OpenWRT board uses
> it.
>
> Remove this driver.

Lets keep this one. Connecting LED directly to regulator simply makes
sense.

Best regards,

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


Attachments:
(No filename) (482.00 B)
signature.asc (201.00 B)
Download all attachments

2020-09-20 21:54:33

by Marek Behún

[permalink] [raw]
Subject: Re: [PATCH leds] leds: regulator: remove driver

On Sun, 20 Sep 2020 23:46:47 +0200
Pavel Machek <[email protected]> wrote:

> On Sun 2020-09-20 22:42:03, Marek Behún wrote:
> > The leds-regulator driver only supports the old platform data binding
> > and no in-tree code uses it. It also seems that no OpenWRT board uses
> > it.
> >
> > Remove this driver.
>
> Lets keep this one.

Very well.

> Connecting LED directly to regulator simply makes sense.

It does makes sence to me as well, but at least it needs to be
rewritten to use OF instead of platdata. The way it is written now it
is not used by anyone, apparently.

Marek

2020-09-20 22:28:29

by Pavel Machek

[permalink] [raw]
Subject: Re: [PATCH leds] leds: regulator: remove driver

Hi!

> > > The leds-regulator driver only supports the old platform data binding
> > > and no in-tree code uses it. It also seems that no OpenWRT board uses
> > > it.
> > >
> > > Remove this driver.
> >
> > Lets keep this one.
>
> Very well.
>
> > Connecting LED directly to regulator simply makes sense.
>
> It does makes sence to me as well, but at least it needs to be
> rewritten to use OF instead of platdata. The way it is written now it
> is not used by anyone, apparently.

I'd say that first person that needs it gets to fix it for their needs
:-). I'd suggest simply ignoring it for now.

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


Attachments:
(No filename) (797.00 B)
signature.asc (201.00 B)
Download all attachments