Lines Matching +full:client +full:- +full:id

1 // SPDX-License-Identifier: GPL-2.0
10 * instantiates a dummy I2C client at the second I2C address to report
19 * The chip supports reading per-phase temperatures and per-phase input/output
22 * register values and reports per-phase information in PMBus page 0.
50 enum chips id; member
58 static int max16601_read_byte(struct i2c_client *client, int page, int reg) in max16601_read_byte() argument
60 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in max16601_read_byte()
65 return i2c_smbus_read_byte_data(data->vsa, reg); in max16601_read_byte()
66 return -EOPNOTSUPP; in max16601_read_byte()
68 return -ENODATA; in max16601_read_byte()
71 static int max16601_read_word(struct i2c_client *client, int page, int phase, in max16601_read_word() argument
74 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in max16601_read_word()
82 return -ENODATA; in max16601_read_word()
87 ret = i2c_smbus_write_byte_data(client, REG_PHASE_ID, in max16601_read_word()
91 ret = i2c_smbus_read_block_data(client, in max16601_read_word()
97 return -EIO; in max16601_read_word()
109 return -EOPNOTSUPP; in max16601_read_word()
113 return i2c_smbus_read_word_data(client, REG_IIN_SENSOR); in max16601_read_word()
115 return i2c_smbus_read_word_data(client, in max16601_read_word()
120 return -EOPNOTSUPP; in max16601_read_word()
124 ret = i2c_smbus_read_word_data(data->vsa, in max16601_read_word()
129 sign_extend32(data->iout_avg_pkg, 10)) in max16601_read_word()
130 data->iout_avg_pkg = ret; in max16601_read_word()
131 return data->iout_avg_pkg; in max16601_read_word()
142 return i2c_smbus_read_word_data(data->vsa, reg); in max16601_read_word()
144 return -EOPNOTSUPP; in max16601_read_word()
147 return -EOPNOTSUPP; in max16601_read_word()
151 static int max16601_write_byte(struct i2c_client *client, int page, u8 reg) in max16601_write_byte() argument
153 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in max16601_write_byte()
158 return i2c_smbus_write_byte(data->vsa, reg); in max16601_write_byte()
159 return -EOPNOTSUPP; in max16601_write_byte()
161 return -ENODATA; in max16601_write_byte()
164 static int max16601_write_word(struct i2c_client *client, int page, int reg, in max16601_write_word() argument
167 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in max16601_write_word()
172 return -ENODATA; in max16601_write_word()
175 return -EOPNOTSUPP; in max16601_write_word()
179 data->iout_avg_pkg = 0xfc00; in max16601_write_word()
185 return i2c_smbus_write_word_data(data->vsa, reg, value); in max16601_write_word()
187 return -EOPNOTSUPP; in max16601_write_word()
192 static int max16601_identify(struct i2c_client *client, in max16601_identify() argument
198 reg = i2c_smbus_read_byte_data(client, REG_SETPT_DVID); in max16601_identify()
202 info->vrm_version[0] = vr13; in max16601_identify()
204 info->vrm_version[0] = vr12; in max16601_identify()
206 if (data->id != max16600 && data->id != max16601 && data->id != max16602) in max16601_identify()
209 reg = i2c_smbus_read_byte_data(client, REG_DEFAULT_NUM_POP); in max16601_identify()
219 info->phases[0] = reg; in max16601_identify()
262 i2c_unregister_device(data->vsa); in max16601_remove()
274 static int max16601_get_id(struct i2c_client *client) in max16601_get_id() argument
276 struct device *dev = &client->dev; in max16601_get_id()
278 enum chips id; in max16601_get_id() local
281 ret = i2c_smbus_read_block_data(client, PMBUS_IC_DEVICE_ID, buf); in max16601_get_id()
283 return -ENODEV; in max16601_get_id()
290 id = max16508; in max16601_get_id()
292 id = max16600; in max16601_get_id()
294 id = max16601; in max16601_get_id()
296 id = max16602; in max16601_get_id()
300 return -ENODEV; in max16601_get_id()
302 return id; in max16601_get_id()
305 static int max16601_probe(struct i2c_client *client) in max16601_probe() argument
307 struct device *dev = &client->dev; in max16601_probe()
308 const struct i2c_device_id *id; in max16601_probe() local
312 if (!i2c_check_functionality(client->adapter, in max16601_probe()
315 return -ENODEV; in max16601_probe()
317 chip_id = max16601_get_id(client); in max16601_probe()
321 id = i2c_match_id(max16601_id, client); in max16601_probe()
322 if (chip_id != id->driver_data) in max16601_probe()
323 dev_warn(&client->dev, in max16601_probe()
325 id->name, (int) id->driver_data, chip_id); in max16601_probe()
327 ret = i2c_smbus_read_byte_data(client, REG_PHASE_ID); in max16601_probe()
333 return -ENODEV; in max16601_probe()
338 return -ENOMEM; in max16601_probe()
340 data->id = chip_id; in max16601_probe()
341 data->iout_avg_pkg = 0xfc00; in max16601_probe()
342 data->vsa = i2c_new_dummy_device(client->adapter, client->addr + 1); in max16601_probe()
343 if (IS_ERR(data->vsa)) { in max16601_probe()
344 dev_err(dev, "Failed to register VSA client\n"); in max16601_probe()
345 return PTR_ERR(data->vsa); in max16601_probe()
351 data->info = max16601_info; in max16601_probe()
353 return pmbus_do_probe(client, &data->info); in max16601_probe()
366 MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");