diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2014-08-02 06:45:39 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-08-02 06:45:39 +0200 |
commit | 14963b8c461b9d1c310554b414238a6e97d1a8c0 (patch) | |
tree | e055fde63a1db05ee4a2592c338538cf33bf37c8 /include | |
parent | ed98f1522d2157a0266095b00ab1481da6085337 (diff) | |
parent | f66e9dd041a91c98b15509a7aebe293491e63e8f (diff) | |
download | barebox-14963b8c461b9d1c310554b414238a6e97d1a8c0.tar.gz barebox-14963b8c461b9d1c310554b414238a6e97d1a8c0.tar.xz |
Merge branch 'for-next/i2c' into HEAD
Diffstat (limited to 'include')
-rw-r--r-- | include/i2c/i2c.h | 57 | ||||
-rw-r--r-- | include/platform_data/pca953x.h | 27 |
2 files changed, 84 insertions, 0 deletions
diff --git a/include/i2c/i2c.h b/include/i2c/i2c.h index a107f5edb7..4696f43e31 100644 --- a/include/i2c/i2c.h +++ b/include/i2c/i2c.h @@ -85,6 +85,63 @@ struct i2c_client { #define to_i2c_client(a) container_of(a, struct i2c_client, dev) +/*flags for the client struct: */ +#define I2C_CLIENT_PEC 0x04 /* Use Packet Error Checking */ +#define I2C_CLIENT_SCCB 0x9000 /* Use Omnivision SCCB protocol */ + /* Must match I2C_M_STOP|IGNORE_NAK */ + +/* + * Data for SMBus Messages + */ +#define I2C_SMBUS_BLOCK_MAX 32 /* As specified in SMBus standard */ +union i2c_smbus_data { + __u8 byte; + __u16 word; + __u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */ + /* and one more for user-space compatibility */ +}; + +/* i2c_smbus_xfer read or write markers */ +#define I2C_SMBUS_READ 1 +#define I2C_SMBUS_WRITE 0 + +/* SMBus transaction types (size parameter in the above functions) + Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */ +#define I2C_SMBUS_QUICK 0 +#define I2C_SMBUS_BYTE 1 +#define I2C_SMBUS_BYTE_DATA 2 +#define I2C_SMBUS_WORD_DATA 3 +#define I2C_SMBUS_I2C_BLOCK_DATA 8 + +/* This is the very generalized SMBus access routine. You probably do not + want to use this, though; one of the functions below may be much easier, + and probably just as fast. + Note that we use i2c_adapter here, because you do not need a specific + smbus adapter to call this function. */ +extern s32 i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr, + unsigned short flags, char read_write, u8 command, + int size, union i2c_smbus_data *data); + +/* Now follow the 'nice' access routines. These also document the calling + conventions of i2c_smbus_xfer. */ + +extern s32 i2c_smbus_read_byte(const struct i2c_client *client); +extern s32 i2c_smbus_write_byte(const struct i2c_client *client, u8 value); +extern s32 i2c_smbus_read_byte_data(const struct i2c_client *client, + u8 command); +extern s32 i2c_smbus_write_byte_data(const struct i2c_client *client, + u8 command, u8 value); +extern s32 i2c_smbus_read_word_data(const struct i2c_client *client, + u8 command); +extern s32 i2c_smbus_write_word_data(const struct i2c_client *client, + u8 command, u16 value); + +/* Returns the number of read bytes */ +extern s32 i2c_smbus_read_i2c_block_data(const struct i2c_client *client, + u8 command, u8 length, u8 *values); +extern s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client, + u8 command, u8 length, + const u8 *values); /** * struct i2c_board_info - template for device creation diff --git a/include/platform_data/pca953x.h b/include/platform_data/pca953x.h new file mode 100644 index 0000000000..cfd253ebce --- /dev/null +++ b/include/platform_data/pca953x.h @@ -0,0 +1,27 @@ +#ifndef _LINUX_PCA953X_H +#define _LINUX_PCA953X_H + +#include <linux/types.h> +#include <i2c/i2c.h> + +/* platform data for the PCA9539 16-bit I/O expander driver */ + +struct pca953x_platform_data { + /* number of the first GPIO */ + unsigned gpio_base; + + /* initial polarity inversion setting */ + u32 invert; + + void *context; /* param to setup/teardown */ + + int (*setup)(struct i2c_client *client, + unsigned gpio, unsigned ngpio, + void *context); + int (*teardown)(struct i2c_client *client, + unsigned gpio, unsigned ngpio, + void *context); + const char *const *names; +}; + +#endif /* _LINUX_PCA953X_H */ |