Lines Matching +full:reg +full:- +full:addr

1 // SPDX-License-Identifier: GPL-2.0+
21 * 32-bit register address: the lower 8 bits of the register address come
22 * from the offset addr byte and the upper 24 bits come from the page register.
29 * 15-bit register address: the lower 7 bits of the register address come
30 * from the offset addr byte and the upper 8 bits come from the page register.
35 typedef int (*rsmu_rw_device)(struct rsmu_ddata *rsmu, u8 reg, u8 *buf, u8 bytes);
49 static bool rsmu_sabre_volatile_reg(struct device *dev, unsigned int reg) in rsmu_sabre_volatile_reg() argument
51 switch (reg) { in rsmu_sabre_volatile_reg()
59 static int rsmu_smbus_i2c_write_device(struct rsmu_ddata *rsmu, u8 reg, u8 *buf, u8 bytes) in rsmu_smbus_i2c_write_device() argument
61 struct i2c_client *client = to_i2c_client(rsmu->dev); in rsmu_smbus_i2c_write_device()
63 return i2c_smbus_write_i2c_block_data(client, reg, bytes, buf); in rsmu_smbus_i2c_write_device()
66 static int rsmu_smbus_i2c_read_device(struct rsmu_ddata *rsmu, u8 reg, u8 *buf, u8 bytes) in rsmu_smbus_i2c_read_device() argument
68 struct i2c_client *client = to_i2c_client(rsmu->dev); in rsmu_smbus_i2c_read_device()
71 ret = i2c_smbus_read_i2c_block_data(client, reg, bytes, buf); in rsmu_smbus_i2c_read_device()
77 return -EIO; in rsmu_smbus_i2c_read_device()
80 static int rsmu_i2c_read_device(struct rsmu_ddata *rsmu, u8 reg, u8 *buf, u8 bytes) in rsmu_i2c_read_device() argument
82 struct i2c_client *client = to_i2c_client(rsmu->dev); in rsmu_i2c_read_device()
86 msg[0].addr = client->addr; in rsmu_i2c_read_device()
89 msg[0].buf = ® in rsmu_i2c_read_device()
91 msg[1].addr = client->addr; in rsmu_i2c_read_device()
96 cnt = i2c_transfer(client->adapter, msg, 2); in rsmu_i2c_read_device()
99 dev_err(rsmu->dev, "i2c_transfer failed at addr: %04x!", reg); in rsmu_i2c_read_device()
102 dev_err(rsmu->dev, in rsmu_i2c_read_device()
104 return -EIO; in rsmu_i2c_read_device()
110 static int rsmu_i2c_write_device(struct rsmu_ddata *rsmu, u8 reg, u8 *buf, u8 bytes) in rsmu_i2c_write_device() argument
112 struct i2c_client *client = to_i2c_client(rsmu->dev); in rsmu_i2c_write_device()
118 return -EINVAL; in rsmu_i2c_write_device()
120 msg[0] = reg; in rsmu_i2c_write_device()
126 dev_err(&client->dev, in rsmu_i2c_write_device()
127 "i2c_master_send failed at addr: %04x!", reg); in rsmu_i2c_write_device()
134 static int rsmu_write_page_register(struct rsmu_ddata *rsmu, u32 reg, in rsmu_write_page_register() argument
137 u32 page = reg & RSMU_CM_PAGE_MASK; in rsmu_write_page_register()
141 /* Do not modify offset register for none-scsr registers */ in rsmu_write_page_register()
142 if (reg < RSMU_CM_SCSR_BASE) in rsmu_write_page_register()
146 if (rsmu->page == page) in rsmu_write_page_register()
156 dev_err(rsmu->dev, "Failed to set page offset 0x%x\n", page); in rsmu_write_page_register()
159 rsmu->page = page; in rsmu_write_page_register()
164 static int rsmu_i2c_reg_read(void *context, unsigned int reg, unsigned int *val) in rsmu_i2c_reg_read() argument
167 u8 addr = (u8)(reg & RSMU_CM_ADDRESS_MASK); in rsmu_i2c_reg_read() local
170 err = rsmu_write_page_register(rsmu, reg, rsmu_i2c_write_device); in rsmu_i2c_reg_read()
174 err = rsmu_i2c_read_device(rsmu, addr, (u8 *)val, 1); in rsmu_i2c_reg_read()
176 dev_err(rsmu->dev, "Failed to read offset address 0x%x\n", addr); in rsmu_i2c_reg_read()
181 static int rsmu_i2c_reg_write(void *context, unsigned int reg, unsigned int val) in rsmu_i2c_reg_write() argument
184 u8 addr = (u8)(reg & RSMU_CM_ADDRESS_MASK); in rsmu_i2c_reg_write() local
188 err = rsmu_write_page_register(rsmu, reg, rsmu_i2c_write_device); in rsmu_i2c_reg_write()
192 err = rsmu_i2c_write_device(rsmu, addr, &data, 1); in rsmu_i2c_reg_write()
194 dev_err(rsmu->dev, in rsmu_i2c_reg_write()
195 "Failed to write offset address 0x%x\n", addr); in rsmu_i2c_reg_write()
200 static int rsmu_smbus_i2c_reg_read(void *context, unsigned int reg, unsigned int *val) in rsmu_smbus_i2c_reg_read() argument
203 u8 addr = (u8)(reg & RSMU_CM_ADDRESS_MASK); in rsmu_smbus_i2c_reg_read() local
206 err = rsmu_write_page_register(rsmu, reg, rsmu_smbus_i2c_write_device); in rsmu_smbus_i2c_reg_read()
210 err = rsmu_smbus_i2c_read_device(rsmu, addr, (u8 *)val, 1); in rsmu_smbus_i2c_reg_read()
212 dev_err(rsmu->dev, "Failed to read offset address 0x%x\n", addr); in rsmu_smbus_i2c_reg_read()
217 static int rsmu_smbus_i2c_reg_write(void *context, unsigned int reg, unsigned int val) in rsmu_smbus_i2c_reg_write() argument
220 u8 addr = (u8)(reg & RSMU_CM_ADDRESS_MASK); in rsmu_smbus_i2c_reg_write() local
224 err = rsmu_write_page_register(rsmu, reg, rsmu_smbus_i2c_write_device); in rsmu_smbus_i2c_reg_write()
228 err = rsmu_smbus_i2c_write_device(rsmu, addr, &data, 1); in rsmu_smbus_i2c_reg_write()
230 dev_err(rsmu->dev, in rsmu_smbus_i2c_reg_write()
231 "Failed to write offset address 0x%x\n", addr); in rsmu_smbus_i2c_reg_write()
281 rsmu = devm_kzalloc(&client->dev, sizeof(*rsmu), GFP_KERNEL); in rsmu_i2c_probe()
283 return -ENOMEM; in rsmu_i2c_probe()
287 rsmu->dev = &client->dev; in rsmu_i2c_probe()
288 rsmu->type = (enum rsmu_type)id->driver_data; in rsmu_i2c_probe()
290 switch (rsmu->type) { in rsmu_i2c_probe()
292 if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { in rsmu_i2c_probe()
294 } else if (i2c_check_functionality(client->adapter, in rsmu_i2c_probe()
298 dev_err(rsmu->dev, "Unsupported i2c adapter\n"); in rsmu_i2c_probe()
299 return -ENOTSUPP; in rsmu_i2c_probe()
309 dev_err(rsmu->dev, "Unsupported RSMU device type: %d\n", rsmu->type); in rsmu_i2c_probe()
310 return -ENODEV; in rsmu_i2c_probe()
313 if (rsmu->type == RSMU_CM) in rsmu_i2c_probe()
314 rsmu->regmap = devm_regmap_init(&client->dev, NULL, client, cfg); in rsmu_i2c_probe()
316 rsmu->regmap = devm_regmap_init_i2c(client, cfg); in rsmu_i2c_probe()
318 if (IS_ERR(rsmu->regmap)) { in rsmu_i2c_probe()
319 ret = PTR_ERR(rsmu->regmap); in rsmu_i2c_probe()
320 dev_err(rsmu->dev, "Failed to allocate register map: %d\n", ret); in rsmu_i2c_probe()
358 .name = "rsmu-i2c",