@@ -28,6 +28,7 @@ enum lg_g15_model {
28
28
LG_G15_V2 ,
29
29
LG_G510 ,
30
30
LG_G510_USB_AUDIO ,
31
+ LG_Z10 ,
31
32
};
32
33
33
34
enum lg_g15_led_type {
@@ -457,6 +458,13 @@ static int lg_g15_get_initial_led_brightness(struct lg_g15_data *g15)
457
458
return ret ;
458
459
459
460
return lg_g510_update_mkey_led_brightness (g15 );
461
+ case LG_Z10 :
462
+ /*
463
+ * Getting the LCD backlight brightness is not supported.
464
+ * Reading Feature(2) fails with -EPIPE and this crashes
465
+ * the LCD and touch keys part of the speakers.
466
+ */
467
+ return 0 ;
460
468
}
461
469
return - EINVAL ; /* Never reached */
462
470
}
@@ -626,6 +634,12 @@ static int lg_g15_raw_event(struct hid_device *hdev, struct hid_report *report,
626
634
if (data [0 ] == 0x02 && size == 5 )
627
635
return lg_g15_v2_event (g15 , data );
628
636
break ;
637
+ case LG_Z10 :
638
+ if (data [0 ] == 0x02 && size == 9 ) {
639
+ lg_g15_handle_lcd_menu_keys (g15 , data );
640
+ input_sync (g15 -> input );
641
+ }
642
+ break ;
629
643
case LG_G510 :
630
644
case LG_G510_USB_AUDIO :
631
645
if (data [0 ] == 0x03 && size == 5 )
@@ -660,8 +674,10 @@ static int lg_g15_register_led(struct lg_g15_data *g15, int i, const char *name)
660
674
switch (g15 -> model ) {
661
675
case LG_G15 :
662
676
case LG_G15_V2 :
663
- g15 -> leds [i ].cdev .brightness_set_blocking = lg_g15_led_set ;
664
677
g15 -> leds [i ].cdev .brightness_get = lg_g15_led_get ;
678
+ fallthrough ;
679
+ case LG_Z10 :
680
+ g15 -> leds [i ].cdev .brightness_set_blocking = lg_g15_led_set ;
665
681
if (i < LG_G15_BRIGHTNESS_MAX ) {
666
682
g15 -> leds [i ].cdev .flags = LED_BRIGHT_HW_CHANGED ;
667
683
g15 -> leds [i ].cdev .max_brightness = 2 ;
@@ -802,6 +818,9 @@ static int lg_g15_probe(struct hid_device *hdev, const struct hid_device_id *id)
802
818
gkeys_settings_feature_report = 0x01 ;
803
819
gkeys = 18 ;
804
820
break ;
821
+ case LG_Z10 :
822
+ connect_mask = HID_CONNECT_HIDRAW ;
823
+ break ;
805
824
}
806
825
807
826
ret = hid_hw_start (hdev , connect_mask );
@@ -844,6 +863,19 @@ static int lg_g15_probe(struct hid_device *hdev, const struct hid_device_id *id)
844
863
if (ret )
845
864
goto error_hw_stop ;
846
865
866
+ if (g15 -> model == LG_Z10 ) {
867
+ lg_g15_init_input_dev (hdev , g15 -> input , "Logitech Z-10 LCD Menu Keys" );
868
+ ret = input_register_device (g15 -> input );
869
+ if (ret )
870
+ goto error_hw_stop ;
871
+
872
+ ret = lg_g15_register_led (g15 , 1 , "z-10::lcd_backlight" );
873
+ if (ret )
874
+ goto error_hw_stop ;
875
+
876
+ return 0 ; /* All done */
877
+ }
878
+
847
879
/* Setup and register input device */
848
880
lg_g15_init_input_dev (hdev , input , "Logitech Gaming Keyboard Gaming Keys" );
849
881
@@ -904,6 +936,10 @@ static const struct hid_device_id lg_g15_devices[] = {
904
936
{ HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,
905
937
USB_DEVICE_ID_LOGITECH_G510_USB_AUDIO ),
906
938
.driver_data = LG_G510_USB_AUDIO },
939
+ /* Z-10 speakers */
940
+ { HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,
941
+ USB_DEVICE_ID_LOGITECH_Z_10_SPK ),
942
+ .driver_data = LG_Z10 },
907
943
{ }
908
944
};
909
945
MODULE_DEVICE_TABLE (hid , lg_g15_devices );
0 commit comments