123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #ifndef __LINUX_MFD_NVEC
- #define __LINUX_MFD_NVEC
- #include <linux/semaphore.h>
- typedef enum {
- NVEC_2BYTES,
- NVEC_3BYTES,
- NVEC_VAR_SIZE
- } nvec_size;
- typedef enum {
- NOT_REALLY,
- YES,
- NOT_AT_ALL,
- } how_care;
- typedef enum {
- NVEC_SYS=1,
- NVEC_BAT,
- NVEC_KBD = 5,
- NVEC_PS2,
- NVEC_CNTL,
- NVEC_KB_EVT = 0x80,
- NVEC_PS2_EVT
- } nvec_event;
- typedef enum {
- NVEC_WAIT,
- NVEC_READ,
- NVEC_WRITE
- } nvec_state;
- struct nvec_msg {
- unsigned char *data;
- unsigned short size;
- unsigned short pos;
- struct list_head node;
- };
- struct nvec_subdev {
- const char *name;
- void *platform_data;
- int id;
- };
- struct nvec_platform_data {
- int num_subdevs;
- int i2c_addr;
- int gpio;
- int irq;
- int base;
- int size;
- char clock[16];
- struct nvec_subdev *subdevs;
- };
- struct nvec_chip {
- struct device *dev;
- int gpio;
- int irq;
- unsigned char *i2c_regs;
- nvec_state state;
- struct atomic_notifier_head notifier_list;
- struct list_head rx_data, tx_data;
- struct notifier_block nvec_status_notifier;
- struct work_struct rx_work, tx_work;
- struct nvec_msg *rx, *tx;
- /* sync write stuff */
- struct semaphore sync_write_mutex;
- struct completion sync_write;
- u16 sync_write_pending;
- struct nvec_msg *last_sync_msg;
- };
- extern void nvec_write_async(struct nvec_chip *nvec, unsigned char *data, short size);
- extern int nvec_register_notifier(struct nvec_chip *nvec,
- struct notifier_block *nb, unsigned int events);
- extern int nvec_unregister_notifier(struct device *dev,
- struct notifier_block *nb, unsigned int events);
- const char *nvec_send_msg(unsigned char *src, unsigned char *dst_size, how_care care_resp, void (*rt_handler)(unsigned char *data));
- extern int nvec_ps2(struct nvec_chip *nvec);
- extern int nvec_kbd_init(struct nvec_chip *nvec);
- #define I2C_CNFG 0x00
- #define I2C_CNFG_PACKET_MODE_EN (1<<10)
- #define I2C_CNFG_NEW_MASTER_SFM (1<<11)
- #define I2C_CNFG_DEBOUNCE_CNT_SHIFT 12
- #define I2C_SL_CNFG 0x20
- #define I2C_SL_NEWL (1<<2)
- #define I2C_SL_NACK (1<<1)
- #define I2C_SL_RESP (1<<0)
- #define I2C_SL_IRQ (1<<3)
- #define END_TRANS (1<<4)
- #define RCVD (1<<2)
- #define RNW (1<<1)
- #define I2C_SL_RCVD 0x24
- #define I2C_SL_STATUS 0x28
- #define I2C_SL_ADDR1 0x2c
- #define I2C_SL_ADDR2 0x30
- #define I2C_SL_DELAY_COUNT 0x3c
- #endif
|