Input: wacom - add Intuos5 Touch Ring LED support
The Touch Ring LEDs on Intuos5 tablets use a different report format which supports only 4 levels of brightness. We remap the 7-bit value obtained from sysfs to an appropriate value for the tablet. Control of the crop mark LEDs (new to the I5) is left for a later patch. Signed-off-by: Jason Gerecke <killertofu@gmail.com> Reviewed-by: Ping Cheng <pingc@wacom.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
parent
f860e581fd
commit
9b5b95dd51
|
@ -15,9 +15,10 @@ Contact: linux-input@vger.kernel.org
|
||||||
Description:
|
Description:
|
||||||
Attribute group for control of the status LEDs and the OLEDs.
|
Attribute group for control of the status LEDs and the OLEDs.
|
||||||
This attribute group is only available for Intuos 4 M, L,
|
This attribute group is only available for Intuos 4 M, L,
|
||||||
and XL (with LEDs and OLEDs) and Cintiq 21UX2 and Cintiq 24HD
|
and XL (with LEDs and OLEDs), Intuos 5 (LEDs only), and Cintiq
|
||||||
(LEDs only). Therefore its presence implicitly signifies the
|
21UX2 and Cintiq 24HD (LEDs only). Therefore its presence
|
||||||
presence of said LEDs and OLEDs on the tablet device.
|
implicitly signifies the presence of said LEDs and OLEDs on the
|
||||||
|
tablet device.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status0_luminance
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status0_luminance
|
||||||
Date: August 2011
|
Date: August 2011
|
||||||
|
@ -40,10 +41,10 @@ What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status_led0
|
||||||
Date: August 2011
|
Date: August 2011
|
||||||
Contact: linux-input@vger.kernel.org
|
Contact: linux-input@vger.kernel.org
|
||||||
Description:
|
Description:
|
||||||
Writing to this file sets which one of the four (for Intuos 4)
|
Writing to this file sets which one of the four (for Intuos 4
|
||||||
or of the right four (for Cintiq 21UX2 and Cintiq 24HD) status
|
and Intuos 5) or of the right four (for Cintiq 21UX2 and Cintiq
|
||||||
LEDs is active (0..3). The other three LEDs on the same side are
|
24HD) status LEDs is active (0..3). The other three LEDs on the
|
||||||
always inactive.
|
same side are always inactive.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status_led1_select
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status_led1_select
|
||||||
Date: September 2011
|
Date: September 2011
|
||||||
|
|
|
@ -574,23 +574,39 @@ static void wacom_remove_shared_data(struct wacom_wac *wacom)
|
||||||
static int wacom_led_control(struct wacom *wacom)
|
static int wacom_led_control(struct wacom *wacom)
|
||||||
{
|
{
|
||||||
unsigned char *buf;
|
unsigned char *buf;
|
||||||
int retval, led = 0;
|
int retval;
|
||||||
|
|
||||||
buf = kzalloc(9, GFP_KERNEL);
|
buf = kzalloc(9, GFP_KERNEL);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (wacom->wacom_wac.features.type >= INTUOS5S &&
|
||||||
|
wacom->wacom_wac.features.type <= INTUOS5L) {
|
||||||
|
/*
|
||||||
|
* Touch Ring and crop mark LED luminance may take on
|
||||||
|
* one of four values:
|
||||||
|
* 0 = Low; 1 = Medium; 2 = High; 3 = Off
|
||||||
|
*/
|
||||||
|
int ring_led = wacom->led.select[0] & 0x03;
|
||||||
|
int ring_lum = (((wacom->led.llv & 0x60) >> 5) - 1) & 0x03;
|
||||||
|
int crop_lum = 0;
|
||||||
|
|
||||||
|
buf[0] = WAC_CMD_LED_CONTROL;
|
||||||
|
buf[1] = (crop_lum << 4) | (ring_lum << 2) | (ring_led);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int led = wacom->led.select[0] | 0x4;
|
||||||
|
|
||||||
if (wacom->wacom_wac.features.type == WACOM_21UX2 ||
|
if (wacom->wacom_wac.features.type == WACOM_21UX2 ||
|
||||||
wacom->wacom_wac.features.type == WACOM_24HD)
|
wacom->wacom_wac.features.type == WACOM_24HD)
|
||||||
led = (wacom->led.select[1] << 4) | 0x40;
|
led |= (wacom->led.select[1] << 4) | 0x40;
|
||||||
|
|
||||||
led |= wacom->led.select[0] | 0x4;
|
|
||||||
|
|
||||||
buf[0] = WAC_CMD_LED_CONTROL;
|
buf[0] = WAC_CMD_LED_CONTROL;
|
||||||
buf[1] = led;
|
buf[1] = led;
|
||||||
buf[2] = wacom->led.llv;
|
buf[2] = wacom->led.llv;
|
||||||
buf[3] = wacom->led.hlv;
|
buf[3] = wacom->led.hlv;
|
||||||
buf[4] = wacom->led.img_lum;
|
buf[4] = wacom->led.img_lum;
|
||||||
|
}
|
||||||
|
|
||||||
retval = wacom_set_report(wacom->intf, 0x03, WAC_CMD_LED_CONTROL,
|
retval = wacom_set_report(wacom->intf, 0x03, WAC_CMD_LED_CONTROL,
|
||||||
buf, 9, WAC_CMD_RETRIES);
|
buf, 9, WAC_CMD_RETRIES);
|
||||||
|
@ -783,6 +799,17 @@ static struct attribute_group intuos4_led_attr_group = {
|
||||||
.attrs = intuos4_led_attrs,
|
.attrs = intuos4_led_attrs,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct attribute *intuos5_led_attrs[] = {
|
||||||
|
&dev_attr_status0_luminance.attr,
|
||||||
|
&dev_attr_status_led0_select.attr,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct attribute_group intuos5_led_attr_group = {
|
||||||
|
.name = "wacom_led",
|
||||||
|
.attrs = intuos5_led_attrs,
|
||||||
|
};
|
||||||
|
|
||||||
static int wacom_initialize_leds(struct wacom *wacom)
|
static int wacom_initialize_leds(struct wacom *wacom)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
@ -812,6 +839,19 @@ static int wacom_initialize_leds(struct wacom *wacom)
|
||||||
&cintiq_led_attr_group);
|
&cintiq_led_attr_group);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case INTUOS5S:
|
||||||
|
case INTUOS5:
|
||||||
|
case INTUOS5L:
|
||||||
|
wacom->led.select[0] = 0;
|
||||||
|
wacom->led.select[1] = 0;
|
||||||
|
wacom->led.llv = 32;
|
||||||
|
wacom->led.hlv = 0;
|
||||||
|
wacom->led.img_lum = 0;
|
||||||
|
|
||||||
|
error = sysfs_create_group(&wacom->intf->dev.kobj,
|
||||||
|
&intuos5_led_attr_group);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -840,6 +880,13 @@ static void wacom_destroy_leds(struct wacom *wacom)
|
||||||
sysfs_remove_group(&wacom->intf->dev.kobj,
|
sysfs_remove_group(&wacom->intf->dev.kobj,
|
||||||
&cintiq_led_attr_group);
|
&cintiq_led_attr_group);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case INTUOS5S:
|
||||||
|
case INTUOS5:
|
||||||
|
case INTUOS5L:
|
||||||
|
sysfs_remove_group(&wacom->intf->dev.kobj,
|
||||||
|
&intuos5_led_attr_group);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue