0001
0002 #ifndef _LINUX_I2C_ALGO_PCA_H
0003 #define _LINUX_I2C_ALGO_PCA_H
0004
0005
0006 #define I2C_PCA_CHIP_9564 0x00
0007 #define I2C_PCA_CHIP_9665 0x01
0008
0009
0010 #define I2C_PCA_OSC_PER 3
0011
0012
0013 #define I2C_PCA_CON_330kHz 0x00
0014 #define I2C_PCA_CON_288kHz 0x01
0015 #define I2C_PCA_CON_217kHz 0x02
0016 #define I2C_PCA_CON_146kHz 0x03
0017 #define I2C_PCA_CON_88kHz 0x04
0018 #define I2C_PCA_CON_59kHz 0x05
0019 #define I2C_PCA_CON_44kHz 0x06
0020 #define I2C_PCA_CON_36kHz 0x07
0021
0022
0023 #define I2C_PCA_STA 0x00
0024 #define I2C_PCA_TO 0x00
0025 #define I2C_PCA_DAT 0x01
0026 #define I2C_PCA_ADR 0x02
0027 #define I2C_PCA_CON 0x03
0028
0029
0030 #define I2C_PCA_INDPTR 0x00
0031 #define I2C_PCA_IND 0x02
0032
0033
0034 #define I2C_PCA_ICOUNT 0x00
0035 #define I2C_PCA_IADR 0x01
0036 #define I2C_PCA_ISCLL 0x02
0037 #define I2C_PCA_ISCLH 0x03
0038 #define I2C_PCA_ITO 0x04
0039 #define I2C_PCA_IPRESET 0x05
0040 #define I2C_PCA_IMODE 0x06
0041
0042
0043 #define I2C_PCA_MODE_STD 0x00
0044 #define I2C_PCA_MODE_FAST 0x01
0045 #define I2C_PCA_MODE_FASTP 0x02
0046 #define I2C_PCA_MODE_TURBO 0x03
0047
0048
0049 #define I2C_PCA_CON_AA 0x80
0050 #define I2C_PCA_CON_ENSIO 0x40
0051 #define I2C_PCA_CON_STA 0x20
0052 #define I2C_PCA_CON_STO 0x10
0053 #define I2C_PCA_CON_SI 0x08
0054 #define I2C_PCA_CON_CR 0x07
0055
0056
0057
0058
0059
0060
0061
0062
0063 struct pca_i2c_bus_settings {
0064 int mode;
0065 int tlow;
0066 int thi;
0067 int clock_freq;
0068 };
0069
0070 struct i2c_algo_pca_data {
0071 void *data;
0072 void (*write_byte) (void *data, int reg, int val);
0073 int (*read_byte) (void *data, int reg);
0074 int (*wait_for_completion) (void *data);
0075 void (*reset_chip) (void *data);
0076
0077
0078
0079 unsigned int i2c_clock;
0080 unsigned int chip;
0081 struct pca_i2c_bus_settings bus_settings;
0082 };
0083
0084 int i2c_pca_add_bus(struct i2c_adapter *);
0085 int i2c_pca_add_numbered_bus(struct i2c_adapter *);
0086
0087 #endif