Lines Matching defs:g15

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