Re: Proposal: Add color_temperature support

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

 



Hi!

> On the device Logitech Litra Glow it is possible to set not only the
> brightness but also the color temperature (both via usb as well as via
> hardware).
> I am currently trying to add support for the device - and expose it
> via LED - into the kernel.
> So to support all device capabilities I am proposing to extend LEDs by
> color temperature:
> And initial patch for the headers:

Internally, the litra glow is something like RGB LED, right? Can we
support it as a multicolor LED?

Best regards,
								Pavel

>  diff --git a/include/linux/leds.h b/include/linux/leds.h
> index ba4861ec7..494eab49b 100644
> --- a/include/linux/leds.h
> +++ b/include/linux/leds.h
> @@ -72,6 +72,9 @@ struct led_classdev {
> unsigned int brightness;
> unsigned int max_brightness;
> int flags;
> + unsigned int color_temperature;
> + unsigned int min_color_temperature;
> + unsigned int max_color_temperature;
> /* Lower 16 bits reflect status */
> #define LED_SUSPENDED BIT(0)
> @@ -123,6 +126,21 @@ struct led_classdev {
> unsigned long *delay_on,
> unsigned long *delay_off);
> + /* Set LED color temperature
> + * Must not sleep. Use color_temperature_set_blocking for drivers
> + * that can sleep while setting color temperature.
> + */
> + void (*color_temperature_set)(struct led_classdev *led_cdev,
> + unsigned int color_temperature);
> + /*
> + * Set LED color temperature immediately - it can block the caller for
> + * the time required for accessing a LED device register.
> + */
> + int (*color_temperature_set_blocking)(struct led_classdev *led_cdev,
> + unsigned int color_temperature);
> + /* Get LED color temperature */
> + unsigned int (*color_temperature_get)(struct led_classdev *led_cdev);
> +
> int (*pattern_set)(struct led_classdev *led_cdev,
> struct led_pattern *pattern, u32 len, int repeat);
> int (*pattern_clear)(struct led_classdev *led_cdev);
> @@ -140,6 +158,7 @@ struct led_classdev {
> void (*flash_resume)(struct led_classdev *led_cdev);
> struct work_struct set_brightness_work;
> + struct work_struct set_color_temperature_work;
> int delayed_set_value;
> #ifdef CONFIG_LEDS_TRIGGERS
> @@ -160,6 +179,10 @@ struct led_classdev {
> int brightness_hw_changed;
> struct kernfs_node *brightness_hw_changed_kn;
> #endif
> +#ifdef CONFIG_LEDS_COLOR_TEMPERATURE_HW_CHANGED
> + int color_temperature_hw_changed;
> + struct kernfs_node *color_temperature_hw_changed_kn;
> +#endif
> /* Ensures consistent access to the LED Flash Class device */
> struct mutex led_access;
> @@ -574,6 +597,14 @@ void led_classdev_notify_brightness_hw_changed(
> static inline void led_classdev_notify_brightness_hw_changed(
> struct led_classdev *led_cdev, enum led_brightness brightness) { }
> #endif
> +#ifdef CONFIG_LEDS_COLOR_TEMPERATURE_HW_CHANGED
> +void led_classdev_notify_color_temperature_hw_changed(
> + struct led_classdev *led_cdev, unsigned int color_temperature);
> +#else
> +static inline void led_classdev_notify_color_temperature_hw_changed(
> + struct led_classdev *led_cdev, unsigned int color_temperature) { }
> +#endif
> +
> /**
> * struct led_pattern - pattern interval settings
> 
> What do you think?
> Cheers

-- 
People of Russia, stop Putin before his war on Ukraine escalates.

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux