Merge remote-tracking branch 'moduleh/module.h-split'
[linux-2.6/next.git] / drivers / staging / nvec / nvec.h
blobd9ff721d1d8d3dcaa52942371c8f57c870916255
1 #ifndef __LINUX_MFD_NVEC
2 #define __LINUX_MFD_NVEC
4 #include <linux/semaphore.h>
6 typedef enum {
7 NVEC_2BYTES,
8 NVEC_3BYTES,
9 NVEC_VAR_SIZE
10 } nvec_size;
12 typedef enum {
13 NOT_REALLY,
14 YES,
15 NOT_AT_ALL,
16 } how_care;
18 typedef 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;
28 typedef enum {
29 NVEC_WAIT,
30 NVEC_READ,
31 NVEC_WRITE
32 } nvec_state;
34 struct nvec_msg {
35 unsigned char *data;
36 unsigned short size;
37 unsigned short pos;
38 struct list_head node;
41 struct nvec_subdev {
42 const char *name;
43 void *platform_data;
44 int id;
47 struct nvec_platform_data {
48 int i2c_addr;
49 int gpio;
52 struct nvec_chip {
53 struct device *dev;
54 int gpio;
55 int irq;
56 int i2c_addr;
57 void __iomem *base;
58 struct clk *i2c_clk;
59 nvec_state state;
60 struct atomic_notifier_head notifier_list;
61 struct list_head rx_data, tx_data;
62 struct notifier_block nvec_status_notifier;
63 struct work_struct rx_work, tx_work;
64 struct nvec_msg *rx, *tx;
66 /* sync write stuff */
67 struct semaphore sync_write_mutex;
68 struct completion sync_write;
69 u16 sync_write_pending;
70 struct nvec_msg *last_sync_msg;
73 extern void nvec_write_async(struct nvec_chip *nvec, unsigned char *data, short size);
75 extern int nvec_register_notifier(struct nvec_chip *nvec,
76 struct notifier_block *nb, unsigned int events);
78 extern int nvec_unregister_notifier(struct device *dev,
79 struct notifier_block *nb, unsigned int events);
81 const char *nvec_send_msg(unsigned char *src, unsigned char *dst_size, how_care care_resp, void (*rt_handler)(unsigned char *data));
83 #define I2C_CNFG 0x00
84 #define I2C_CNFG_PACKET_MODE_EN (1<<10)
85 #define I2C_CNFG_NEW_MASTER_SFM (1<<11)
86 #define I2C_CNFG_DEBOUNCE_CNT_SHIFT 12
88 #define I2C_SL_CNFG 0x20
89 #define I2C_SL_NEWL (1<<2)
90 #define I2C_SL_NACK (1<<1)
91 #define I2C_SL_RESP (1<<0)
92 #define I2C_SL_IRQ (1<<3)
93 #define END_TRANS (1<<4)
94 #define RCVD (1<<2)
95 #define RNW (1<<1)
97 #define I2C_SL_RCVD 0x24
98 #define I2C_SL_STATUS 0x28
99 #define I2C_SL_ADDR1 0x2c
100 #define I2C_SL_ADDR2 0x30
101 #define I2C_SL_DELAY_COUNT 0x3c
103 #endif