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

1 // SPDX-License-Identifier: GPL-2.0
9 * instantiates a dummy I2C client at the second I2C address to report
18 * The chip supports reading per-phase temperatures and per-phase input/output
21 * register values and reports per-phase information in PMBus page 0.
49 enum chips id; member
57 static int max16601_read_byte(struct i2c_client *client, int page, int reg) in max16601_read_byte() argument
59 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in max16601_read_byte()
64 return i2c_smbus_read_byte_data(data->vsa, reg); in max16601_read_byte()
65 return -EOPNOTSUPP; in max16601_read_byte()
67 return -ENODATA; in max16601_read_byte()
70 static int max16601_read_word(struct i2c_client *client, int page, int phase, in max16601_read_word() argument
73 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in max16601_read_word()
81 return -ENODATA; in max16601_read_word()
86 ret = i2c_smbus_write_byte_data(client, REG_PHASE_ID, in max16601_read_word()
90 ret = i2c_smbus_read_block_data(client, in max16601_read_word()
96 return -EIO; in max16601_read_word()
108 return -EOPNOTSUPP; in max16601_read_word()
112 return i2c_smbus_read_word_data(client, REG_IIN_SENSOR); in max16601_read_word()
114 return i2c_smbus_read_word_data(client, in max16601_read_word()
119 return -EOPNOTSUPP; in max16601_read_word()
123 ret = i2c_smbus_read_word_data(data->vsa, in max16601_read_word()
128 sign_extend32(data->iout_avg_pkg, 10)) in max16601_read_word()
129 data->iout_avg_pkg = ret; in max16601_read_word()
130 return data->iout_avg_pkg; in max16601_read_word()
141 return i2c_smbus_read_word_data(data->vsa, reg); in max16601_read_word()
143 return -EOPNOTSUPP; in max16601_read_word()
146 return -EOPNOTSUPP; in max16601_read_word()
150 static int max16601_write_byte(struct i2c_client *client, int page, u8 reg) in max16601_write_byte() argument
152 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in max16601_write_byte()
157 return i2c_smbus_write_byte(data->vsa, reg); in max16601_write_byte()
158 return -EOPNOTSUPP; in max16601_write_byte()
160 return -ENODATA; in max16601_write_byte()
163 static int max16601_write_word(struct i2c_client *client, int page, int reg, in max16601_write_word() argument
166 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in max16601_write_word()
171 return -ENODATA; in max16601_write_word()
174 return -EOPNOTSUPP; in max16601_write_word()
178 data->iout_avg_pkg = 0xfc00; in max16601_write_word()
184 return i2c_smbus_write_word_data(data->vsa, reg, value); in max16601_write_word()
186 return -EOPNOTSUPP; in max16601_write_word()
191 static int max16601_identify(struct i2c_client *client, in max16601_identify() argument
197 reg = i2c_smbus_read_byte_data(client, REG_SETPT_DVID); in max16601_identify()
201 info->vrm_version[0] = vr13; in max16601_identify()
203 info->vrm_version[0] = vr12; in max16601_identify()
205 if (data->id != max16601 && data->id != max16602) in max16601_identify()
208 reg = i2c_smbus_read_byte_data(client, REG_DEFAULT_NUM_POP); in max16601_identify()
218 info->phases[0] = reg; in max16601_identify()
261 i2c_unregister_device(data->vsa); in max16601_remove()
272 static int max16601_get_id(struct i2c_client *client) in max16601_get_id() argument
274 struct device *dev = &client->dev; in max16601_get_id()
276 enum chips id; in max16601_get_id() local
279 ret = i2c_smbus_read_block_data(client, PMBUS_IC_DEVICE_ID, buf); in max16601_get_id()
281 return -ENODEV; in max16601_get_id()
288 id = max16508; in max16601_get_id()
290 id = max16601; in max16601_get_id()
292 id = max16602; in max16601_get_id()
296 return -ENODEV; in max16601_get_id()
298 return id; in max16601_get_id()
301 static int max16601_probe(struct i2c_client *client) in max16601_probe() argument
303 struct device *dev = &client->dev; in max16601_probe()
304 const struct i2c_device_id *id; in max16601_probe() local
308 if (!i2c_check_functionality(client->adapter, in max16601_probe()
311 return -ENODEV; in max16601_probe()
313 chip_id = max16601_get_id(client); in max16601_probe()
317 id = i2c_match_id(max16601_id, client); in max16601_probe()
318 if (chip_id != id->driver_data) in max16601_probe()
319 dev_warn(&client->dev, in max16601_probe()
321 id->name, (int) id->driver_data, chip_id); in max16601_probe()
323 ret = i2c_smbus_read_byte_data(client, REG_PHASE_ID); in max16601_probe()
329 return -ENODEV; in max16601_probe()
334 return -ENOMEM; in max16601_probe()
336 data->id = chip_id; in max16601_probe()
337 data->iout_avg_pkg = 0xfc00; in max16601_probe()
338 data->vsa = i2c_new_dummy_device(client->adapter, client->addr + 1); in max16601_probe()
339 if (IS_ERR(data->vsa)) { in max16601_probe()
340 dev_err(dev, "Failed to register VSA client\n"); in max16601_probe()
341 return PTR_ERR(data->vsa); in max16601_probe()
347 data->info = max16601_info; in max16601_probe()
349 return pmbus_do_probe(client, &data->info); in max16601_probe()
362 MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");