0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __DDBRIDGE_I2C_H__
0011 #define __DDBRIDGE_I2C_H__
0012
0013 #include <linux/i2c.h>
0014
0015 #include "ddbridge.h"
0016
0017
0018
0019 void ddb_i2c_release(struct ddb *dev);
0020 int ddb_i2c_init(struct ddb *dev);
0021
0022
0023
0024 static int __maybe_unused i2c_io(struct i2c_adapter *adapter, u8 adr,
0025 u8 *wbuf, u32 wlen, u8 *rbuf, u32 rlen)
0026 {
0027 struct i2c_msg msgs[2] = { { .addr = adr, .flags = 0,
0028 .buf = wbuf, .len = wlen },
0029 { .addr = adr, .flags = I2C_M_RD,
0030 .buf = rbuf, .len = rlen } };
0031
0032 return (i2c_transfer(adapter, msgs, 2) == 2) ? 0 : -1;
0033 }
0034
0035 static int __maybe_unused i2c_write(struct i2c_adapter *adap, u8 adr,
0036 u8 *data, int len)
0037 {
0038 struct i2c_msg msg = { .addr = adr, .flags = 0,
0039 .buf = data, .len = len };
0040
0041 return (i2c_transfer(adap, &msg, 1) == 1) ? 0 : -1;
0042 }
0043
0044 static int __maybe_unused i2c_read(struct i2c_adapter *adapter, u8 adr, u8 *val)
0045 {
0046 struct i2c_msg msgs[1] = { { .addr = adr, .flags = I2C_M_RD,
0047 .buf = val, .len = 1 } };
0048
0049 return (i2c_transfer(adapter, msgs, 1) == 1) ? 0 : -1;
0050 }
0051
0052 static int __maybe_unused i2c_read_regs(struct i2c_adapter *adapter,
0053 u8 adr, u8 reg, u8 *val, u8 len)
0054 {
0055 struct i2c_msg msgs[2] = { { .addr = adr, .flags = 0,
0056 .buf = ®, .len = 1 },
0057 { .addr = adr, .flags = I2C_M_RD,
0058 .buf = val, .len = len } };
0059
0060 return (i2c_transfer(adapter, msgs, 2) == 2) ? 0 : -1;
0061 }
0062
0063 static int __maybe_unused i2c_read_regs16(struct i2c_adapter *adapter,
0064 u8 adr, u16 reg, u8 *val, u8 len)
0065 {
0066 u8 msg[2] = { reg >> 8, reg & 0xff };
0067 struct i2c_msg msgs[2] = { { .addr = adr, .flags = 0,
0068 .buf = msg, .len = 2 },
0069 { .addr = adr, .flags = I2C_M_RD,
0070 .buf = val, .len = len } };
0071
0072 return (i2c_transfer(adapter, msgs, 2) == 2) ? 0 : -1;
0073 }
0074
0075 static int __maybe_unused i2c_write_reg16(struct i2c_adapter *adap,
0076 u8 adr, u16 reg, u8 val)
0077 {
0078 u8 msg[3] = { reg >> 8, reg & 0xff, val };
0079
0080 return i2c_write(adap, adr, msg, 3);
0081 }
0082
0083 static int __maybe_unused i2c_write_reg(struct i2c_adapter *adap,
0084 u8 adr, u8 reg, u8 val)
0085 {
0086 u8 msg[2] = { reg, val };
0087
0088 return i2c_write(adap, adr, msg, 2);
0089 }
0090
0091 static int __maybe_unused i2c_read_reg16(struct i2c_adapter *adapter,
0092 u8 adr, u16 reg, u8 *val)
0093 {
0094 return i2c_read_regs16(adapter, adr, reg, val, 1);
0095 }
0096
0097 static int __maybe_unused i2c_read_reg(struct i2c_adapter *adapter,
0098 u8 adr, u8 reg, u8 *val)
0099 {
0100 return i2c_read_regs(adapter, adr, reg, val, 1);
0101 }
0102
0103 #endif