Re: [PATCH v2 leds-next 3/3] leds: turris-omnia: Add support for continuous brightness

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Marek,

On 3/27/19 4:36 PM, Marek Behún wrote:
The controller supports setting brightness of each channel of the RGB
LEDs. Utilize this by adding support for setting continuous brightness
of the entire LED by setting the same brightness on all 3 channels.

Signed-off-by: Marek Behún <marek.behun@xxxxxx>
---
  drivers/leds/Kconfig             |  4 ++--
  drivers/leds/leds-turris-omnia.c | 10 +++++++++-
  2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
index adcd53c02b3c..f97ef7977b24 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
@@ -137,8 +137,8 @@ config LEDS_TURRIS_OMNIA
  	  side of CZ.NIC's Turris Omnia router. There are 12 RGB LEDs on the
  	  front panel.
  	  This driver does not currently support setting LED colors, only
-	  on/off state. Also HW triggering is disabled when the controller
-	  is probed by this driver.
+	  brightness. Also HW triggering is disabled when the controller is
+	  probed by this driver.
config LEDS_LM3530
  	tristate "LCD Backlight driver for LM3530"
diff --git a/drivers/leds/leds-turris-omnia.c b/drivers/leds/leds-turris-omnia.c
index 9b96a2da4e38..ade467dbe609 100644
--- a/drivers/leds/leds-turris-omnia.c
+++ b/drivers/leds/leds-turris-omnia.c
@@ -46,7 +46,7 @@ static int omnia_led_brightness_set_blocking(struct led_classdev *led,
  	struct omnia_leds *leds = dev_get_drvdata(led->dev->parent);
  	int idx = omnia_led_idx(leds, led);
  	int ret;
-	u8 state;
+	u8 buf[5], state;
if (idx < 0)
  		return idx;
@@ -55,8 +55,16 @@ static int omnia_led_brightness_set_blocking(struct led_classdev *led,
  	if (brightness)
  		state |= CMD_LED_STATE_ON;
+ buf[0] = CMD_LED_COLOR;
+	buf[1] = idx;
+	buf[2] = buf[3] = buf[4] = brightness;

If each logical LED has has three channels, then to be compatible with
current RGB LEDs in the LED subsystem, the channels must be exposed as
individual LED class devices.

  	mutex_lock(&leds->lock);
+
  	ret = i2c_smbus_write_byte_data(leds->client, CMD_LED_STATE, state);
+	if (ret >= 0)
+		ret = i2c_master_send(leds->client, buf, 5);

Could you switch to using regmap for the whole driver, please?

+
  	mutex_unlock(&leds->lock);
return ret;


--
Best regards,
Jacek Anaszewski



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux