linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Pavel Machek <pavel@ucw.cz>
To: Dan Murphy <dmurphy@ti.com>
Cc: jacek.anaszewski@gmail.com, linux-leds@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v20 03/17] leds: multicolor: Introduce a multicolor class definition
Date: Sat, 25 Apr 2020 22:23:07 +0200	[thread overview]
Message-ID: <20200425202306.GA23926@amd> (raw)
In-Reply-To: <20200423155524.13971-4-dmurphy@ti.com>

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

Hi!

ting/sysfs-class-led-multicolor
> new file mode 100644
> index 000000000000..ada0dbecfeab
> --- /dev/null
> +++ b/Documentation/ABI/testing/sysfs-class-led-multicolor
> @@ -0,0 +1,42 @@
> +What:		/sys/class/leds/<led>/multi_led_index
> +Date:		March 2020
> +KernelVersion:	5.8
> +Contact:	Dan Murphy <dmurphy@ti.com>
> +Description:	read
> +		The multi_led_index array, when read, will output the LED colors
> +		by name as they are indexed in the multi_led_intensity file.

Can we make it multi_index? We are already in leds directory, and it
is a bit shorter.

> +What:		/sys/class/leds/<led>/num_multi_leds
> +Date:		March 2020
> +KernelVersion:	5.8
> +Contact:	Dan Murphy <dmurphy@ti.com>
> +Description:	read
> +		The num_multi_leds indicates the number of LEDs defined in the
> +		multi_led_intensity and multi_led_index files.

Please drop this one.

> +What:		/sys/class/leds/<led>/multi_led_intensity
> +Date:		March 2020
> +KernelVersion:	5.8
> +Contact:	Dan Murphy <dmurphy@ti.com>
> +Description:	read/write
> +		Intensity level for the LED color within the array.
> +		The intensities for each color must be entered based on the
> +		multi_led_index array.

And let this one be multi_intensity.

> +For more details on hue and lightness notions please refer to
> +https://en.wikipedia.org/wiki/CIECAM02.

I'd drop this reference. multi_intensity file controls both hue and
saturation AFAICT.

> +Example:
> +A user first writes the multi_led_intensity file with the brightness levels
> +for each LED that are necessary to achieve a blueish violet output from a
> +multicolor LED group.

I don't believe we can guarantee that. 255/255/255 will produce
different colors on different hardware (not white), and 43/226/138
will also produce different colors....

> +cat /sys/class/leds/multicolor:status/multi_led_index
> +green blue red

Hmm. We should really make sure LEDs are ordered as "red green
blue". Yes, userspace should support any order, but...

> +The user can control the brightness of that multicolor LED group by writing the
> +parent 'brightness' control.  Assuming a parent max_brightness of 255 the user

delete "parent", twice?


> +	for (i = 0; i < mcled_cdev->num_colors; i++)
> +		mcled_cdev->multicolor_info[i].color_brightness = brightness *
> +					  mcled_cdev->multicolor_info[i].color_led_intensity /
> +					  led_cdev->max_brightness;

It would be good to get this under ~80 characters. Perhaps shorter
identifiers would help... shortening multicolor_ to mc_?

