Commit 9d1e048c authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Jiri Kosina
Browse files

HID: hid-led: add support for Greynut Luxafor



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: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent de908650
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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.
+1 −0
Original line number Diff line number Diff line
@@ -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) },
+1 −0
Original line number Diff line number Diff line
@@ -685,6 +685,7 @@
#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
+26 −0
Original line number Diff line number Diff line
@@ -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);