2008/11/29 Jiri Kosina <jkosina@xxxxxxx>: > On Fri, 28 Nov 2008, Łukasz Lubojański wrote: > >> > It seems the protocol resembles more the hid-lg2ff one. The differences >> > are the additional 0xfa 0xfe 0x0 report sent to the device, and the >> > missing 0xf3 stop command. >> Yep - different reports are send in case of Pantherlord and GreenAsia >> 0x12 - It could be implemented in it but it will require checking what >> hardware is used and send different reports. > > OK, so as the reports are not really identical, and in the future we might > discover that there are many more other Greenasia devices which require a > slightly different handling as well, I would rather prefer to have it as a > separate driver, to avoid additions of here-and-there device-specific > quirks to random places in the code. That's exactly what we are trying to > avoid with the HID bus approach in the first place. > > So I think separate driver is fine. > > Thanks to both of you. > > -- > Jiri Kosina > SUSE Labs Hi, Here is new version of the GreenAsia patch - I hope this time everything will be OK. It is based on the Pantherlord. Sorry to take so long but I have problems with the 2.6.28 (2.6.28-rc6 was not loading my driver and 2.6.28-rc7 is crashing when IO APIC is enabled). Anyway I done it and I'm waiting for your feedback :D regards Lukasz Lubojanski
Signed-off-by: Lukasz Lubojanski <lukasz@xxxxxxxxxxxxxxx> diff --git a/drivers/hid/hid-ga.c b/drivers/hid/hid-ga.c index 33c9a19..e821898 100644 --- a/drivers/hid/hid-ga.c +++ b/drivers/hid/hid-ga.c @@ -65,7 +65,7 @@ static int hid_gaff_play(struct input_dev *dev, void *data, debug("called with 0x%04x 0x%04x", left, right); left = left * 0xfe / 0xffff; - right = right * 0xfe / 0xffff; + right = right * 0xfe / 0xffff; gaff->report->field[0]->value[0] = 0x51; gaff->report->field[0]->value[1] = 0x0; @@ -79,8 +79,8 @@ static int hid_gaff_play(struct input_dev *dev, void *data, gaff->report->field[0]->value[0] = 0xfa; gaff->report->field[0]->value[1] = 0xfe; gaff->report->field[0]->value[2] = 0x0; - gaff->report->field[0]->value[4] = 0x0; - + gaff->report->field[0]->value[4] = 0x0; + usbhid_submit_report(hid, gaff->report, USB_DIR_OUT); return 0; @@ -136,14 +136,14 @@ static int gaff_init(struct hid_device *hid) kfree(gaff); return error; } - + gaff->report = report; gaff->report->field[0]->value[0] = 0x51; gaff->report->field[0]->value[1] = 0x00; gaff->report->field[0]->value[2] = 0x00; gaff->report->field[0]->value[3] = 0x00; usbhid_submit_report(hid, gaff->report, USB_DIR_OUT); - + gaff->report->field[0]->value[0] = 0xfa; gaff->report->field[0]->value[1] = 0xfe; @@ -169,7 +169,7 @@ static inline int gaff_init(struct hid_device *hid) static int ga_probe(struct hid_device *hdev, const struct hid_device_id *id) { int ret; - + debug("Greenasia HID hardware probe..."); if (id->driver_data)