at v3.1-rc5 110 lines 2.3 kB view raw
1#ifndef __LINUX_MFD_NVEC 2#define __LINUX_MFD_NVEC 3 4#include <linux/semaphore.h> 5 6typedef enum { 7 NVEC_2BYTES, 8 NVEC_3BYTES, 9 NVEC_VAR_SIZE 10} nvec_size; 11 12typedef enum { 13 NOT_REALLY, 14 YES, 15 NOT_AT_ALL, 16} how_care; 17 18typedef enum { 19 NVEC_SYS=1, 20 NVEC_BAT, 21 NVEC_KBD = 5, 22 NVEC_PS2, 23 NVEC_CNTL, 24 NVEC_KB_EVT = 0x80, 25 NVEC_PS2_EVT 26} nvec_event; 27 28typedef enum { 29 NVEC_WAIT, 30 NVEC_READ, 31 NVEC_WRITE 32} nvec_state; 33 34struct nvec_msg { 35 unsigned char *data; 36 unsigned short size; 37 unsigned short pos; 38 struct list_head node; 39}; 40 41struct nvec_subdev { 42 const char *name; 43 void *platform_data; 44 int id; 45}; 46 47struct nvec_platform_data { 48 int num_subdevs; 49 int i2c_addr; 50 int gpio; 51 int irq; 52 int base; 53 int size; 54 char clock[16]; 55 struct nvec_subdev *subdevs; 56}; 57 58struct nvec_chip { 59 struct device *dev; 60 int gpio; 61 int irq; 62 unsigned char *i2c_regs; 63 nvec_state state; 64 struct atomic_notifier_head notifier_list; 65 struct list_head rx_data, tx_data; 66 struct notifier_block nvec_status_notifier; 67 struct work_struct rx_work, tx_work; 68 struct nvec_msg *rx, *tx; 69 70/* sync write stuff */ 71 struct semaphore sync_write_mutex; 72 struct completion sync_write; 73 u16 sync_write_pending; 74 struct nvec_msg *last_sync_msg; 75}; 76 77extern void nvec_write_async(struct nvec_chip *nvec, unsigned char *data, short size); 78 79extern int nvec_register_notifier(struct nvec_chip *nvec, 80 struct notifier_block *nb, unsigned int events); 81 82extern int nvec_unregister_notifier(struct device *dev, 83 struct notifier_block *nb, unsigned int events); 84 85const char *nvec_send_msg(unsigned char *src, unsigned char *dst_size, how_care care_resp, void (*rt_handler)(unsigned char *data)); 86 87extern int nvec_ps2(struct nvec_chip *nvec); 88extern int nvec_kbd_init(struct nvec_chip *nvec); 89 90#define I2C_CNFG 0x00 91#define I2C_CNFG_PACKET_MODE_EN (1<<10) 92#define I2C_CNFG_NEW_MASTER_SFM (1<<11) 93#define I2C_CNFG_DEBOUNCE_CNT_SHIFT 12 94 95#define I2C_SL_CNFG 0x20 96#define I2C_SL_NEWL (1<<2) 97#define I2C_SL_NACK (1<<1) 98#define I2C_SL_RESP (1<<0) 99#define I2C_SL_IRQ (1<<3) 100#define END_TRANS (1<<4) 101#define RCVD (1<<2) 102#define RNW (1<<1) 103 104#define I2C_SL_RCVD 0x24 105#define I2C_SL_STATUS 0x28 106#define I2C_SL_ADDR1 0x2c 107#define I2C_SL_ADDR2 0x30 108#define I2C_SL_DELAY_COUNT 0x3c 109 110#endif