Lines Matching +full:led +full:- +full:7
2 * Simple USB RGB LED driver
5 * Based on drivers/hid/hid-thingm.c and
19 #include "hid-ids.h"
35 /* R+2G+4B -> riso kagaku color index */
43 [7] = 7 /* white */
120 mutex_lock(&ldev->lock); in hidled_send()
126 memcpy(ldev->buf, buf, ldev->config->report_size); in hidled_send()
128 if (ldev->config->report_type == RAW_REQUEST) in hidled_send()
129 ret = hid_hw_raw_request(ldev->hdev, buf[0], ldev->buf, in hidled_send()
130 ldev->config->report_size, in hidled_send()
133 else if (ldev->config->report_type == OUTPUT_REPORT) in hidled_send()
134 ret = hid_hw_output_report(ldev->hdev, ldev->buf, in hidled_send()
135 ldev->config->report_size); in hidled_send()
137 ret = -EINVAL; in hidled_send()
139 mutex_unlock(&ldev->lock); in hidled_send()
144 return ret == ldev->config->report_size ? 0 : -EMSGSIZE; in hidled_send()
152 if (ldev->config->report_type != RAW_REQUEST) in hidled_recv()
153 return -EINVAL; in hidled_recv()
155 mutex_lock(&ldev->lock); in hidled_recv()
157 memcpy(ldev->buf, buf, ldev->config->report_size); in hidled_recv()
159 ret = hid_hw_raw_request(ldev->hdev, buf[0], ldev->buf, in hidled_recv()
160 ldev->config->report_size, in hidled_recv()
166 ret = hid_hw_raw_request(ldev->hdev, buf[0], ldev->buf, in hidled_recv()
167 ldev->config->report_size, in hidled_recv()
171 memcpy(buf, ldev->buf, ldev->config->report_size); in hidled_recv()
173 mutex_unlock(&ldev->lock); in hidled_recv()
182 r = rgb->red.cdev.brightness; in riso_kagaku_index()
183 g = rgb->green.cdev.brightness; in riso_kagaku_index()
184 b = rgb->blue.cdev.brightness; in riso_kagaku_index()
194 struct hidled_led *led = to_hidled_led(cdev); in riso_kagaku_write() local
195 struct hidled_rgb *rgb = led->rgb; in riso_kagaku_write()
200 return hidled_send(rgb->ldev, buf); in riso_kagaku_write()
205 struct hidled_led *led = to_hidled_led(cdev); in dream_cheeky_write() local
206 struct hidled_rgb *rgb = led->rgb; in dream_cheeky_write()
209 buf[1] = rgb->red.cdev.brightness; in dream_cheeky_write()
210 buf[2] = rgb->green.cdev.brightness; in dream_cheeky_write()
211 buf[3] = rgb->blue.cdev.brightness; in dream_cheeky_write()
212 buf[7] = 0x1a; in dream_cheeky_write()
215 return hidled_send(rgb->ldev, buf); in dream_cheeky_write()
226 buf[7] = 0x1a; in dream_cheeky_init()
235 struct hidled_led *led = to_hidled_led(cdev); in _thingm_write() local
238 buf[2] = led->rgb->red.cdev.brightness; in _thingm_write()
239 buf[3] = led->rgb->green.cdev.brightness; in _thingm_write()
240 buf[4] = led->rgb->blue.cdev.brightness; in _thingm_write()
241 buf[7] = led->rgb->num + offset; in _thingm_write()
243 return hidled_send(led->rgb->ldev, buf); in _thingm_write()
277 ldev->config = &hidled_config_thingm_v1; in thingm_init()
282 static inline int delcom_get_lednum(const struct hidled_led *led) in delcom_get_lednum() argument
284 if (led == &led->rgb->red) in delcom_get_lednum()
286 else if (led == &led->rgb->green) in delcom_get_lednum()
292 static int delcom_enable_led(struct hidled_led *led) in delcom_enable_led() argument
296 dp.tx.data_lsb = 1 << delcom_get_lednum(led); in delcom_enable_led()
299 return hidled_send(led->rgb->ldev, dp.data); in delcom_enable_led()
302 static int delcom_set_pwm(struct hidled_led *led) in delcom_set_pwm() argument
306 dp.tx.data_lsb = delcom_get_lednum(led); in delcom_set_pwm()
307 dp.tx.data_msb = led->cdev.brightness; in delcom_set_pwm()
309 return hidled_send(led->rgb->ldev, dp.data); in delcom_set_pwm()
314 struct hidled_led *led = to_hidled_led(cdev); in delcom_write() local
318 * enable LED in delcom_write()
322 ret = delcom_enable_led(led); in delcom_write()
326 return delcom_set_pwm(led); in delcom_write()
341 return le16_to_cpu(dp.fw.family_code) == 2 ? 0 : -ENODEV; in delcom_init()
346 struct hidled_led *led = to_hidled_led(cdev); in luxafor_write() local
349 buf[2] = led->rgb->num + 1; in luxafor_write()
350 buf[3] = led->rgb->red.cdev.brightness; in luxafor_write()
351 buf[4] = led->rgb->green.cdev.brightness; in luxafor_write()
352 buf[5] = led->rgb->blue.cdev.brightness; in luxafor_write()
354 return hidled_send(led->rgb->ldev, buf); in luxafor_write()
413 static int hidled_init_led(struct hidled_led *led, const char *color_name, in hidled_init_led() argument
416 const struct hidled_config *config = rgb->ldev->config; in hidled_init_led()
418 if (config->num_leds > 1) in hidled_init_led()
419 snprintf(led->name, sizeof(led->name), "%s%u:%s:led%u", in hidled_init_led()
420 config->short_name, minor, color_name, rgb->num); in hidled_init_led()
422 snprintf(led->name, sizeof(led->name), "%s%u:%s", in hidled_init_led()
423 config->short_name, minor, color_name); in hidled_init_led()
424 led->cdev.name = led->name; in hidled_init_led()
425 led->cdev.max_brightness = config->max_brightness; in hidled_init_led()
426 led->cdev.brightness_set_blocking = config->write; in hidled_init_led()
427 led->cdev.flags = LED_HW_PLUGGABLE; in hidled_init_led()
428 led->rgb = rgb; in hidled_init_led()
430 return devm_led_classdev_register(&rgb->ldev->hdev->dev, &led->cdev); in hidled_init_led()
438 ret = hidled_init_led(&rgb->red, "red", rgb, minor); in hidled_init_rgb()
443 ret = hidled_init_led(&rgb->green, "green", rgb, minor); in hidled_init_rgb()
448 return hidled_init_led(&rgb->blue, "blue", rgb, minor); in hidled_init_rgb()
457 ldev = devm_kzalloc(&hdev->dev, sizeof(*ldev), GFP_KERNEL); in hidled_probe()
459 return -ENOMEM; in hidled_probe()
461 ldev->buf = devm_kmalloc(&hdev->dev, MAX_REPORT_SIZE, GFP_KERNEL); in hidled_probe()
462 if (!ldev->buf) in hidled_probe()
463 return -ENOMEM; in hidled_probe()
469 ldev->hdev = hdev; in hidled_probe()
470 mutex_init(&ldev->lock); in hidled_probe()
472 for (i = 0; !ldev->config && i < ARRAY_SIZE(hidled_configs); i++) in hidled_probe()
473 if (hidled_configs[i].type == id->driver_data) in hidled_probe()
474 ldev->config = &hidled_configs[i]; in hidled_probe()
476 if (!ldev->config) in hidled_probe()
477 return -EINVAL; in hidled_probe()
479 if (ldev->config->init) { in hidled_probe()
480 ret = ldev->config->init(ldev); in hidled_probe()
485 ldev->rgb = devm_kcalloc(&hdev->dev, ldev->config->num_leds, in hidled_probe()
487 if (!ldev->rgb) in hidled_probe()
488 return -ENOMEM; in hidled_probe()
494 minor = ((struct hidraw *) hdev->hidraw)->minor; in hidled_probe()
496 for (i = 0; i < ldev->config->num_leds; i++) { in hidled_probe()
497 ldev->rgb[i].ldev = ldev; in hidled_probe()
498 ldev->rgb[i].num = i; in hidled_probe()
499 ret = hidled_init_rgb(&ldev->rgb[i], minor); in hidled_probe()
506 hid_info(hdev, "%s initialized\n", ldev->config->name); in hidled_probe()
529 .name = "hid-led",
538 MODULE_DESCRIPTION("Simple USB RGB LED driver");