Re: USB: driver for CM109 chipset
From: Shaun Jackman <hidden>
Date: 2007-08-27 05:57:56
On 8/26/07, Alfred E. Heggestad [off-list ref] wrote:
I have made a new version of the CM109 driver which updates the usb hid-quirks.c blacklist, please find it here: http://aeh.db.org/patch/cm109-20070826.patch (All versions here: http://aeh.db.org/patch/)
In fact, I already tried adding the CM109 to the blacklist. Oddly
enough, the usbhid driver still grabs the CM109 HID device. I must be
doing something wrong...
$ grep -1 CMEDIA drivers/hid/usbhid/hid-quirks.c
#define USB_VENDOR_ID_CMEDIA 0x0d8c
#define USB_DEVICE_ID_CMEDIA_CM109 0x000e
--
{ USB_VENDOR_ID_CIDC, 0x0103, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_CMEDIA, USB_DEVICE_ID_CMEDIA_CM109, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_HIDCOM,
HID_QUIRK_IGNORE },
$ make modules
CHK include/linux/version.h
CHK include/linux/utsrelease.h
CALL scripts/checksyscalls.sh
CC [M] drivers/hid/usbhid/hid-quirks.o
LD [M] drivers/hid/usbhid/usbhid.o
Building modules, stage 2.
MODPOST 1648 modules
LD [M] drivers/hid/usbhid/usbhid.ko
$ sudo cp drivers/hid/usbhid/usbhid.ko
/lib/modules/2.6.23-rc3/kernel/drivers/hid/usbhid/usbhid.ko
You can also try to unload the usbhid.ko module (while the USB phone is plugged in), and then manually load the cm109.ko driver
That's difficult for me, as both my keyboard and mouse are HID devices. The detach-usb utility is working for me until I can get the blacklist working.
Another outstanding issue with the CM109 driver is that it seems like all phone vendors have different key-mappings. That means that the keymapping defined in my version of the cm109 driver works with the KIP-1000 USB phone. I have got reports from other users with other phones, that the keymapping is different. It would be very interesting to see which keymapping your phone (Genius G-talk) has.
It's one of the guarantees in electronics that if two people are given an arbitrary binary choice, they will certainly choose opposite each other. A keyboard matrix, which is well more than a binary choice, will yield endless different key arrangements. The Genius G-Talk keymap follows this mail.
I am not sure how to fix this problem, does anyone on this list have any good suggestions?
I haven't been able to dump the EEPROM yet. I'll think on it.
Cheers,
Shaun
/*
Genius G-Talk keyboard matrix
0 1 2 3
4: 0 4 8 Talk
5: 1 5 9 End
6: 2 6 # Up
7: 3 7 * Down
*/
case 0x11: return KEY_0;
case 0x21: return KEY_1;
case 0x41: return KEY_2;
case 0x81: return KEY_3;
case 0x12: return KEY_4;
case 0x22: return KEY_5;
case 0x42: return KEY_6;
case 0x82: return KEY_7;
case 0x14: return KEY_8;
case 0x24: return KEY_9;
case 0x44: return KEY_LEFTSHIFT | KEY_3 << 8; /* # */
case 0x84: return KEY_KPASTERISK;
case 0x18: return KEY_ENTER; /* Talk (green handset) */
case 0x28: return KEY_ESC; /* End (red handset) */
case 0x48: return KEY_UP; /* Menu up (rocker switch) */
case 0x88: return KEY_DOWN; /* Menu down (rocker switch) */