diff -ruP -X ../ignorediff linux-2.4.7-ben0-benh20010729.orij/drivers/macintosh/adbhid.c linux-2.4.7-ben0-benh20010729-buttons/drivers/macintosh/adbhid.c --- linux-2.4.7-ben0-benh20010729.orij/drivers/macintosh/adbhid.c Thu Jul 26 15:19:01 2001 +++ linux-2.4.7-ben0-benh20010729-buttons/drivers/macintosh/adbhid.c Sun Jul 29 22:40:32 2001 @@ -275,22 +275,28 @@ { #ifdef CONFIG_PMAC_BACKLIGHT int backlight = get_backlight_level(); - +#endif /* * XXX: Where is the contrast control for the passive? * -- Cort */ - switch (data[1]) { + switch (data[1]&0xf) { case 0x8: /* mute */ + input_report_key(&adbhid[id]->input, KEY_MUTE, data[1] == (data[1] & 0xf)); break; - case 0x7: /* contrast decrease */ + case 0x7: /* volume decrease */ + input_report_key(&adbhid[id]->input, KEY_VOLUMEDOWN, data[1] == (data[1] & 0xf)); break; - case 0x6: /* contrast increase */ + case 0x6: /* volume increase */ + input_report_key(&adbhid[id]->input, KEY_VOLUMEUP, data[1] == (data[1] & 0xf)); break; - + case 0xb: /* eject */ + input_report_key(&adbhid[id]->input, KEY_EJECTCD, data[1] == (data[1] & 0xf)); + break; +#ifdef CONFIG_PMAC_BACKLIGHT case 0xa: /* brightness decrease */ if (backlight < 0) break; @@ -308,8 +314,8 @@ else set_backlight_level(BACKLIGHT_MAX); break; +#endif } -#endif /* CONFIG_PMAC_BACKLIGHT */ } break; } @@ -504,6 +510,11 @@ case 0x1f: /* Powerbook button device */ sprintf(adbhid[id]->name, "ADB Powerbook buttons on ID %d:%d.%02x", id, default_id, original_handler_id); + adbhid[id]->input.evbit[0] = BIT(EV_KEY) | BIT(EV_REP); + set_bit(KEY_MUTE, adbhid[id]->input.keybit); + set_bit(KEY_VOLUMEUP, adbhid[id]->input.keybit); + set_bit(KEY_VOLUMEDOWN, adbhid[id]->input.keybit); + set_bit(KEY_EJECTCD, adbhid[id]->input.keybit); break; } if (adbhid[id]->name[0]) @@ -541,17 +552,35 @@ adbhid[id] = 0; } +static u16 +adbhid_input_reregister(int id, int default_id, int org_handler_id, + int cur_handler_id, int mk) +{ + if(adbhid[id]){ + if(adbhid[id]->input.idproduct!=((id << 12)|(default_id << 8)|org_handler_id)){ + adbhid_input_unregister(id); + adbhid_input_register(id, default_id, org_handler_id, cur_handler_id, mk); + } + }else + adbhid_input_register(id, default_id, org_handler_id, cur_handler_id, mk); + return 1<