On Thu, Jan 19, 2023 at 3:01 PM Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > > Add a generic [devm_]led_get() method which can be used on both devicetree > and non devicetree platforms to get a LED classdev associated with > a specific function on a specific device, e.g. the privacy LED associated > with a specific camera sensor. > > Note unlike of_led_get() this takes a string describing the function > rather then an index. This is done because e.g. camera sensors might than > have a privacy LED, or a flash LED, or both and using an index > approach leaves it unclear what the function of index 0 is if there is > only 1 LED. > > This uses a lookup-table mechanism for non devicetree platforms. > This allows the platform code to map specific LED class_dev-s to a specific > device,function combinations this way. > > For devicetree platforms getting the LED by function-name could be made > to work using the standard devicetree pattern of adding a -names string > array to map names to the indexes. ... > +/* > + * This is used to tell led_get() device which led_classdev to return for > + * a specific consumer device-name, function pair on non devicetree platforms. > + * Note all strings must be set. > + */ > +struct led_lookup_data { > + struct list_head list; > + const char *led_name; > + const char *consumer_dev_name; > + const char *consumer_function; > +}; I'm wondering if it would be better to have something like struct led_function_map { const char *name; const char *function; }; struct led_lookup_data { struct list_head list; const char *dev_name; const struct led_function_map map[]; }; as you may have more than one LED per the device and it would be a more compressed list in this case. I'm basically referring to the GPIO lookup table. -- With Best Regards, Andy Shevchenko