HID: hid-led: add support for Greynut Luxafor
authorHeiner Kallweit <hkallweit1@gmail.com>
Mon, 4 Jul 2016 19:47:52 +0000 (21:47 +0200)
committerJiri Kosina <jkosina@suse.cz>
Thu, 7 Jul 2016 09:20:59 +0000 (11:20 +0200)
Add support for Greynut Luxafor. This device has two groups of three
independent LED's each.

Successfully tested with such a device.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/Kconfig
drivers/hid/hid-core.c
drivers/hid/hid-ids.h
drivers/hid/hid-led.c

index e33ccefe3e54cffe881c916e76fa056ad4152c7d..8b4b38fb9e7edaab6617dd3ad141304fadf4f365 100644 (file)
@@ -398,6 +398,7 @@ config HID_LED
        - Dream Cheeky Webmail Notifier and Friends Alert
        - ThingM blink(1)
        - Delcom Visual Signal Indicator Generation 2
+       - Greynut Luxafor
 
        To compile this driver as a module, choose M here: the
        module will be called hid-led.
index f808ae71f9a1c585246be566ffb8b3ebd3b6808b..a034f14f6d6f60ae2b4561a757a483cf3e860a10 100644 (file)
@@ -1965,6 +1965,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACENAVIGATOR) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD_BOOTLOADER) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_LUXAFOR) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_KEYBOARD) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
index ffefbd09fb4ce0401c5f3181a0b0faab707d03fc..dafd2a37da1f360c79a60fbec69d1a0462737668 100644 (file)
 #define USB_DEVICE_ID_PICOLCD_BOOTLOADER       0xf002
 #define USB_DEVICE_ID_PICK16F1454      0x0042
 #define USB_DEVICE_ID_PICK16F1454_V2   0xf2f7
+#define USB_DEVICE_ID_LUXAFOR          0xf372
 
 #define USB_VENDOR_ID_MICROSOFT                0x045e
 #define USB_DEVICE_ID_SIDEWINDER_GV    0x003b
index d793ecefb8b6060b34d02c2badbc914cb5aeec00..4c43ef8e71f880c980dd49c29d88ab07819052eb 100644 (file)
@@ -28,6 +28,7 @@ enum hidled_type {
        DREAM_CHEEKY,
        THINGM,
        DELCOM,
+       LUXAFOR,
 };
 
 static unsigned const char riso_kagaku_tbl[] = {
@@ -329,6 +330,19 @@ static int delcom_init(struct hidled_device *ldev)
        return dp.fw.family_code == 2 ? 0 : -ENODEV;
 }
 
+static int luxafor_write(struct led_classdev *cdev, enum led_brightness br)
+{
+       struct hidled_led *led = to_hidled_led(cdev);
+       __u8 buf[MAX_REPORT_SIZE] = { [1] = 1 };
+
+       buf[2] = led->rgb->num + 1;
+       buf[3] = led->rgb->red.cdev.brightness;
+       buf[4] = led->rgb->green.cdev.brightness;
+       buf[5] = led->rgb->blue.cdev.brightness;
+
+       return hidled_send(led->rgb->ldev, buf);
+}
+
 static const struct hidled_config hidled_configs[] = {
        {
                .type = RISO_KAGAKU,
@@ -373,6 +387,16 @@ static const struct hidled_config hidled_configs[] = {
                .init = delcom_init,
                .write = delcom_write,
        },
+       {
+               .type = LUXAFOR,
+               .name = "Greynut Luxafor",
+               .short_name = "luxafor",
+               .max_brightness = 255,
+               .num_leds = 6,
+               .report_size = 9,
+               .report_type = OUTPUT_REPORT,
+               .write = luxafor_write,
+       },
 };
 
 static int hidled_init_led(struct hidled_led *led, const char *color_name,
@@ -480,6 +504,8 @@ static const struct hid_device_id hidled_table[] = {
          USB_DEVICE_ID_BLINK1), .driver_data = THINGM },
        { HID_USB_DEVICE(USB_VENDOR_ID_DELCOM,
          USB_DEVICE_ID_DELCOM_VISUAL_IND), .driver_data = DELCOM },
+       { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP,
+         USB_DEVICE_ID_LUXAFOR), .driver_data = LUXAFOR },
        { }
 };
 MODULE_DEVICE_TABLE(hid, hidled_table);