|
From: Franz S. <fs...@us...> - 2002-01-27 22:22:59
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/macintosh
In directory usw-pr-cvs1:/tmp/cvs-serv26410/linux/drivers/macintosh
Modified Files:
Makefile adbhid.c
Log Message:
Sync PPC stuff with linux-dj.
Index: Makefile
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/macintosh/Makefile,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- Makefile 2001/10/06 16:11:13 1.7
+++ Makefile 2002/01/27 22:22:56 1.8
@@ -15,7 +15,7 @@
# Objects that export symbols.
-export-objs := adb.o rtc.o via-pmu.o
+export-objs := adb.o rtc.o mac_hid.o via-pmu.o
# Object file lists.
@@ -29,10 +29,14 @@
obj-$(CONFIG_PMAC_PBOOK) += mediabay.o
obj-$(CONFIG_MAC_SERIAL) += macserial.o
obj-$(CONFIG_NVRAM) += nvram.o
+obj-$(CONFIG_MAC_EMUMOUSEBTN) += mac_hid.o
+obj-$(CONFIG_INPUT_ADBHID) += adbhid.o
obj-$(CONFIG_PPC_RTC) += rtc.o
+obj-$(CONFIG_ANSLCD) += ans-lcd.o
obj-$(CONFIG_ADB_PMU) += via-pmu.o
obj-$(CONFIG_ADB_CUDA) += via-cuda.o
+obj-$(CONFIG_PMAC_APM_EMU) += apm_emu.o
obj-$(CONFIG_ADB) += adb.o
obj-$(CONFIG_ADB_MACII) += via-macii.o
Index: adbhid.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/macintosh/adbhid.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- adbhid.c 2002/01/24 19:51:26 1.1
+++ adbhid.c 2002/01/27 22:22:56 1.2
@@ -276,26 +276,39 @@
break;
case 0x1f: /* Powerbook button device */
{
+ int down = (data[1] == (data[1] & 0xf));
#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] & 0x0f) {
case 0x8: /* mute */
+ input_report_key(&adbhid[id]->input, KEY_MUTE,
+ down);
break;
- case 0x7: /* contrast decrease */
+ case 0x7: /* volume decrease */
+ input_report_key(&adbhid[id]->input, KEY_VOLUMEDOWN,
+ down);
break;
- case 0x6: /* contrast increase */
+ case 0x6: /* volume increase */
+ input_report_key(&adbhid[id]->input, KEY_VOLUMEUP,
+ down);
break;
+ case 0xb: /* eject */
+ input_report_key(&adbhid[id]->input, KEY_EJECTCD,
+ down);
+ break;
+
+#ifdef CONFIG_PMAC_BACKLIGHT
case 0xa: /* brightness decrease */
- if (backlight < 0)
+ if (!down || backlight < 0)
break;
if (backlight > BACKLIGHT_OFF)
set_backlight_level(backlight-1);
@@ -304,15 +317,15 @@
break;
case 0x9: /* brightness increase */
- if (backlight < 0)
+ if (!down || backlight < 0)
break;
if (backlight < BACKLIGHT_MAX)
set_backlight_level(backlight+1);
else
set_backlight_level(BACKLIGHT_MAX);
break;
- }
#endif /* CONFIG_PMAC_BACKLIGHT */
+ }
}
break;
}
@@ -505,6 +518,11 @@
break;
case 0x1f: /* Powerbook button device */
sprintf(adbhid[id]->name, "ADB Powerbook buttons");
+ 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])
@@ -543,16 +561,38 @@
}
+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<<id;
+}
+
+static void
+adbhid_input_devcleanup(u16 exist)
+{
+ int i;
+ for(i=1; i<16; i++)
+ if (adbhid[i] && !(exist&(1<<i)))
+ adbhid_input_unregister(i);
+}
+
static void
adbhid_probe(void)
{
struct adb_request req;
int i, default_id, org_handler_id, cur_handler_id;
-
- for (i = 1; i < 16; i++) {
- if (adbhid[i])
- adbhid_input_unregister(i);
- }
+ u16 reg = 0;
adb_register(ADB_MOUSE, 0, &mouse_ids, adbhid_mouse_input);
adb_register(ADB_KEYBOARD, 0, &keyboard_ids, adbhid_keyboard_input);
@@ -581,14 +621,16 @@
printk("ADB keyboard at %d, handler 1\n", id);
adb_get_infos(id, &default_id, &cur_handler_id);
- adbhid_input_register(id, default_id, org_handler_id, cur_handler_id, 0);
+ reg |= adbhid_input_reregister(id, default_id, org_handler_id,
+ cur_handler_id, 0);
}
for (i = 0; i < buttons_ids.nids; i++) {
int id = buttons_ids.id[i];
adb_get_infos(id, &default_id, &org_handler_id);
- adbhid_input_register(id, default_id, org_handler_id, org_handler_id, 0);
+ reg |= adbhid_input_reregister(id, default_id, org_handler_id,
+ org_handler_id, 0);
}
/* Try to switch all mice to handler 4, or 2 for three-button
@@ -677,9 +719,10 @@
printk("\n");
adb_get_infos(id, &default_id, &cur_handler_id);
- adbhid_input_register(id, default_id, org_handler_id,
- cur_handler_id, mouse_kind);
- }
+ reg |= adbhid_input_reregister(id, default_id, org_handler_id,
+ cur_handler_id, mouse_kind);
+ }
+ adbhid_input_devcleanup(reg);
}
static void
@@ -691,12 +734,13 @@
printk(" (trackpad)");
adb_request(&req, NULL, ADBREQ_SYNC | ADBREQ_REPLY, 1,
- ADB_READREG(id,1));
+ ADB_READREG(id,1));
if (req.reply_len < 8)
printk("bad length for reg. 1\n");
else
{
memcpy(r1_buffer, &req.reply[1], 8);
+
adb_request(&req, NULL, ADBREQ_SYNC, 9,
ADB_WRITEREG(id,1),
r1_buffer[0],
@@ -705,7 +749,7 @@
r1_buffer[3],
r1_buffer[4],
r1_buffer[5],
- 0x0d, /*r1_buffer[6],*/
+ 0x0d,
r1_buffer[7]);
adb_request(&req, NULL, ADBREQ_SYNC, 9,
@@ -718,7 +762,7 @@
0x8a,
0x1b,
0x50);
-
+
adb_request(&req, NULL, ADBREQ_SYNC, 9,
ADB_WRITEREG(id,1),
r1_buffer[0],
@@ -729,6 +773,9 @@
r1_buffer[5],
0x03, /*r1_buffer[6],*/
r1_buffer[7]);
+
+ /* Without this flush, the trackpad may be locked up */
+ adb_request(&req, NULL, ADBREQ_SYNC, 1, ADB_FLUSH(id));
}
}
|