Hi! Sorry for the delay. > @@ -27,6 +29,18 @@ EXPORT_SYMBOL_GPL(leds_list_lock); > LIST_HEAD(leds_list); > EXPORT_SYMBOL_GPL(leds_list); > > +const char *led_colors[LED_COLOR_ID_MAX] = { const char * const , if we want to play that game? > + [LED_COLOR_ID_WHITE] = "white", > + [LED_COLOR_ID_RED] = "red", > + [LED_COLOR_ID_GREEN] = "green", > + [LED_COLOR_ID_BLUE] = "blue", > + [LED_COLOR_ID_AMBER] = "amber", > + [LED_COLOR_ID_VIOLET] = "violet", > + [LED_COLOR_ID_YELLOW] = "yellow", > + [LED_COLOR_ID_IR] = "ir", > +}; > +EXPORT_SYMBOL_GPL(led_colors); > + > + if (fwnode_property_present(fwnode, "label")) { > + ret = fwnode_property_read_string(fwnode, "label", &props->label); > + if (ret) > + dev_err(dev, "Error parsing \'label\' property (%d)\n", ret); > + return; I don't think you need to escape ' with \. > + if (fwnode_property_present(fwnode, "function")) { > + ret = fwnode_property_read_string(fwnode, "function", &props->function); > + if (ret) { > + dev_err(dev, > + "Error parsing \'function\' property (%d)\n", > + ret); > + } > + } else { > + return; > + } > + > + if (fwnode_property_present(fwnode, "function-enumerator")) { I'd do if (!fwnode_property_present()) return; in both occasions, to save an indentation level; but that's nitpicking. > + if (props.label) { > + /* > + * If init_data.devicename is NULL, then it indicates that > + * DT label should be used as-is for LED class device name. > + * Otherwise the label is prepended with devicename to compose > + * the final LED class device name. > + */ > + if (!devicename) { > + strncpy(led_classdev_name, props.label, > + LED_MAX_NAME_SIZE); > + } else { > + snprintf(led_classdev_name, LED_MAX_NAME_SIZE, "%s:%s", > + devicename, props.label); > + } Unlike snprintf(), strncpy() does not guarantee NULL termination. I did not check the shell script. With that fixed, Acked-by: Pavel Machek Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html