Commit 007414e8 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Jiri Kosina

HID: hid-led: add support for ThingM blink(1)

Add support for ThingM blink(1) and make the dedicated ThingM driver
obsolete.

Successfully tested with a blink(1) mk2.
Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 43745730
...@@ -393,9 +393,10 @@ config HID_LED ...@@ -393,9 +393,10 @@ config HID_LED
depends on HID depends on HID
depends on LEDS_CLASS depends on LEDS_CLASS
---help--- ---help---
Support for simple RGB LED devices. Currently supported are the Support for simple RGB LED devices. Currently supported are:
Riso Kagaku Webmail Notifier and the Dream Cheeky Webmail Notifier - Riso Kagaku Webmail Notifier
and Friends Alert. - Dream Cheeky Webmail Notifier and Friends Alert
- ThingM blink(1)
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called hid-led. module will be called hid-led.
......
...@@ -26,6 +26,7 @@ enum hidled_report_type { ...@@ -26,6 +26,7 @@ enum hidled_report_type {
enum hidled_type { enum hidled_type {
RISO_KAGAKU, RISO_KAGAKU,
DREAM_CHEEKY, DREAM_CHEEKY,
THINGM,
}; };
static unsigned const char riso_kagaku_tbl[] = { static unsigned const char riso_kagaku_tbl[] = {
...@@ -198,6 +199,57 @@ static int dream_cheeky_init(struct hidled_device *ldev) ...@@ -198,6 +199,57 @@ static int dream_cheeky_init(struct hidled_device *ldev)
return hidled_send(ldev, buf); return hidled_send(ldev, buf);
} }
static int _thingm_write(struct led_classdev *cdev, enum led_brightness br,
u8 offset)
{
struct hidled_led *led = to_hidled_led(cdev);
__u8 buf[MAX_REPORT_SIZE] = { [1] = 'c' };
buf[2] = led->rgb->red.cdev.brightness;
buf[3] = led->rgb->green.cdev.brightness;
buf[4] = led->rgb->blue.cdev.brightness;
buf[7] = led->rgb->num + offset;
return hidled_send(led->rgb->ldev, buf);
}
static int thingm_write_v1(struct led_classdev *cdev, enum led_brightness br)
{
return _thingm_write(cdev, br, 0);
}
static int thingm_write(struct led_classdev *cdev, enum led_brightness br)
{
return _thingm_write(cdev, br, 1);
}
static const struct hidled_config hidled_config_thingm_v1 = {
.name = "ThingM blink(1) v1",
.short_name = "thingm",
.max_brightness = 255,
.num_leds = 1,
.report_size = 9,
.report_type = RAW_REQUEST,
.report_id = 1,
.write = thingm_write_v1,
};
static int thingm_init(struct hidled_device *ldev)
{
__u8 buf[MAX_REPORT_SIZE] = { [1] = 'v' };
int ret;
ret = hidled_recv(ldev, buf);
if (ret)
return ret;
/* Check for firmware major version 1 */
if (buf[3] == '1')
ldev->config = &hidled_config_thingm_v1;
return 0;
}
static const struct hidled_config hidled_configs[] = { static const struct hidled_config hidled_configs[] = {
{ {
.type = RISO_KAGAKU, .type = RISO_KAGAKU,
...@@ -222,6 +274,18 @@ static const struct hidled_config hidled_configs[] = { ...@@ -222,6 +274,18 @@ static const struct hidled_config hidled_configs[] = {
.init = dream_cheeky_init, .init = dream_cheeky_init,
.write = dream_cheeky_write, .write = dream_cheeky_write,
}, },
{
.type = THINGM,
.name = "ThingM blink(1)",
.short_name = "thingm",
.max_brightness = 255,
.num_leds = 2,
.report_size = 9,
.report_type = RAW_REQUEST,
.report_id = 1,
.init = thingm_init,
.write = thingm_write,
},
}; };
static int hidled_init_led(struct hidled_led *led, const char *color_name, static int hidled_init_led(struct hidled_led *led, const char *color_name,
...@@ -325,6 +389,8 @@ static const struct hid_device_id hidled_table[] = { ...@@ -325,6 +389,8 @@ static const struct hid_device_id hidled_table[] = {
USB_DEVICE_ID_DREAM_CHEEKY_WN), .driver_data = DREAM_CHEEKY }, USB_DEVICE_ID_DREAM_CHEEKY_WN), .driver_data = DREAM_CHEEKY },
{ HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY, { HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY,
USB_DEVICE_ID_DREAM_CHEEKY_FA), .driver_data = DREAM_CHEEKY }, USB_DEVICE_ID_DREAM_CHEEKY_FA), .driver_data = DREAM_CHEEKY },
{ HID_USB_DEVICE(USB_VENDOR_ID_THINGM,
USB_DEVICE_ID_BLINK1), .driver_data = THINGM },
{ } { }
}; };
MODULE_DEVICE_TABLE(hid, hidled_table); MODULE_DEVICE_TABLE(hid, hidled_table);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment