Re: [PATCH v29 03/16] leds: multicolor: Introduce a multicolor class definition

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

 



Pavel

Thanks for the review

On 7/11/20 10:57 AM, Pavel Machek wrote:
Hi!

Introduce a multicolor class that groups colored LEDs
within a LED node.
+What:		/sys/class/leds/<led>/multi_intensity
+Date:		March 2020
+KernelVersion:	5.8
+Contact:	Dan Murphy <dmurphy@xxxxxx>
+Description:	read/write
+		Intensity level for the LED color within an array of integers.
? "This file contains array of integers".
OK

+		The intensities for each color must be entered based on the
+		multi_index array.
This does not make sense to me. "Order of components is described by
the multi_index array"?

The max_intensity should not exceed
"max_intensity" -> "maximum intensity"?
OK

+		/sys/class/leds/<led>/max_brightness.
+Multicolor Class Brightness Control
+===================================
+The multicolor class framework will calculate each monochrome LEDs intensity.
?
This is redundant and will be removed.

+static ssize_t multi_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_dbg(led_cdev->dev,
+				"Incorrect number of LEDs expected %i values intensity was not applied\n",
+				mcled_cdev->num_colors);
+			ret = -EINVAL;
+			goto err_out;
+		}
+		offset += nrchars;
+	}
+
+	/* account for the space at the end of the buffer */
+	offset++;
space? I'd expect \n there. And it would be good to verify it is
indeed \n, so that for example "0 0 0b" is not accepted.
It is a new line the comment is incorrect I can remove the comment or update the comment to account for the new line
Please remove the dev_dbg()s that can be triggered by userspace. We
don't want users spamming the logs.
Removed

+static ssize_t multi_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->subled_info[i].intensity);
+		len += sprintf(buf + len, " ");
We should not really put " " before newline.

OK I will fix that.


+static ssize_t multi_index_show(struct device *dev,
+			      struct device_attribute *multi_index_attr,
+			      char *buf)
+{
+	for (i = 0; i < mcled_cdev->num_colors; i++) {
+		index = mcled_cdev->subled_info[i].color_index;
+		len += sprintf(buf + len, "%s", led_colors[index]);
+		len += sprintf(buf + len, " ");
+	}
We should not really put " " before newline.

+{
+	struct led_classdev *led_cdev;
+
+	if (!mcled_cdev)
+		return -EINVAL;
+
+	if (!mcled_cdev->num_colors)
+		return -EINVAL;
It is plain int, so you may want to check for <= 0? Or maybe make it
unsigned?

ok


+MODULE_LICENSE("GPL v2");
If your legal department allows that, GPL v2+ would be preffered
(globally).

OK



+struct mc_subled {
+	int color_index;
+	int brightness;
+	int intensity;
+	int channel;
+};
+
+struct led_classdev_mc {
+	/* led class device */
+	struct led_classdev led_cdev;
+	int num_colors;
+
+	struct mc_subled *subled_info;
+};
Would some "unsigned"s make sense here to cut number of corner cases?

I made these unsigned.

Dan


Best regards,
									Pavel



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux