Lines Matching refs:g15
67 static int lg_g15_update_led_brightness(struct lg_g15_data *g15) in lg_g15_update_led_brightness() argument
71 ret = hid_hw_raw_request(g15->hdev, LG_G15_FEATURE_REPORT, in lg_g15_update_led_brightness()
72 g15->transfer_buf, 4, in lg_g15_update_led_brightness()
75 hid_err(g15->hdev, "Error getting LED brightness: %d\n", ret); in lg_g15_update_led_brightness()
79 g15->leds[LG_G15_KBD_BRIGHTNESS].brightness = g15->transfer_buf[1]; in lg_g15_update_led_brightness()
80 g15->leds[LG_G15_LCD_BRIGHTNESS].brightness = g15->transfer_buf[2]; in lg_g15_update_led_brightness()
82 g15->leds[LG_G15_MACRO_PRESET1].brightness = in lg_g15_update_led_brightness()
83 !(g15->transfer_buf[3] & 0x01); in lg_g15_update_led_brightness()
84 g15->leds[LG_G15_MACRO_PRESET2].brightness = in lg_g15_update_led_brightness()
85 !(g15->transfer_buf[3] & 0x02); in lg_g15_update_led_brightness()
86 g15->leds[LG_G15_MACRO_PRESET3].brightness = in lg_g15_update_led_brightness()
87 !(g15->transfer_buf[3] & 0x04); in lg_g15_update_led_brightness()
88 g15->leds[LG_G15_MACRO_RECORD].brightness = in lg_g15_update_led_brightness()
89 !(g15->transfer_buf[3] & 0x08); in lg_g15_update_led_brightness()
98 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in lg_g15_led_get() local
101 mutex_lock(&g15->mutex); in lg_g15_led_get()
102 lg_g15_update_led_brightness(g15); in lg_g15_led_get()
103 brightness = g15->leds[g15_led->led].brightness; in lg_g15_led_get()
104 mutex_unlock(&g15->mutex); in lg_g15_led_get()
114 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in lg_g15_led_set() local
122 mutex_lock(&g15->mutex); in lg_g15_led_set()
124 g15->transfer_buf[0] = LG_G15_FEATURE_REPORT; in lg_g15_led_set()
125 g15->transfer_buf[3] = 0; in lg_g15_led_set()
128 g15->transfer_buf[1] = g15_led->led + 1; in lg_g15_led_set()
129 g15->transfer_buf[2] = brightness << (g15_led->led * 4); in lg_g15_led_set()
135 val = g15->leds[i].brightness; in lg_g15_led_set()
141 g15->transfer_buf[1] = 0x04; in lg_g15_led_set()
142 g15->transfer_buf[2] = ~mask; in lg_g15_led_set()
145 ret = hid_hw_raw_request(g15->hdev, LG_G15_FEATURE_REPORT, in lg_g15_led_set()
146 g15->transfer_buf, 4, in lg_g15_led_set()
153 hid_err(g15->hdev, "Error setting LED brightness: %d\n", ret); in lg_g15_led_set()
157 mutex_unlock(&g15->mutex); in lg_g15_led_set()
164 struct lg_g15_data *g15 = container_of(work, struct lg_g15_data, work); in lg_g15_leds_changed_work() local
169 mutex_lock(&g15->mutex); in lg_g15_leds_changed_work()
171 old_brightness[i] = g15->leds[i].brightness; in lg_g15_leds_changed_work()
173 ret = lg_g15_update_led_brightness(g15); in lg_g15_leds_changed_work()
176 brightness[i] = g15->leds[i].brightness; in lg_g15_leds_changed_work()
177 mutex_unlock(&g15->mutex); in lg_g15_leds_changed_work()
186 led_classdev_notify_brightness_hw_changed(&g15->leds[i].cdev, in lg_g15_leds_changed_work()
193 static int lg_g510_get_initial_led_brightness(struct lg_g15_data *g15, int i) in lg_g510_get_initial_led_brightness() argument
197 ret = hid_hw_raw_request(g15->hdev, LG_G510_FEATURE_BACKLIGHT_RGB + i, in lg_g510_get_initial_led_brightness()
198 g15->transfer_buf, 4, in lg_g510_get_initial_led_brightness()
201 hid_err(g15->hdev, "Error getting LED brightness: %d\n", ret); in lg_g510_get_initial_led_brightness()
205 high = max3(g15->transfer_buf[1], g15->transfer_buf[2], in lg_g510_get_initial_led_brightness()
206 g15->transfer_buf[3]); in lg_g510_get_initial_led_brightness()
209 g15->leds[i].red = in lg_g510_get_initial_led_brightness()
210 DIV_ROUND_CLOSEST(g15->transfer_buf[1] * 255, high); in lg_g510_get_initial_led_brightness()
211 g15->leds[i].green = in lg_g510_get_initial_led_brightness()
212 DIV_ROUND_CLOSEST(g15->transfer_buf[2] * 255, high); in lg_g510_get_initial_led_brightness()
213 g15->leds[i].blue = in lg_g510_get_initial_led_brightness()
214 DIV_ROUND_CLOSEST(g15->transfer_buf[3] * 255, high); in lg_g510_get_initial_led_brightness()
215 g15->leds[i].brightness = high; in lg_g510_get_initial_led_brightness()
217 g15->leds[i].red = 255; in lg_g510_get_initial_led_brightness()
218 g15->leds[i].green = 255; in lg_g510_get_initial_led_brightness()
219 g15->leds[i].blue = 255; in lg_g510_get_initial_led_brightness()
220 g15->leds[i].brightness = 0; in lg_g510_get_initial_led_brightness()
227 static int lg_g510_kbd_led_write(struct lg_g15_data *g15, in lg_g510_kbd_led_write() argument
233 g15->transfer_buf[0] = 5 + g15_led->led; in lg_g510_kbd_led_write()
234 g15->transfer_buf[1] = in lg_g510_kbd_led_write()
236 g15->transfer_buf[2] = in lg_g510_kbd_led_write()
238 g15->transfer_buf[3] = in lg_g510_kbd_led_write()
241 ret = hid_hw_raw_request(g15->hdev, in lg_g510_kbd_led_write()
243 g15->transfer_buf, 4, in lg_g510_kbd_led_write()
250 hid_err(g15->hdev, "Error setting LED brightness: %d\n", ret); in lg_g510_kbd_led_write()
262 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in lg_g510_kbd_led_set() local
269 mutex_lock(&g15->mutex); in lg_g510_kbd_led_set()
270 ret = lg_g510_kbd_led_write(g15, g15_led, brightness); in lg_g510_kbd_led_set()
271 mutex_unlock(&g15->mutex); in lg_g510_kbd_led_set()
290 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in color_store() local
304 mutex_lock(&g15->mutex); in color_store()
308 ret = lg_g510_kbd_led_write(g15, g15_led, g15_led->brightness); in color_store()
309 mutex_unlock(&g15->mutex); in color_store()
320 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in color_show() local
323 mutex_lock(&g15->mutex); in color_show()
326 mutex_unlock(&g15->mutex); in color_show()
349 struct lg_g15_data *g15 = container_of(work, struct lg_g15_data, work); in lg_g510_leds_sync_work() local
351 mutex_lock(&g15->mutex); in lg_g510_leds_sync_work()
352 lg_g510_kbd_led_write(g15, &g15->leds[LG_G15_KBD_BRIGHTNESS], in lg_g510_leds_sync_work()
353 g15->leds[LG_G15_KBD_BRIGHTNESS].brightness); in lg_g510_leds_sync_work()
354 mutex_unlock(&g15->mutex); in lg_g510_leds_sync_work()
357 static int lg_g510_update_mkey_led_brightness(struct lg_g15_data *g15) in lg_g510_update_mkey_led_brightness() argument
361 ret = hid_hw_raw_request(g15->hdev, LG_G510_FEATURE_M_KEYS_LEDS, in lg_g510_update_mkey_led_brightness()
362 g15->transfer_buf, 2, in lg_g510_update_mkey_led_brightness()
365 hid_err(g15->hdev, "Error getting LED brightness: %d\n", ret); in lg_g510_update_mkey_led_brightness()
369 g15->leds[LG_G15_MACRO_PRESET1].brightness = in lg_g510_update_mkey_led_brightness()
370 !!(g15->transfer_buf[1] & 0x80); in lg_g510_update_mkey_led_brightness()
371 g15->leds[LG_G15_MACRO_PRESET2].brightness = in lg_g510_update_mkey_led_brightness()
372 !!(g15->transfer_buf[1] & 0x40); in lg_g510_update_mkey_led_brightness()
373 g15->leds[LG_G15_MACRO_PRESET3].brightness = in lg_g510_update_mkey_led_brightness()
374 !!(g15->transfer_buf[1] & 0x20); in lg_g510_update_mkey_led_brightness()
375 g15->leds[LG_G15_MACRO_RECORD].brightness = in lg_g510_update_mkey_led_brightness()
376 !!(g15->transfer_buf[1] & 0x10); in lg_g510_update_mkey_led_brightness()
385 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in lg_g510_mkey_led_get() local
388 mutex_lock(&g15->mutex); in lg_g510_mkey_led_get()
389 lg_g510_update_mkey_led_brightness(g15); in lg_g510_mkey_led_get()
390 brightness = g15->leds[g15_led->led].brightness; in lg_g510_mkey_led_get()
391 mutex_unlock(&g15->mutex); in lg_g510_mkey_led_get()
401 struct lg_g15_data *g15 = dev_get_drvdata(led_cdev->dev->parent); in lg_g510_mkey_led_set() local
409 mutex_lock(&g15->mutex); in lg_g510_mkey_led_set()
415 val = g15->leds[i].brightness; in lg_g510_mkey_led_set()
421 g15->transfer_buf[0] = LG_G510_FEATURE_M_KEYS_LEDS; in lg_g510_mkey_led_set()
422 g15->transfer_buf[1] = mask; in lg_g510_mkey_led_set()
424 ret = hid_hw_raw_request(g15->hdev, LG_G510_FEATURE_M_KEYS_LEDS, in lg_g510_mkey_led_set()
425 g15->transfer_buf, 2, in lg_g510_mkey_led_set()
432 hid_err(g15->hdev, "Error setting LED brightness: %d\n", ret); in lg_g510_mkey_led_set()
436 mutex_unlock(&g15->mutex); in lg_g510_mkey_led_set()
442 static int lg_g15_get_initial_led_brightness(struct lg_g15_data *g15) in lg_g15_get_initial_led_brightness() argument
446 switch (g15->model) { in lg_g15_get_initial_led_brightness()
449 return lg_g15_update_led_brightness(g15); in lg_g15_get_initial_led_brightness()
452 ret = lg_g510_get_initial_led_brightness(g15, 0); in lg_g15_get_initial_led_brightness()
456 ret = lg_g510_get_initial_led_brightness(g15, 1); in lg_g15_get_initial_led_brightness()
460 return lg_g510_update_mkey_led_brightness(g15); in lg_g15_get_initial_led_brightness()
475 static void lg_g15_handle_lcd_menu_keys(struct lg_g15_data *g15, u8 *data) in lg_g15_handle_lcd_menu_keys() argument
480 input_report_key(g15->input, KEY_KBD_LCD_MENU1, data[8] & 0x80); in lg_g15_handle_lcd_menu_keys()
484 input_report_key(g15->input, KEY_KBD_LCD_MENU2 + i, val); in lg_g15_handle_lcd_menu_keys()
488 static int lg_g15_event(struct lg_g15_data *g15, u8 *data) in lg_g15_event() argument
495 input_report_key(g15->input, KEY_MACRO1 + i, val); in lg_g15_event()
500 input_report_key(g15->input, KEY_MACRO7 + i, val); in lg_g15_event()
505 input_report_key(g15->input, KEY_MACRO13 + i, val); in lg_g15_event()
508 input_report_key(g15->input, KEY_MACRO18, data[8] & 0x40); in lg_g15_event()
513 input_report_key(g15->input, KEY_MACRO_PRESET1 + i, val); in lg_g15_event()
516 input_report_key(g15->input, KEY_MACRO_RECORD_START, data[7] & 0x40); in lg_g15_event()
518 lg_g15_handle_lcd_menu_keys(g15, data); in lg_g15_event()
522 schedule_work(&g15->work); in lg_g15_event()
524 input_sync(g15->input); in lg_g15_event()
528 static int lg_g15_v2_event(struct lg_g15_data *g15, u8 *data) in lg_g15_v2_event() argument
535 input_report_key(g15->input, KEY_MACRO1 + i, val); in lg_g15_v2_event()
539 input_report_key(g15->input, KEY_MACRO_PRESET1, data[1] & 0x40); in lg_g15_v2_event()
540 input_report_key(g15->input, KEY_MACRO_PRESET2, data[1] & 0x80); in lg_g15_v2_event()
541 input_report_key(g15->input, KEY_MACRO_PRESET3, data[2] & 0x20); in lg_g15_v2_event()
542 input_report_key(g15->input, KEY_MACRO_RECORD_START, data[2] & 0x40); in lg_g15_v2_event()
545 input_report_key(g15->input, KEY_KBD_LCD_MENU1, data[2] & 0x80); in lg_g15_v2_event()
549 input_report_key(g15->input, KEY_KBD_LCD_MENU2 + i, val); in lg_g15_v2_event()
554 schedule_work(&g15->work); in lg_g15_v2_event()
556 input_sync(g15->input); in lg_g15_v2_event()
560 static int lg_g510_event(struct lg_g15_data *g15, u8 *data) in lg_g510_event() argument
568 input_report_key(g15->input, KEY_MACRO1 + i, val); in lg_g510_event()
573 if (game_mode_enabled != g15->game_mode_enabled) { in lg_g510_event()
575 hid_info(g15->hdev, "Game Mode enabled, Windows (super) key is disabled\n"); in lg_g510_event()
577 hid_info(g15->hdev, "Game Mode disabled\n"); in lg_g510_event()
578 g15->game_mode_enabled = game_mode_enabled; in lg_g510_event()
584 input_report_key(g15->input, KEY_MACRO_PRESET1 + i, val); in lg_g510_event()
587 input_report_key(g15->input, KEY_MACRO_RECORD_START, data[3] & 0x80); in lg_g510_event()
592 input_report_key(g15->input, KEY_KBD_LCD_MENU1 + i, val); in lg_g510_event()
596 input_report_key(g15->input, KEY_MUTE, data[4] & 0x20); in lg_g510_event()
598 input_report_key(g15->input, KEY_F20, data[4] & 0x40); in lg_g510_event()
600 input_sync(g15->input); in lg_g510_event()
604 static int lg_g510_leds_event(struct lg_g15_data *g15, u8 *data) in lg_g510_leds_event() argument
615 schedule_work(&g15->work); in lg_g510_leds_event()
623 struct lg_g15_data *g15 = hid_get_drvdata(hdev); in lg_g15_raw_event() local
625 if (!g15) in lg_g15_raw_event()
628 switch (g15->model) { in lg_g15_raw_event()
631 return lg_g15_event(g15, data); in lg_g15_raw_event()
635 return lg_g15_v2_event(g15, data); in lg_g15_raw_event()
639 lg_g15_handle_lcd_menu_keys(g15, data); in lg_g15_raw_event()
640 input_sync(g15->input); in lg_g15_raw_event()
646 return lg_g510_event(g15, data); in lg_g15_raw_event()
648 return lg_g510_leds_event(g15, data); in lg_g15_raw_event()
669 static int lg_g15_register_led(struct lg_g15_data *g15, int i, const char *name) in lg_g15_register_led() argument
671 g15->leds[i].led = i; in lg_g15_register_led()
672 g15->leds[i].cdev.name = name; in lg_g15_register_led()
674 switch (g15->model) { in lg_g15_register_led()
677 g15->leds[i].cdev.brightness_get = lg_g15_led_get; in lg_g15_register_led()
680 g15->leds[i].cdev.brightness_set_blocking = lg_g15_led_set; in lg_g15_register_led()
682 g15->leds[i].cdev.flags = LED_BRIGHT_HW_CHANGED; in lg_g15_register_led()
683 g15->leds[i].cdev.max_brightness = 2; in lg_g15_register_led()
685 g15->leds[i].cdev.max_brightness = 1; in lg_g15_register_led()
696 g15->leds[i].cdev.name = "g15::power_on_backlight_val"; in lg_g15_register_led()
699 g15->leds[i].cdev.brightness_set_blocking = in lg_g15_register_led()
701 g15->leds[i].cdev.brightness_get = in lg_g15_register_led()
703 g15->leds[i].cdev.max_brightness = 255; in lg_g15_register_led()
704 g15->leds[i].cdev.groups = lg_g510_kbd_led_groups; in lg_g15_register_led()
707 g15->leds[i].cdev.brightness_set_blocking = in lg_g15_register_led()
709 g15->leds[i].cdev.brightness_get = in lg_g15_register_led()
711 g15->leds[i].cdev.max_brightness = 1; in lg_g15_register_led()
716 return devm_led_classdev_register(&g15->hdev->dev, &g15->leds[i].cdev); in lg_g15_register_led()
756 struct lg_g15_data *g15; in lg_g15_probe() local
779 g15 = devm_kzalloc(&hdev->dev, sizeof(*g15), GFP_KERNEL); in lg_g15_probe()
780 if (!g15) in lg_g15_probe()
783 mutex_init(&g15->mutex); in lg_g15_probe()
789 g15->hdev = hdev; in lg_g15_probe()
790 g15->model = id->driver_data; in lg_g15_probe()
791 g15->input = input; in lg_g15_probe()
793 hid_set_drvdata(hdev, (void *)g15); in lg_g15_probe()
795 switch (g15->model) { in lg_g15_probe()
797 INIT_WORK(&g15->work, lg_g15_leds_changed_work); in lg_g15_probe()
809 INIT_WORK(&g15->work, lg_g15_leds_changed_work); in lg_g15_probe()
816 INIT_WORK(&g15->work, lg_g510_leds_sync_work); in lg_g15_probe()
832 g15->transfer_buf[0] = gkeys_settings_output_report; in lg_g15_probe()
833 memset(g15->transfer_buf + 1, 0, gkeys); in lg_g15_probe()
841 ret = hid_hw_output_report(hdev, g15->transfer_buf, gkeys + 1); in lg_g15_probe()
846 g15->transfer_buf[0] = gkeys_settings_feature_report; in lg_g15_probe()
847 memset(g15->transfer_buf + 1, 0, gkeys); in lg_g15_probe()
848 ret = hid_hw_raw_request(g15->hdev, in lg_g15_probe()
850 g15->transfer_buf, gkeys + 1, in lg_g15_probe()
862 ret = lg_g15_get_initial_led_brightness(g15); in lg_g15_probe()
866 if (g15->model == LG_Z10) { in lg_g15_probe()
867 lg_g15_init_input_dev(hdev, g15->input, "Logitech Z-10 LCD Menu Keys"); in lg_g15_probe()
868 ret = input_register_device(g15->input); in lg_g15_probe()
872 ret = lg_g15_register_led(g15, 1, "z-10::lcd_backlight"); in lg_g15_probe()
896 if (g15->model == LG_G510) { in lg_g15_probe()
908 ret = lg_g15_register_led(g15, i, led_names[i]); in lg_g15_probe()