From: Jacek Anaszewski <j.anaszewski@samsung.com>
To: Heiner Kallweit <hkallweit1@gmail.com>
Cc: linux-leds@vger.kernel.org,
Benjamin Tissoires <benjamin.tissoires@redhat.com>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 4/4] leds: core: add support for RGB LED's
Date: Fri, 04 Mar 2016 10:05:16 +0100 [thread overview]
Message-ID: <56D94FCC.8050706@samsung.com> (raw)
In-Reply-To: <56D60B4C.5000506@gmail.com>
On 03/01/2016 10:36 PM, Heiner Kallweit wrote:
> Export a function to convert HSV color values to RGB.
> It's intended to be called by drivers for RGB LEDs.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> ---
> v2:
> - move hsv -> rgb conversion to separate file
> - remove flag LED_DEV_CAP_RGB
> v3:
> - call led_hsv_to_rgb only if LED_DEV_CAP_HSV is set
> This is needed in cases when we have monochrome and color LEDs
> as well in a system.
> v4:
> - Export led_hsv_to_rgb and let the device driver call it instead
> of doing the conversion in the core
> v5:
> - don't ignore led_cdev->brightness_get silently if LED_DEV_CAP_RGB
> is set but warn
> ---
> drivers/leds/led-class.c | 7 +++++++
> drivers/leds/led-rgb-core.c | 36 ++++++++++++++++++++++++++++++++++++
> include/linux/leds.h | 8 ++++++++
> 3 files changed, 51 insertions(+)
>
> diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
> index 8a3748a..a4b144e 100644
> --- a/drivers/leds/led-class.c
> +++ b/drivers/leds/led-class.c
> @@ -193,6 +193,13 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
> char name[64];
> int ret;
>
> + /*
> + * for now reading back the color is not supported as multiple
> + * HSV -> RGB -> HSV conversions may distort the color due to
> + * rounding issues in the conversion algorithm
> + */
Does the "for now" mean that you plan on supporting it in the future?
> + WARN_ON(led_cdev->flags & LED_DEV_CAP_RGB && led_cdev->brightness_get);
> +
Could you move this warning to the line 216?
> ret = led_classdev_next_name(led_cdev->name, name, sizeof(name));
> if (ret < 0)
> return ret;
> diff --git a/drivers/leds/led-rgb-core.c b/drivers/leds/led-rgb-core.c
> index f6591f1..2b18d4c 100644
> --- a/drivers/leds/led-rgb-core.c
> +++ b/drivers/leds/led-rgb-core.c
> @@ -38,3 +38,39 @@ enum led_brightness led_confine_brightness(struct led_classdev *led_cdev,
> return brightness |
> min(value & LED_BRIGHTNESS_MASK, led_cdev->max_brightness);
> }
> +
> +enum led_brightness led_hsv_to_rgb(enum led_brightness hsv)
> +{
> + int h = min_t(int, (hsv >> 16) & 0xff, 251);
> + int s = (hsv >> 8) & 0xff;
> + int v = hsv & 0xff;
> + int f, p, q, t, r, g, b;
> +
> + if (!v)
> + return 0;
> + if (!s)
> + return (v << 16) + (v << 8) + v;
> +
> + f = DIV_ROUND_CLOSEST((h % 42) * 255, 42);
> + p = v - DIV_ROUND_CLOSEST(s * v, 255);
> + q = v - DIV_ROUND_CLOSEST(f * s * v, 255 * 255);
> + t = v - DIV_ROUND_CLOSEST((255 - f) * s * v, 255 * 255);
> +
> + switch (h / 42) {
> + case 0:
> + r = v; g = t; b = p; break;
> + case 1:
> + r = q; g = v; b = p; break;
> + case 2:
> + r = p; g = v; b = t; break;
> + case 3:
> + r = p; g = q; b = v; break;
> + case 4:
> + r = t; g = p; b = v; break;
> + case 5:
> + r = v; g = p; b = q; break;
> + }
> +
> + return (r << 16) + (g << 8) + b;
> +}
> +EXPORT_SYMBOL_GPL(led_hsv_to_rgb);
> diff --git a/include/linux/leds.h b/include/linux/leds.h
> index bbf24bb..82b3477 100644
> --- a/include/linux/leds.h
> +++ b/include/linux/leds.h
> @@ -226,6 +226,14 @@ static inline bool led_sysfs_is_disabled(struct led_classdev *led_cdev)
> return led_cdev->flags & LED_SYSFS_DISABLE;
> }
>
> +/**
> + * led_hsv_to_rgb - convert a hsv color value to rgb color model
> + * @hsv: the hsv value to convert
> + *
> + * Returns: the resulting rgb value
> + */
> +enum led_brightness led_hsv_to_rgb(enum led_brightness hsv);
> +
> /*
> * LED Triggers
> */
>
--
Best regards,
Jacek Anaszewski
next prev parent reply other threads:[~2016-03-04 9:05 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-01 21:36 [PATCH v5 4/4] leds: core: add support for RGB LED's Heiner Kallweit
2016-03-04 9:05 ` Jacek Anaszewski [this message]
2016-03-04 21:21 ` Heiner Kallweit
[not found] ` <56D60B4C.5000506-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-03-29 10:05 ` Pavel Machek
2016-03-29 10:05 ` Pavel Machek
2016-03-29 20:42 ` Heiner Kallweit
2016-03-30 8:00 ` Jacek Anaszewski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56D94FCC.8050706@samsung.com \
--to=j.anaszewski@samsung.com \
--cc=benjamin.tissoires@redhat.com \
--cc=hkallweit1@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.