---------------------- U-boot Pinmux ---------------------------- => md 0x4a003554 4a003554: 00060009 00060009 0004000e 00060009 ................ 4a003564: 0005000e 0005000e 0005000e 0001000a ................ 4a003574: 00010009 00010009 00010009 00010009 ................ 4a003584: 0005010c 0005010c 0005000e 00010003 ................ 4a003594: 00050003 0001000a 0001010d 0001010d ................ 4a0035a4: 0001010d 0001010d 0001010d 0005000e ................ 4a0035b4: 0005000e 0001000a 0005000e 0005000e ................ 4a0035c4: 0005000e 0004000f 0004000f 0004000f ................ 4a0035d4: 0004000f 0004000f 0004000f 0004000f ................ 4a0035e4: 0004000f 0004000f 0004000f 0004000f ................ 4a0035f4: 0004000f 0004000f 0004000f 0004000f ................ 4a003604: 0004000f 0004000f 0004000f 0004000f ................ 4a003614: 0004000f 0004000f 0004000f 0004000f ................ 4a003624: 0004000f 0004000f 0004000f 0004000f ................ 4a003634: 0004000f 0004000f 000d0003 00090003 ................ 4a003644: 0004000f 000d0003 000d0003 00050003 ................ => => => => => md 0x4a003574 4a003574: 00010009 00010009 00010009 00010009 ................ 4a003584: 0005010c 0005010c 0005000e 00010003 ................ 4a003594: 00050003 0001000a 0001010d 0001010d ................ 4a0035a4: 0001010d 0001010d 0001010d 0005000e ................ 4a0035b4: 0005000e 0001000a 0005000e 0005000e ................ 4a0035c4: 0005000e 0004000f 0004000f 0004000f ................ 4a0035d4: 0004000f 0004000f 0004000f 0004000f ................ 4a0035e4: 0004000f 0004000f 0004000f 0004000f ................ 4a0035f4: 0004000f 0004000f 0004000f 0004000f ................ 4a003604: 0004000f 0004000f 0004000f 0004000f ................ 4a003614: 0004000f 0004000f 0004000f 0004000f ................ 4a003624: 0004000f 0004000f 0004000f 0004000f ................ 4a003634: 0004000f 0004000f 000d0003 00090003 ................ 4a003644: 0004000f 000d0003 000d0003 00050003 ................ 4a003654: 00050003 00050003 00050003 00050003 ................ 4a003664: ---------------------- Linux Pinmux ----------------------------- root@am57xx-evm:~# root@am57xx-evm:~# devmem2 0x4a003554 /dev/mem opened. Memory mapped at address 0xb6fa1000. Read at address 0x4A003554 (0xb6fa1554): 0x00060009 root@am57xx-evm:~# devmem2 0x4a003558 /dev/mem opened. Memory mapped at address 0xb6f83000. Read at address 0x4A003558 (0xb6f83558): 0x00060009 root@am57xx-evm:~# devmem2 0x4a003560 /dev/mem opened. Memory mapped at address 0xb6f78000. Read at address 0x4A003560 (0xb6f78560): 0x00060009 root@am57xx-evm:~# devmem2 0x4a003574 /dev/mem opened. Memory mapped at address 0xb6f3c000. Read at address 0x4A003574 (0xb6f3c574): 0x00010009 root@am57xx-evm:~# devmem2 0x4a003578 /dev/mem opened. Memory mapped at address 0xb6f5e000. Read at address 0x4A003578 (0xb6f5e578): 0x00010009 root@am57xx-evm:~# devmem2 0x4a00357c /dev/mem opened. Memory mapped at address 0xb6f8d000. Read at address 0x4A00357C (0xb6f8d57c): 0x00010009 root@am57xx-evm:~# devmem2 0x4a003580 /dev/mem opened. Memory mapped at address 0xb6f65000. Read at address 0x4A003580 (0xb6f65580): 0x00010009 root@am57xx-evm:~# root@am57xx-evm:~# ----------------- Linux printks from omap4-keypad.c ----------------------------- root@am57xx-evm:~# <---- PRESSING KEY root@am57xx-evm:~# [ 59.680964] Billa 2 changed=000000ff row=1 col=0 [ 59.685710] Billa 2 changed=000000ff row=1 col=1 [ 59.690442] Billa 2 changed=000000ff row=1 col=2 [ 59.695174] Billa 2 changed=000000ff row=1 col=3 root@am57xx-evm:~# <---- RELEASING KEY root@am57xx-evm:~# [ 62.800993] Billa 2 changed=000000ff row=1 col=0 [ 62.805734] Billa 2 changed=000000ff row=1 col=1 [ 62.810466] Billa 2 changed=000000ff row=1 col=2 [ 62.815198] Billa 2 changed=000000ff row=1 col=3 root@am57xx-evm:~# root@am57xx-evm:~# static irqreturn_t omap4_keypad_irq_thread_fn(int irq, void *dev_id) { struct omap4_keypad *keypad_data = dev_id; struct input_dev *input_dev = keypad_data->input; unsigned char key_state[ARRAY_SIZE(keypad_data->key_state)]; unsigned int col, row, code, changed; u32 *new_state = (u32 *) key_state; *new_state = kbd_readl(keypad_data, OMAP4_KBD_FULLCODE31_0); *(new_state + 1) = kbd_readl(keypad_data, OMAP4_KBD_FULLCODE63_32); for (row = 0; row < keypad_data->rows; row++) { changed = key_state[row] ^ keypad_data->key_state[row]; if (!changed) continue; for (col = 0; col < keypad_data->cols; col++) { if (changed & (1 << col)) { printk("Billa 2 changed=%08x row=%d col=%d\n", changed, row, col); code = MATRIX_SCAN_CODE(row, col, keypad_data->row_shift); input_event(input_dev, EV_MSC, MSC_SCAN, code); input_report_key(input_dev, keypad_data->keymap[code], key_state[row] & (1 << col)); } } } input_sync(input_dev); memcpy(keypad_data->key_state, key_state, sizeof(keypad_data->key_state)); /* clear pending interrupts */ kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS, kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS)); /* enable interrupts */ kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE_SET, OMAP4_DEF_IRQENABLE_EVENTEN | OMAP4_DEF_IRQENABLE_LONGKEY); return IRQ_HANDLED; }