Lines Matching +full:led +full:- +full:2
1 // SPDX-License-Identifier: GPL-2.0
9 #include <linux/led-class-multicolor.h>
48 struct omnia_leds *leds = dev_get_drvdata(cdev->dev->parent); in omnia_led_brightness_set_blocking()
49 struct omnia_led *led = to_omnia_led(mc_cdev); in omnia_led_brightness_set_blocking() local
53 mutex_lock(&leds->lock); in omnia_led_brightness_set_blocking()
55 led_mc_calc_color_components(&led->mc_cdev, brightness); in omnia_led_brightness_set_blocking()
58 buf[1] = led->reg; in omnia_led_brightness_set_blocking()
59 buf[2] = mc_cdev->subled_info[0].brightness; in omnia_led_brightness_set_blocking()
60 buf[3] = mc_cdev->subled_info[1].brightness; in omnia_led_brightness_set_blocking()
61 buf[4] = mc_cdev->subled_info[2].brightness; in omnia_led_brightness_set_blocking()
63 state = CMD_LED_STATE_LED(led->reg); in omnia_led_brightness_set_blocking()
64 if (buf[2] || buf[3] || buf[4]) in omnia_led_brightness_set_blocking()
67 ret = i2c_smbus_write_byte_data(leds->client, CMD_LED_STATE, state); in omnia_led_brightness_set_blocking()
69 ret = i2c_master_send(leds->client, buf, 5); in omnia_led_brightness_set_blocking()
71 mutex_unlock(&leds->lock); in omnia_led_brightness_set_blocking()
76 static int omnia_led_register(struct i2c_client *client, struct omnia_led *led, in omnia_led_register() argument
80 struct device *dev = &client->dev; in omnia_led_register()
84 ret = of_property_read_u32(np, "reg", &led->reg); in omnia_led_register()
85 if (ret || led->reg >= OMNIA_BOARD_LEDS) { in omnia_led_register()
88 np, OMNIA_BOARD_LEDS - 1); in omnia_led_register()
100 led->subled_info[0].color_index = LED_COLOR_ID_RED; in omnia_led_register()
101 led->subled_info[0].channel = 0; in omnia_led_register()
102 led->subled_info[1].color_index = LED_COLOR_ID_GREEN; in omnia_led_register()
103 led->subled_info[1].channel = 1; in omnia_led_register()
104 led->subled_info[2].color_index = LED_COLOR_ID_BLUE; in omnia_led_register()
105 led->subled_info[2].channel = 2; in omnia_led_register()
107 led->mc_cdev.subled_info = led->subled_info; in omnia_led_register()
108 led->mc_cdev.num_colors = OMNIA_LED_NUM_CHANNELS; in omnia_led_register()
110 init_data.fwnode = &np->fwnode; in omnia_led_register()
112 cdev = &led->mc_cdev.led_cdev; in omnia_led_register()
113 cdev->max_brightness = 255; in omnia_led_register()
114 cdev->brightness_set_blocking = omnia_led_brightness_set_blocking; in omnia_led_register()
116 /* put the LED into software mode */ in omnia_led_register()
118 CMD_LED_MODE_LED(led->reg) | in omnia_led_register()
121 dev_err(dev, "Cannot set LED %pOF to software mode: %i\n", np, in omnia_led_register()
126 /* disable the LED */ in omnia_led_register()
128 CMD_LED_STATE_LED(led->reg)); in omnia_led_register()
130 dev_err(dev, "Cannot set LED %pOF brightness: %i\n", np, ret); in omnia_led_register()
134 ret = devm_led_classdev_multicolor_register_ext(dev, &led->mc_cdev, in omnia_led_register()
137 dev_err(dev, "Cannot register LED %pOF: %i\n", np, ret); in omnia_led_register()
152 * file lives in the device directory of the LED controller, not an individual
153 * LED, so it should not confuse users.
162 mutex_lock(&leds->lock); in brightness_show()
164 mutex_unlock(&leds->lock); in brightness_show()
181 return -EINVAL; in brightness_store()
184 return -EINVAL; in brightness_store()
186 mutex_lock(&leds->lock); in brightness_store()
189 mutex_unlock(&leds->lock); in brightness_store()
207 struct device *dev = &client->dev; in omnia_leds_probe()
210 struct omnia_led *led; in omnia_leds_probe() local
216 return -ENODEV; in omnia_leds_probe()
219 return -EINVAL; in omnia_leds_probe()
224 return -ENOMEM; in omnia_leds_probe()
226 leds->client = client; in omnia_leds_probe()
229 mutex_init(&leds->lock); in omnia_leds_probe()
231 led = &leds->leds[0]; in omnia_leds_probe()
233 ret = omnia_led_register(client, led, child); in omnia_leds_probe()
239 led += ret; in omnia_leds_probe()
259 buf[2] = 255; in omnia_leds_remove()
269 { .compatible = "cznic,turris-omnia-leds", },
284 .name = "leds-turris-omnia",