Files
codezero/conts/libdev/kmi/pl050/kmi.h
Amit Mahajan 92645be6ff KMI patch for devel branch on bahadir's repo.
Important points:
----------------
1. Works fine for pb926 + qemu.

2. Scan code logic for kryboard is not complete.
We just have generic keys and shift working.

3. Mouse scancodes are collected but not decoded.

4. Right now we are doing enable_irq(), just before we go for waiting
again for new irqs. This is not correct but we had latency issues.
This needs to be fixed immediately.

5. Also it seems like the notify_clot count should be an atomic
variable. Needs to be discussed.
2010-03-30 16:17:15 +05:30

60 lines
1.7 KiB
C
Executable File

#ifndef __PL050_KMI_H__
#define __PL050_KMI_H__
/* Register offsets */
#define PL050_KMICR 0x00
#define PL050_KMISTAT 0x04
#define PL050_KMIDATA 0x08
#define PL050_KMICLKDIV 0x0C
#define PL050_KMIIR 0x10
/* Bit definitions for KMI control register */
#define KMI_TYPE (1 << 0x5)
#define KMI_RXINTR (1 << 0x4)
#define KMI_TXINTR (1 << 0x3)
#define KMI_EN (1 << 0x2)
#define KMI_FD (1 << 0x1)
#define KMI_FC (1 << 0x0)
/* KMI generic defines */
#define KMI_DATA_RESET 0xFF
#define KMI_DATA_RTR 0xAA
/* Keyboard special defines */
#define KYBD_DATA_RESET KMI_DATA_RESET // Keyboard reset
#define KYBD_DATA_RTR KMI_DATA_RTR // Keyboard response to reset
#define KYBD_DATA_KEYUP 0xF0 // Key up control code
#define KYBD_DATA_SHIFTL 18 // Shift key left
#define KYBD_DATA_SHIFTR 89 // Shift key right
/* Bit definitions for KMI STAT register */
#define KMI_TXEMPTY (1 << 0x6)
#define KMI_TXBUSY (1 << 0x5)
#define KMI_RXFULL (1 << 0x4)
#define KMI_RXBUSY (1 << 0x3)
#define KMI_RXPARITY (1 << 0x2)
#define KMI_CLKIN (1 << 0x1)
#define KMI_DATAIN (1 << 0x0)
/* Mouse special defines */
#define MOUSE_DATA_RESET KMI_DATA_RESET // Mouse reset
#define MOUSE_DATA_RTR KMI_DATA_RTR // Mouse response to reset
#define MOUSE_DATA_ACK 0xFA
#define MOUSE_DATA_ENABLE 0xF4 // Mouse enable
/* Common functions */
void kmi_irq_handler(unsigned long base);
int kmi_data_read(unsigned long base);
/* Keyboard specific calls */
char kmi_keyboard_read(unsigned long base, struct keyboard_state *state);
void kmi_keyboard_init(unsigned long base, unsigned int div);
/* Mouse specific calls */
void kmi_mouse_enable(unsigned long base);
void kmi_mouse_init(unsigned long base, unsigned int div);
#endif /* __PL050_KMI_H__ */