@@ -28,6 +28,7 @@ enum lg_g15_model {
2828 LG_G15_V2 ,
2929 LG_G510 ,
3030 LG_G510_USB_AUDIO ,
31+ LG_Z10 ,
3132};
3233
3334enum lg_g15_led_type {
@@ -457,6 +458,13 @@ static int lg_g15_get_initial_led_brightness(struct lg_g15_data *g15)
457458 return ret ;
458459
459460 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 ;
460468 }
461469 return - EINVAL ; /* Never reached */
462470}
@@ -626,6 +634,12 @@ static int lg_g15_raw_event(struct hid_device *hdev, struct hid_report *report,
626634 if (data [0 ] == 0x02 && size == 5 )
627635 return lg_g15_v2_event (g15 , data );
628636 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 ;
629643 case LG_G510 :
630644 case LG_G510_USB_AUDIO :
631645 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)
660674 switch (g15 -> model ) {
661675 case LG_G15 :
662676 case LG_G15_V2 :
663- g15 -> leds [i ].cdev .brightness_set_blocking = lg_g15_led_set ;
664677 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 ;
665681 if (i < LG_G15_BRIGHTNESS_MAX ) {
666682 g15 -> leds [i ].cdev .flags = LED_BRIGHT_HW_CHANGED ;
667683 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)
802818 gkeys_settings_feature_report = 0x01 ;
803819 gkeys = 18 ;
804820 break ;
821+ case LG_Z10 :
822+ connect_mask = HID_CONNECT_HIDRAW ;
823+ break ;
805824 }
806825
807826 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)
844863 if (ret )
845864 goto error_hw_stop ;
846865
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+
847879 /* Setup and register input device */
848880 lg_g15_init_input_dev (hdev , input , "Logitech Gaming Keyboard Gaming Keys" );
849881
@@ -904,6 +936,10 @@ static const struct hid_device_id lg_g15_devices[] = {
904936 { HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,
905937 USB_DEVICE_ID_LOGITECH_G510_USB_AUDIO ),
906938 .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 },
907943 { }
908944};
909945MODULE_DEVICE_TABLE (hid , lg_g15_devices );
0 commit comments