I2C:I2c-PNX: Add SMBus support to the I2C driver
[linux-2.6.34-lpc32xx.git] / include / linux / i2c-pnx.h
1 /*
2  * Header file for I2C support on PNX010x/4008.
3  *
4  * Author: Dennis Kovalev <dkovalev@ru.mvista.com>
5  *
6  * 2004-2006 (c) MontaVista Software, Inc. This file is licensed under
7  * the terms of the GNU General Public License version 2. This program
8  * is licensed "as is" without any warranty of any kind, whether express
9  * or implied.
10  */
11
12 #ifndef __I2C_PNX_H__
13 #define __I2C_PNX_H__
14 #include <linux/i2c.h>
15
16 struct platform_device;
17 struct clk;
18
19 struct i2c_pnx_mif {
20         int                     ret;            /* Return value */
21         int                     mode;           /* Interface mode */
22         struct completion       complete;       /* I/O completion */
23         struct timer_list       timer;          /* Timeout */
24         u8 *                    buf;            /* Data buffer */
25         int                     len;            /* Length of data buffer */
26 };
27
28 struct i2c_pnx_smbus {
29         int ret; /* Return value from ISR */
30         int index; /* ISR use it for tx */
31         int rx_cnt; /* Number of data received */
32         u16 tx_buf[I2C_SMBUS_BLOCK_MAX+8]; /* Tx buffer */
33         u8 *rx_buf; /* Rx buffer */
34         int max_rx_len; /* Max. len. of expected Rx data */
35         struct completion complete;
36         int len; /* Length of data to be transmitted */
37 #define I2C_PNX_SMBUS_NEED_RESET  1 /* Bus needs reset */
38 #define I2C_PNX_SMBUS_ACTIVE      2 /* SMBus active */
39 #define I2C_PNX_SMBUS_BLOCK_RX    4 /* Block transfer */
40 #define I2C_PNX_SMBUS_WORD_RX     8 /* Word transfer */
41         u32 flags; /* Updated by ISR */
42         int slave_addr;
43 };
44
45 struct i2c_pnx_algo_data {
46         void __iomem            *ioaddr;
47         struct i2c_pnx_mif      mif;
48         struct i2c_pnx_smbus smb;
49         int                     last;
50         struct clk              *clk;
51         struct i2c_pnx_data     *i2c_pnx;
52         struct i2c_adapter      adapter;
53 };
54
55 struct i2c_pnx_data {
56         const char *name;
57         u32 base;
58         int irq;
59 };
60
61 #endif /* __I2C_PNX_H__ */