Lines Matching full:i2c
2 * I2C driver for Marvell 88PM860x
14 #include <linux/i2c.h>
20 int pm860x_reg_read(struct i2c_client *i2c, int reg) in pm860x_reg_read() argument
22 struct pm860x_chip *chip = i2c_get_clientdata(i2c); in pm860x_reg_read()
23 struct regmap *map = (i2c == chip->client) ? chip->regmap in pm860x_reg_read()
36 int pm860x_reg_write(struct i2c_client *i2c, int reg, in pm860x_reg_write() argument
39 struct pm860x_chip *chip = i2c_get_clientdata(i2c); in pm860x_reg_write()
40 struct regmap *map = (i2c == chip->client) ? chip->regmap in pm860x_reg_write()
49 int pm860x_bulk_read(struct i2c_client *i2c, int reg, in pm860x_bulk_read() argument
52 struct pm860x_chip *chip = i2c_get_clientdata(i2c); in pm860x_bulk_read()
53 struct regmap *map = (i2c == chip->client) ? chip->regmap in pm860x_bulk_read()
62 int pm860x_bulk_write(struct i2c_client *i2c, int reg, in pm860x_bulk_write() argument
65 struct pm860x_chip *chip = i2c_get_clientdata(i2c); in pm860x_bulk_write()
66 struct regmap *map = (i2c == chip->client) ? chip->regmap in pm860x_bulk_write()
75 int pm860x_set_bits(struct i2c_client *i2c, int reg, in pm860x_set_bits() argument
78 struct pm860x_chip *chip = i2c_get_clientdata(i2c); in pm860x_set_bits()
79 struct regmap *map = (i2c == chip->client) ? chip->regmap in pm860x_set_bits()
88 static int read_device(struct i2c_client *i2c, int reg, in read_device() argument
93 struct i2c_adapter *adap = i2c->adapter; in read_device()
94 struct i2c_msg msg[2] = {{i2c->addr, 0, 1, msgbuf0}, in read_device()
95 {i2c->addr, I2C_M_RD, 0, msgbuf1}, in read_device()
114 static int write_device(struct i2c_client *i2c, int reg, in write_device() argument
118 struct i2c_adapter *adap = i2c->adapter; in write_device()
124 msg.addr = i2c->addr; in write_device()
135 int pm860x_page_reg_read(struct i2c_client *i2c, int reg) in pm860x_page_reg_read() argument
141 i2c_lock_adapter(i2c->adapter); in pm860x_page_reg_read()
142 read_device(i2c, 0xFA, 0, &zero); in pm860x_page_reg_read()
143 read_device(i2c, 0xFB, 0, &zero); in pm860x_page_reg_read()
144 read_device(i2c, 0xFF, 0, &zero); in pm860x_page_reg_read()
145 ret = read_device(i2c, reg, 1, &data); in pm860x_page_reg_read()
148 read_device(i2c, 0xFE, 0, &zero); in pm860x_page_reg_read()
149 read_device(i2c, 0xFC, 0, &zero); in pm860x_page_reg_read()
150 i2c_unlock_adapter(i2c->adapter); in pm860x_page_reg_read()
155 int pm860x_page_reg_write(struct i2c_client *i2c, int reg, in pm860x_page_reg_write() argument
161 i2c_lock_adapter(i2c->adapter); in pm860x_page_reg_write()
162 read_device(i2c, 0xFA, 0, &zero); in pm860x_page_reg_write()
163 read_device(i2c, 0xFB, 0, &zero); in pm860x_page_reg_write()
164 read_device(i2c, 0xFF, 0, &zero); in pm860x_page_reg_write()
165 ret = write_device(i2c, reg, 1, &data); in pm860x_page_reg_write()
166 read_device(i2c, 0xFE, 0, &zero); in pm860x_page_reg_write()
167 read_device(i2c, 0xFC, 0, &zero); in pm860x_page_reg_write()
168 i2c_unlock_adapter(i2c->adapter); in pm860x_page_reg_write()
173 int pm860x_page_bulk_read(struct i2c_client *i2c, int reg, in pm860x_page_bulk_read() argument
179 i2c_lock_adapter(i2c->adapter); in pm860x_page_bulk_read()
180 read_device(i2c, 0xfa, 0, &zero); in pm860x_page_bulk_read()
181 read_device(i2c, 0xfb, 0, &zero); in pm860x_page_bulk_read()
182 read_device(i2c, 0xff, 0, &zero); in pm860x_page_bulk_read()
183 ret = read_device(i2c, reg, count, buf); in pm860x_page_bulk_read()
184 read_device(i2c, 0xFE, 0, &zero); in pm860x_page_bulk_read()
185 read_device(i2c, 0xFC, 0, &zero); in pm860x_page_bulk_read()
186 i2c_unlock_adapter(i2c->adapter); in pm860x_page_bulk_read()
191 int pm860x_page_bulk_write(struct i2c_client *i2c, int reg, in pm860x_page_bulk_write() argument
197 i2c_lock_adapter(i2c->adapter); in pm860x_page_bulk_write()
198 read_device(i2c, 0xFA, 0, &zero); in pm860x_page_bulk_write()
199 read_device(i2c, 0xFB, 0, &zero); in pm860x_page_bulk_write()
200 read_device(i2c, 0xFF, 0, &zero); in pm860x_page_bulk_write()
201 ret = write_device(i2c, reg, count, buf); in pm860x_page_bulk_write()
202 read_device(i2c, 0xFE, 0, &zero); in pm860x_page_bulk_write()
203 read_device(i2c, 0xFC, 0, &zero); in pm860x_page_bulk_write()
204 i2c_unlock_adapter(i2c->adapter); in pm860x_page_bulk_write()
205 i2c_unlock_adapter(i2c->adapter); in pm860x_page_bulk_write()
210 int pm860x_page_set_bits(struct i2c_client *i2c, int reg, in pm860x_page_set_bits() argument
217 i2c_lock_adapter(i2c->adapter); in pm860x_page_set_bits()
218 read_device(i2c, 0xFA, 0, &zero); in pm860x_page_set_bits()
219 read_device(i2c, 0xFB, 0, &zero); in pm860x_page_set_bits()
220 read_device(i2c, 0xFF, 0, &zero); in pm860x_page_set_bits()
221 ret = read_device(i2c, reg, 1, &value); in pm860x_page_set_bits()
226 ret = write_device(i2c, reg, 1, &value); in pm860x_page_set_bits()
228 read_device(i2c, 0xFE, 0, &zero); in pm860x_page_set_bits()
229 read_device(i2c, 0xFC, 0, &zero); in pm860x_page_set_bits()
230 i2c_unlock_adapter(i2c->adapter); in pm860x_page_set_bits()
239 MODULE_DEVICE_TABLE(i2c, pm860x_id_table);
241 static int verify_addr(struct i2c_client *i2c) in verify_addr() argument
247 if (i2c == NULL) in verify_addr()
251 if (i2c->addr == *(addr_8606 + i)) in verify_addr()
256 if (i2c->addr == *(addr_8607 + i)) in verify_addr()
352 pr_err("Failed to register 88PM860x I2C driver: %d\n", ret); in pm860x_i2c_init()
363 MODULE_DESCRIPTION("I2C Driver for Marvell 88PM860x");