Messages in this thread Patch in this message | | | Date | Wed, 12 Feb 2003 12:06:05 +0100 | From | Vojtech Pavlik <> | Subject | [patch] input: PowerMate driver update [11/14] |
| |
You can pull this changeset from: bk://kernel.bkbits.net/vojtech/input
===================================================================
ChangeSet@1.1014, 2003-02-12 11:06:34+01:00, will@sowerbutts.com input: PowerMate driver update - work around an undocumented firmware bug - fix handling of LED brightness
powermate.c | 24 ++++++++++++++---------- 1 files changed, 14 insertions(+), 10 deletions(-)
===================================================================
diff -Nru a/drivers/usb/input/powermate.c b/drivers/usb/input/powermate.c --- a/drivers/usb/input/powermate.c Wed Feb 12 11:56:37 2003 +++ b/drivers/usb/input/powermate.c Wed Feb 12 11:56:37 2003 @@ -1,9 +1,9 @@ /* * A driver for the Griffin Technology, Inc. "PowerMate" USB controller dial. * - * v1.0, (c)2002 William R Sowerbutts <will@sowerbutts.com> + * v1.1, (c)2002 William R Sowerbutts <will@sowerbutts.com> * - * This device is a stainless steel knob which connects over USB. It can measure + * This device is a anodised aluminium knob which connects over USB. It can measure * clockwise and anticlockwise rotation. The dial also acts as a pushbutton with * a spring for automatic release. The base contains a pair of LEDs which illuminate * the translucent base. It rotates without limit and reports its relative rotation @@ -15,13 +15,17 @@ * speeds of up to 7 clicks either clockwise or anticlockwise between pollings from * the host. If it counts more than 7 clicks before it is polled, it will wrap back * to zero and start counting again. This was at quite high speed, however, almost - * certainly faster than the human hand could turn it. + * certainly faster than the human hand could turn it. Griffin say that it loses a + * pulse or two on a direction change; the granularity is so fine that I never + * noticed this in practice. * * The device's microcontroller can be programmed to set the LED to either a constant * intensity, or to a rhythmic pulsing. Several patterns and speeds are available. * * Griffin were very happy to provide documentation and free hardware for development. * + * Some userspace tools are available on the web: http://sowerbutts.com/powermate/ + * */ #include <linux/kernel.h> @@ -116,11 +120,7 @@ if (pm->config->status == -EINPROGRESS) return; /* an update is already in progress; it'll issue this update when it completes */ - if (pm->requires_update & UPDATE_STATIC_BRIGHTNESS){ - pm->configcr->wValue = cpu_to_le16( SET_STATIC_BRIGHTNESS ); - pm->configcr->wIndex = cpu_to_le16( pm->static_brightness ); - pm->requires_update &= ~UPDATE_STATIC_BRIGHTNESS; - }else if (pm->requires_update & UPDATE_PULSE_ASLEEP){ + if (pm->requires_update & UPDATE_PULSE_ASLEEP){ pm->configcr->wValue = cpu_to_le16( SET_PULSE_ASLEEP ); pm->configcr->wIndex = cpu_to_le16( pm->pulse_asleep ? 1 : 0 ); pm->requires_update &= ~UPDATE_PULSE_ASLEEP; @@ -160,6 +160,10 @@ pm->configcr->wValue = cpu_to_le16( (pm->pulse_table << 8) | SET_PULSE_MODE ); pm->configcr->wIndex = cpu_to_le16( (arg << 8) | op ); pm->requires_update &= ~UPDATE_PULSE_MODE; + }else if (pm->requires_update & UPDATE_STATIC_BRIGHTNESS){ + pm->configcr->wValue = cpu_to_le16( SET_STATIC_BRIGHTNESS ); + pm->configcr->wIndex = cpu_to_le16( pm->static_brightness ); + pm->requires_update &= ~UPDATE_STATIC_BRIGHTNESS; }else{ printk(KERN_ERR "powermate: unknown update required"); pm->requires_update = 0; /* fudge the bug */ @@ -220,11 +224,11 @@ } if (pulse_asleep != pm->pulse_asleep){ pm->pulse_asleep = pulse_asleep; - pm->requires_update |= UPDATE_PULSE_ASLEEP; + pm->requires_update |= (UPDATE_PULSE_ASLEEP | UPDATE_STATIC_BRIGHTNESS); } if (pulse_awake != pm->pulse_awake){ pm->pulse_awake = pulse_awake; - pm->requires_update |= UPDATE_PULSE_AWAKE; + pm->requires_update |= (UPDATE_PULSE_AWAKE | UPDATE_STATIC_BRIGHTNESS); } if (pulse_speed != pm->pulse_speed || pulse_table != pm->pulse_table){ pm->pulse_speed = pulse_speed; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |