Lines Matching +full:disable +full:- +full:leds

1 // SPDX-License-Identifier: GPL-2.0
3 * CZ.NIC's Turris Omnia LEDs driver
9 #include <linux/led-class-multicolor.h>
13 #include "leds.h"
41 struct omnia_led leds[]; member
57 msgs[0].addr = client->addr; in omnia_cmd_read_u8()
61 msgs[1].addr = client->addr; in omnia_cmd_read_u8()
66 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); in omnia_cmd_read_u8()
72 return -EIO; in omnia_cmd_read_u8()
79 struct omnia_leds *leds = dev_get_drvdata(cdev->dev->parent); in omnia_led_brightness_set_blocking() local
84 mutex_lock(&leds->lock); in omnia_led_brightness_set_blocking()
86 led_mc_calc_color_components(&led->mc_cdev, brightness); in omnia_led_brightness_set_blocking()
89 buf[1] = led->reg; in omnia_led_brightness_set_blocking()
90 buf[2] = mc_cdev->subled_info[0].brightness; in omnia_led_brightness_set_blocking()
91 buf[3] = mc_cdev->subled_info[1].brightness; in omnia_led_brightness_set_blocking()
92 buf[4] = mc_cdev->subled_info[2].brightness; in omnia_led_brightness_set_blocking()
94 state = CMD_LED_STATE_LED(led->reg); in omnia_led_brightness_set_blocking()
98 ret = omnia_cmd_write_u8(leds->client, CMD_LED_STATE, state); in omnia_led_brightness_set_blocking()
100 ret = i2c_master_send(leds->client, buf, 5); in omnia_led_brightness_set_blocking()
102 mutex_unlock(&leds->lock); in omnia_led_brightness_set_blocking()
111 struct device *dev = &client->dev; in omnia_led_register()
115 ret = of_property_read_u32(np, "reg", &led->reg); in omnia_led_register()
116 if (ret || led->reg >= OMNIA_BOARD_LEDS) { in omnia_led_register()
119 np, OMNIA_BOARD_LEDS - 1); in omnia_led_register()
131 led->subled_info[0].color_index = LED_COLOR_ID_RED; in omnia_led_register()
132 led->subled_info[0].channel = 0; in omnia_led_register()
133 led->subled_info[1].color_index = LED_COLOR_ID_GREEN; in omnia_led_register()
134 led->subled_info[1].channel = 1; in omnia_led_register()
135 led->subled_info[2].color_index = LED_COLOR_ID_BLUE; in omnia_led_register()
136 led->subled_info[2].channel = 2; in omnia_led_register()
138 led->mc_cdev.subled_info = led->subled_info; in omnia_led_register()
139 led->mc_cdev.num_colors = OMNIA_LED_NUM_CHANNELS; in omnia_led_register()
141 init_data.fwnode = &np->fwnode; in omnia_led_register()
143 cdev = &led->mc_cdev.led_cdev; in omnia_led_register()
144 cdev->max_brightness = 255; in omnia_led_register()
145 cdev->brightness_set_blocking = omnia_led_brightness_set_blocking; in omnia_led_register()
149 CMD_LED_MODE_LED(led->reg) | in omnia_led_register()
157 /* disable the LED */ in omnia_led_register()
159 CMD_LED_STATE_LED(led->reg)); in omnia_led_register()
165 ret = devm_led_classdev_multicolor_register_ext(dev, &led->mc_cdev, in omnia_led_register()
177 * can be used to control the intensity of all the LEDs at once, so that if they
208 return -EINVAL; in brightness_store()
211 return -EINVAL; in brightness_store()
227 struct device *dev = &client->dev; in omnia_leds_probe()
229 struct omnia_leds *leds; in omnia_leds_probe() local
235 dev_err(dev, "LEDs are not defined in device tree!\n"); in omnia_leds_probe()
236 return -ENODEV; in omnia_leds_probe()
238 dev_err(dev, "Too many LEDs defined in device tree!\n"); in omnia_leds_probe()
239 return -EINVAL; in omnia_leds_probe()
242 leds = devm_kzalloc(dev, struct_size(leds, leds, count), GFP_KERNEL); in omnia_leds_probe()
243 if (!leds) in omnia_leds_probe()
244 return -ENOMEM; in omnia_leds_probe()
246 leds->client = client; in omnia_leds_probe()
247 i2c_set_clientdata(client, leds); in omnia_leds_probe()
249 mutex_init(&leds->lock); in omnia_leds_probe()
251 led = &leds->leds[0]; in omnia_leds_probe()
269 /* put all LEDs into default (HW triggered) mode */ in omnia_leds_remove()
273 /* set all LEDs color to [255, 255, 255] */ in omnia_leds_remove()
284 { .compatible = "cznic,turris-omnia-leds", },
299 .name = "leds-turris-omnia",
308 MODULE_DESCRIPTION("CZ.NIC's Turris Omnia LEDs");