> +static ssize_t multi_led_intensity_store(struct device *dev,
> +				struct device_attribute *intensity_attr,
> +				const char *buf, size_t size)
> +{
> +	struct led_classdev *led_cdev = dev_get_drvdata(dev);
> +	struct led_classdev_mc *mcled_cdev = lcdev_to_mccdev(led_cdev);
> +	int nrchars, offset = 0;
> +	int intensity_value[LED_COLOR_ID_MAX];
> +	int i;
> +	ssize_t ret;
> +
> +	mutex_lock(&led_cdev->led_access);
> +
> +	for (i = 0; i < mcled_cdev->num_colors; i++) {
> +		ret = sscanf(buf + offset, "%i%n",
> +			     &intensity_value[i], &nrchars);
> +		if (ret != 1) {
> +			dev_err(led_cdev->dev,

dev_dbg, at most. It is user-triggerable.

> +				"Incorrect number of LEDs expected %i values intensity was not applied\n",
> +				mcled_cdev->num_colors);
> +			goto err_out;

Should not we return -ERRNO to userspace on error?

> +		}
> +		offset += nrchars;
> +	}

This checks for "not enough" intensities. Do we need check for "too
many" intensities?

> +static ssize_t multi_led_intensity_show(struct device *dev,
> +			      struct device_attribute *intensity_attr,
> +			      char *buf)
> +{
> +	struct led_classdev *led_cdev = dev_get_drvdata(dev);
> +	struct led_classdev_mc *mcled_cdev = lcdev_to_mccdev(led_cdev);
> +	int len = 0;
> +	int i;
> +
> +	for (i = 0; i < mcled_cdev->num_colors; i++)
> +		len += sprintf(buf + len, "%d ",
> +			    mcled_cdev->multicolor_info[i].color_led_intensity);
> +
> +	len += sprintf(buf + len, "%s", "\n");

This will result in extra " " before end of line.

Please don't use "%s", "\n" to add single character. "\n" would be enough.


> +	struct led_classdev *led_cdev = dev_get_drvdata(dev);
> +	struct led_classdev_mc *mcled_cdev = lcdev_to_mccdev(led_cdev);
> +	int len = 0;
> +	int index;
> +	int i;
> +
> +	for (i = 0; i < mcled_cdev->num_colors; i++) {
> +		index = mcled_cdev->multicolor_info[i].color_index;
> +		len += sprintf(buf + len, "%s ", led_colors[index]);
> +	}
> +
> +	len += sprintf(buf + len, "%s", "\n");

Same here.

> +int led_classdev_multicolor_register_ext(struct device *parent,
> +				     struct led_classdev_mc *mcled_cdev,
> +				     struct led_init_data *init_data)
> +{
> +	struct led_classdev *led_cdev;
> +
> +	if (!mcled_cdev)
> +		return -EINVAL;
> +
> +	if (!mcled_cdev->num_colors)
> +		return -EINVAL;

if (num_colors > max)... ?

> +#ifndef __LINUX_MULTICOLOR_LEDS_H_INCLUDED
> +#define __LINUX_MULTICOLOR_LEDS_H_INCLUDED

Usual style is "_LINUX_MULTICOLOR_LEDS_H".

> +#else
> +
> +static inline  int led_classdev_multicolor_register_ext(struct device *parent,

double space after "inline".

> +					    struct led_classdev_mc *mcled_cdev,
> +					    struct led_init_data *init_data)
> +{
> +	return -EINVAL;
> +}

Do we need to include these stubs? I guess it is okay to have them,
OTOH I'd expect drivers to depend on MULTICOLOR being available...

Best regards,
									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 --]

  parent reply	other threads:[~2020-04-25 20:23 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-23 15:55 [PATCH v20 00/17] Multicolor Framework (array edition) Dan Murphy
2020-04-23 15:55 ` [PATCH v20 01/17] dt: bindings: Add multicolor class dt bindings documention Dan Murphy
2020-04-23 15:55 ` [PATCH v20 02/17] leds: Add multicolor ID to the color ID list Dan Murphy
2020-04-25 19:52   ` Pavel Machek
2020-04-27 17:12     ` Dan Murphy
2020-04-28  8:43       ` Pavel Machek
2020-04-28 12:02         ` Dan Murphy
2020-04-23 15:55 ` [PATCH v20 03/17] leds: multicolor: Introduce a multicolor class definition Dan Murphy
2020-04-25 19:53   ` Pavel Machek
2020-04-27 17:12     ` Dan Murphy
2020-04-25 20:23   ` Pavel Machek [this message]
2020-04-26 16:24     ` Jacek Anaszewski
2020-04-26 19:48       ` Pavel Machek
2020-04-27 19:33     ` Dan Murphy
2020-04-28  8:41       ` Pavel Machek
2020-04-26 16:46   ` Jacek Anaszewski
2020-04-23 15:55 ` [PATCH v20 04/17] dt: bindings: lp50xx: Introduce the lp50xx family of RGB drivers Dan Murphy
2020-04-25 20:24   ` Pavel Machek
2020-04-27 19:02     ` Dan Murphy
2020-04-23 15:55 ` [PATCH v20 05/17] leds: lp50xx: Add the LP50XX family of the RGB LED driver Dan Murphy
2020-04-23 15:55 ` [PATCH v20 06/17] dt: bindings: lp55xx: Be consistent in the document with LED acronym Dan Murphy
2020-04-23 15:55 ` [PATCH v20 07/17] dt: bindings: lp55xx: Update binding for Multicolor Framework Dan Murphy
2020-04-23 15:55 ` [PATCH v20 08/17] ARM: dts: n900: Add reg property to the LP5523 channel node Dan Murphy
2020-04-23 15:55 ` [PATCH v20 09/17] ARM: dts: imx6dl-yapp4: Add reg property to the lp5562 " Dan Murphy
2020-04-25 20:31   ` Pavel Machek
2020-04-23 15:55 ` [PATCH v20 10/17] ARM: dts: ste-href: Add reg property to the LP5521 channel nodes Dan Murphy
2020-04-27 19:06   ` Dan Murphy
2020-04-23 15:55 ` [PATCH v20 11/17] leds: lp55xx: Convert LED class registration to devm_* Dan Murphy
2020-04-23 15:55 ` [PATCH v20 12/17] leds: lp55xx: Add multicolor framework support to lp55xx Dan Murphy
2020-04-25 20:37   ` Pavel Machek
2020-04-26 16:07   ` Jacek Anaszewski
2020-04-27 18:17     ` Dan Murphy
2020-04-27 19:42       ` Jacek Anaszewski
2020-04-27 19:58         ` Dan Murphy
2020-04-23 15:55 ` [PATCH v20 13/17] leds: lp5523: Update the lp5523 code to add multicolor brightness function Dan Murphy
2020-04-25 20:38   ` Pavel Machek
2020-04-23 15:55 ` [PATCH v20 14/17] leds: lp5521: Add multicolor framework multicolor brightness support Dan Murphy
2020-04-25 20:39   ` Pavel Machek
2020-04-23 15:55 ` [PATCH v20 15/17] leds: lp55xx: Fix checkpatch file permissions issues Dan Murphy
2020-04-23 15:55 ` [PATCH v20 16/17] leds: lp5523: Fix checkpatch issues in the code Dan Murphy
2020-04-23 15:55 ` [PATCH v20 17/17] dt: bindings: Update lp55xx binding to recommended LED naming Dan Murphy
2020-04-25 20:48 ` [PATCH v20 00/17] Multicolor Framework (array edition) Pavel Machek
2020-04-27 17:18   ` Dan Murphy
2020-04-27 19:05     ` Dan Murphy

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=20200425202306.GA23926@amd \
    --to=pavel@ucw.cz \
    --cc=dmurphy@ti.com \
    --cc=jacek.anaszewski@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).