Lines Matching refs:g15
66 static int lg_g15_update_led_brightness(struct lg_g15_data *g15) in lg_g15_update_led_brightness() argument
70 ret = hid_hw_raw_request(g15->hdev, LG_G15_FEATURE_REPORT, in lg_g15_update_led_brightness()
71 g15->transfer_buf, 4, in lg_g15_update_led_brightness()
74 hid_err(g15->hdev, "Error getting LED brightness: %d\n", ret); in lg_g15_update_led_brightness()
78 g15->leds[LG_G15_KBD_BRIGHTNESS].brightness = g15->transfer_buf[1]; in lg_g15_update_led_brightness()
79 g15->leds[LG_G15_LCD_BRIGHTNESS].brightness = g15->transfer_buf[2]; in lg_g15_update_led_brightness()
81 g15->leds[LG_G15_MACRO_PRESET1].brightness = in lg_g15_update_led_brightness()
82 !(g15->transfer_buf[3] & 0x01); in lg_g15_update_led_brightness()
83 g15->leds[LG_G15_MACRO_PRESET2].brightness = in lg_g15_update_led_brightness()
84 !(g15->transfer_buf[3] & 0x02); in lg_g15_update_led_brightness()
85 g15->leds[LG_G15_MACRO_PRESET3].brightness = in lg_g15_update_led_brightness()
86 !(g15->transfer_buf[3] & 0x04); in lg_g15_update_led_brightness()
87 g15->leds[LG_G15_MACRO_RECORD].brightness = in lg_g15_update_led_brightness()
88 !(g15->transfer_buf[3] & 0x08); in lg_g15_update_led_brightness()
97 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in lg_g15_led_get() local
100 mutex_lock(&g15->mutex); in lg_g15_led_get()
101 lg_g15_update_led_brightness(g15); in lg_g15_led_get()
102 brightness = g15->leds[g15_led->led].brightness; in lg_g15_led_get()
103 mutex_unlock(&g15->mutex); in lg_g15_led_get()
113 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in lg_g15_led_set() local
121 mutex_lock(&g15->mutex); in lg_g15_led_set()
123 g15->transfer_buf[0] = LG_G15_FEATURE_REPORT; in lg_g15_led_set()
124 g15->transfer_buf[3] = 0; in lg_g15_led_set()
127 g15->transfer_buf[1] = g15_led->led + 1; in lg_g15_led_set()
128 g15->transfer_buf[2] = brightness << (g15_led->led * 4); in lg_g15_led_set()
134 val = g15->leds[i].brightness; in lg_g15_led_set()
140 g15->transfer_buf[1] = 0x04; in lg_g15_led_set()
141 g15->transfer_buf[2] = ~mask; in lg_g15_led_set()
144 ret = hid_hw_raw_request(g15->hdev, LG_G15_FEATURE_REPORT, in lg_g15_led_set()
145 g15->transfer_buf, 4, in lg_g15_led_set()
152 hid_err(g15->hdev, "Error setting LED brightness: %d\n", ret); in lg_g15_led_set()
156 mutex_unlock(&g15->mutex); in lg_g15_led_set()
163 struct lg_g15_data *g15 = container_of(work, struct lg_g15_data, work); in lg_g15_leds_changed_work() local
168 mutex_lock(&g15->mutex); in lg_g15_leds_changed_work()
170 old_brightness[i] = g15->leds[i].brightness; in lg_g15_leds_changed_work()
172 ret = lg_g15_update_led_brightness(g15); in lg_g15_leds_changed_work()
175 brightness[i] = g15->leds[i].brightness; in lg_g15_leds_changed_work()
176 mutex_unlock(&g15->mutex); in lg_g15_leds_changed_work()
185 led_classdev_notify_brightness_hw_changed(&g15->leds[i].cdev, in lg_g15_leds_changed_work()
192 static int lg_g510_get_initial_led_brightness(struct lg_g15_data *g15, int i) in lg_g510_get_initial_led_brightness() argument
196 ret = hid_hw_raw_request(g15->hdev, LG_G510_FEATURE_BACKLIGHT_RGB + i, in lg_g510_get_initial_led_brightness()
197 g15->transfer_buf, 4, in lg_g510_get_initial_led_brightness()
200 hid_err(g15->hdev, "Error getting LED brightness: %d\n", ret); in lg_g510_get_initial_led_brightness()
204 high = max3(g15->transfer_buf[1], g15->transfer_buf[2], in lg_g510_get_initial_led_brightness()
205 g15->transfer_buf[3]); in lg_g510_get_initial_led_brightness()
208 g15->leds[i].red = in lg_g510_get_initial_led_brightness()
209 DIV_ROUND_CLOSEST(g15->transfer_buf[1] * 255, high); in lg_g510_get_initial_led_brightness()
210 g15->leds[i].green = in lg_g510_get_initial_led_brightness()
211 DIV_ROUND_CLOSEST(g15->transfer_buf[2] * 255, high); in lg_g510_get_initial_led_brightness()
212 g15->leds[i].blue = in lg_g510_get_initial_led_brightness()
213 DIV_ROUND_CLOSEST(g15->transfer_buf[3] * 255, high); in lg_g510_get_initial_led_brightness()
214 g15->leds[i].brightness = high; in lg_g510_get_initial_led_brightness()
216 g15->leds[i].red = 255; in lg_g510_get_initial_led_brightness()
217 g15->leds[i].green = 255; in lg_g510_get_initial_led_brightness()
218 g15->leds[i].blue = 255; in lg_g510_get_initial_led_brightness()
219 g15->leds[i].brightness = 0; in lg_g510_get_initial_led_brightness()
226 static int lg_g510_kbd_led_write(struct lg_g15_data *g15, in lg_g510_kbd_led_write() argument
232 g15->transfer_buf[0] = 5 + g15_led->led; in lg_g510_kbd_led_write()
233 g15->transfer_buf[1] = in lg_g510_kbd_led_write()
235 g15->transfer_buf[2] = in lg_g510_kbd_led_write()
237 g15->transfer_buf[3] = in lg_g510_kbd_led_write()
240 ret = hid_hw_raw_request(g15->hdev, in lg_g510_kbd_led_write()
242 g15->transfer_buf, 4, in lg_g510_kbd_led_write()
249 hid_err(g15->hdev, "Error setting LED brightness: %d\n", ret); in lg_g510_kbd_led_write()
261 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in lg_g510_kbd_led_set() local
268 mutex_lock(&g15->mutex); in lg_g510_kbd_led_set()
269 ret = lg_g510_kbd_led_write(g15, g15_led, brightness); in lg_g510_kbd_led_set()
270 mutex_unlock(&g15->mutex); in lg_g510_kbd_led_set()
289 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in color_store() local
303 mutex_lock(&g15->mutex); in color_store()
307 ret = lg_g510_kbd_led_write(g15, g15_led, g15_led->brightness); in color_store()
308 mutex_unlock(&g15->mutex); in color_store()
319 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in color_show() local
322 mutex_lock(&g15->mutex); in color_show()
325 mutex_unlock(&g15->mutex); in color_show()
348 struct lg_g15_data *g15 = container_of(work, struct lg_g15_data, work); in lg_g510_leds_sync_work() local
350 mutex_lock(&g15->mutex); in lg_g510_leds_sync_work()
351 lg_g510_kbd_led_write(g15, &g15->leds[LG_G15_KBD_BRIGHTNESS], in lg_g510_leds_sync_work()
352 g15->leds[LG_G15_KBD_BRIGHTNESS].brightness); in lg_g510_leds_sync_work()
353 mutex_unlock(&g15->mutex); in lg_g510_leds_sync_work()
356 static int lg_g510_update_mkey_led_brightness(struct lg_g15_data *g15) in lg_g510_update_mkey_led_brightness() argument
360 ret = hid_hw_raw_request(g15->hdev, LG_G510_FEATURE_M_KEYS_LEDS, in lg_g510_update_mkey_led_brightness()
361 g15->transfer_buf, 2, in lg_g510_update_mkey_led_brightness()
364 hid_err(g15->hdev, "Error getting LED brightness: %d\n", ret); in lg_g510_update_mkey_led_brightness()
368 g15->leds[LG_G15_MACRO_PRESET1].brightness = in lg_g510_update_mkey_led_brightness()
369 !!(g15->transfer_buf[1] & 0x80); in lg_g510_update_mkey_led_brightness()
370 g15->leds[LG_G15_MACRO_PRESET2].brightness = in lg_g510_update_mkey_led_brightness()
371 !!(g15->transfer_buf[1] & 0x40); in lg_g510_update_mkey_led_brightness()
372 g15->leds[LG_G15_MACRO_PRESET3].brightness = in lg_g510_update_mkey_led_brightness()
373 !!(g15->transfer_buf[1] & 0x20); in lg_g510_update_mkey_led_brightness()
374 g15->leds[LG_G15_MACRO_RECORD].brightness = in lg_g510_update_mkey_led_brightness()
375 !!(g15->transfer_buf[1] & 0x10); in lg_g510_update_mkey_led_brightness()
384 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in lg_g510_mkey_led_get() local
387 mutex_lock(&g15->mutex); in lg_g510_mkey_led_get()
388 lg_g510_update_mkey_led_brightness(g15); in lg_g510_mkey_led_get()
389 brightness = g15->leds[g15_led->led].brightness; in lg_g510_mkey_led_get()
390 mutex_unlock(&g15->mutex); in lg_g510_mkey_led_get()
400 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in lg_g510_mkey_led_set() local
408 mutex_lock(&g15->mutex); in lg_g510_mkey_led_set()
414 val = g15->leds[i].brightness; in lg_g510_mkey_led_set()
420 g15->transfer_buf[0] = LG_G510_FEATURE_M_KEYS_LEDS; in lg_g510_mkey_led_set()
421 g15->transfer_buf[1] = mask; in lg_g510_mkey_led_set()
423 ret = hid_hw_raw_request(g15->hdev, LG_G510_FEATURE_M_KEYS_LEDS, in lg_g510_mkey_led_set()
424 g15->transfer_buf, 2, in lg_g510_mkey_led_set()
431 hid_err(g15->hdev, "Error setting LED brightness: %d\n", ret); in lg_g510_mkey_led_set()
435 mutex_unlock(&g15->mutex); in lg_g510_mkey_led_set()
441 static int lg_g15_get_initial_led_brightness(struct lg_g15_data *g15) in lg_g15_get_initial_led_brightness() argument
445 switch (g15->model) { in lg_g15_get_initial_led_brightness()
448 return lg_g15_update_led_brightness(g15); in lg_g15_get_initial_led_brightness()
451 ret = lg_g510_get_initial_led_brightness(g15, 0); in lg_g15_get_initial_led_brightness()
455 ret = lg_g510_get_initial_led_brightness(g15, 1); in lg_g15_get_initial_led_brightness()
459 return lg_g510_update_mkey_led_brightness(g15); in lg_g15_get_initial_led_brightness()
467 static int lg_g15_event(struct lg_g15_data *g15, u8 *data, int size) in lg_g15_event() argument
474 input_report_key(g15->input, KEY_MACRO1 + i, val); in lg_g15_event()
479 input_report_key(g15->input, KEY_MACRO7 + i, val); in lg_g15_event()
484 input_report_key(g15->input, KEY_MACRO13 + i, val); in lg_g15_event()
487 input_report_key(g15->input, KEY_MACRO18, data[8] & 0x40); in lg_g15_event()
492 input_report_key(g15->input, KEY_MACRO_PRESET1 + i, val); in lg_g15_event()
495 input_report_key(g15->input, KEY_MACRO_RECORD_START, data[7] & 0x40); in lg_g15_event()
498 input_report_key(g15->input, KEY_KBD_LCD_MENU1, data[8] & 0x80); in lg_g15_event()
502 input_report_key(g15->input, KEY_KBD_LCD_MENU2 + i, val); in lg_g15_event()
507 schedule_work(&g15->work); in lg_g15_event()
509 input_sync(g15->input); in lg_g15_event()
513 static int lg_g15_v2_event(struct lg_g15_data *g15, u8 *data, int size) in lg_g15_v2_event() argument
520 input_report_key(g15->input, KEY_MACRO1 + i, val); in lg_g15_v2_event()
524 input_report_key(g15->input, KEY_MACRO_PRESET1, data[1] & 0x40); in lg_g15_v2_event()
525 input_report_key(g15->input, KEY_MACRO_PRESET2, data[1] & 0x80); in lg_g15_v2_event()
526 input_report_key(g15->input, KEY_MACRO_PRESET3, data[2] & 0x20); in lg_g15_v2_event()
527 input_report_key(g15->input, KEY_MACRO_RECORD_START, data[2] & 0x40); in lg_g15_v2_event()
530 input_report_key(g15->input, KEY_KBD_LCD_MENU1, data[2] & 0x80); in lg_g15_v2_event()
534 input_report_key(g15->input, KEY_KBD_LCD_MENU2 + i, val); in lg_g15_v2_event()
539 schedule_work(&g15->work); in lg_g15_v2_event()
541 input_sync(g15->input); in lg_g15_v2_event()
545 static int lg_g510_event(struct lg_g15_data *g15, u8 *data, int size) in lg_g510_event() argument
553 input_report_key(g15->input, KEY_MACRO1 + i, val); in lg_g510_event()
558 if (game_mode_enabled != g15->game_mode_enabled) { in lg_g510_event()
560 hid_info(g15->hdev, "Game Mode enabled, Windows (super) key is disabled\n"); in lg_g510_event()
562 hid_info(g15->hdev, "Game Mode disabled\n"); in lg_g510_event()
563 g15->game_mode_enabled = game_mode_enabled; in lg_g510_event()
569 input_report_key(g15->input, KEY_MACRO_PRESET1 + i, val); in lg_g510_event()
572 input_report_key(g15->input, KEY_MACRO_RECORD_START, data[3] & 0x80); in lg_g510_event()
577 input_report_key(g15->input, KEY_KBD_LCD_MENU1 + i, val); in lg_g510_event()
581 input_report_key(g15->input, KEY_MUTE, data[4] & 0x20); in lg_g510_event()
583 input_report_key(g15->input, KEY_F20, data[4] & 0x40); in lg_g510_event()
585 input_sync(g15->input); in lg_g510_event()
589 static int lg_g510_leds_event(struct lg_g15_data *g15, u8 *data, int size) in lg_g510_leds_event() argument
600 schedule_work(&g15->work); in lg_g510_leds_event()
608 struct lg_g15_data *g15 = hid_get_drvdata(hdev); in lg_g15_raw_event() local
610 if (!g15) in lg_g15_raw_event()
613 switch (g15->model) { in lg_g15_raw_event()
616 return lg_g15_event(g15, data, size); in lg_g15_raw_event()
620 return lg_g15_v2_event(g15, data, size); in lg_g15_raw_event()
625 return lg_g510_event(g15, data, size); in lg_g15_raw_event()
627 return lg_g510_leds_event(g15, data, size); in lg_g15_raw_event()
648 static int lg_g15_register_led(struct lg_g15_data *g15, int i) in lg_g15_register_led() argument
659 g15->leds[i].led = i; in lg_g15_register_led()
660 g15->leds[i].cdev.name = led_names[i]; in lg_g15_register_led()
662 switch (g15->model) { in lg_g15_register_led()
665 g15->leds[i].cdev.brightness_set_blocking = lg_g15_led_set; in lg_g15_register_led()
666 g15->leds[i].cdev.brightness_get = lg_g15_led_get; in lg_g15_register_led()
668 g15->leds[i].cdev.flags = LED_BRIGHT_HW_CHANGED; in lg_g15_register_led()
669 g15->leds[i].cdev.max_brightness = 2; in lg_g15_register_led()
671 g15->leds[i].cdev.max_brightness = 1; in lg_g15_register_led()
682 g15->leds[i].cdev.name = "g15::power_on_backlight_val"; in lg_g15_register_led()
685 g15->leds[i].cdev.brightness_set_blocking = in lg_g15_register_led()
687 g15->leds[i].cdev.brightness_get = in lg_g15_register_led()
689 g15->leds[i].cdev.max_brightness = 255; in lg_g15_register_led()
690 g15->leds[i].cdev.groups = lg_g510_kbd_led_groups; in lg_g15_register_led()
693 g15->leds[i].cdev.brightness_set_blocking = in lg_g15_register_led()
695 g15->leds[i].cdev.brightness_get = in lg_g15_register_led()
697 g15->leds[i].cdev.max_brightness = 1; in lg_g15_register_led()
702 return devm_led_classdev_register(&g15->hdev->dev, &g15->leds[i].cdev); in lg_g15_register_led()
712 struct lg_g15_data *g15; in lg_g15_probe() local
735 g15 = devm_kzalloc(&hdev->dev, sizeof(*g15), GFP_KERNEL); in lg_g15_probe()
736 if (!g15) in lg_g15_probe()
739 mutex_init(&g15->mutex); in lg_g15_probe()
745 g15->hdev = hdev; in lg_g15_probe()
746 g15->model = id->driver_data; in lg_g15_probe()
747 hid_set_drvdata(hdev, (void *)g15); in lg_g15_probe()
749 switch (g15->model) { in lg_g15_probe()
751 INIT_WORK(&g15->work, lg_g15_leds_changed_work); in lg_g15_probe()
763 INIT_WORK(&g15->work, lg_g15_leds_changed_work); in lg_g15_probe()
770 INIT_WORK(&g15->work, lg_g510_leds_sync_work); in lg_g15_probe()
783 g15->transfer_buf[0] = gkeys_settings_output_report; in lg_g15_probe()
784 memset(g15->transfer_buf + 1, 0, gkeys); in lg_g15_probe()
792 ret = hid_hw_output_report(hdev, g15->transfer_buf, gkeys + 1); in lg_g15_probe()
797 g15->transfer_buf[0] = gkeys_settings_feature_report; in lg_g15_probe()
798 memset(g15->transfer_buf + 1, 0, gkeys); in lg_g15_probe()
799 ret = hid_hw_raw_request(g15->hdev, in lg_g15_probe()
801 g15->transfer_buf, gkeys + 1, in lg_g15_probe()
813 ret = lg_g15_get_initial_led_brightness(g15); in lg_g15_probe()
847 if (g15->model == LG_G510) { in lg_g15_probe()
853 g15->input = input; in lg_g15_probe()
862 ret = lg_g15_register_led(g15, i); in lg_g15_probe()