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) 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()
271 static int max16601_get_id(struct i2c_client *client) in max16601_get_id() argument
273 struct device *dev = &client->dev; in max16601_get_id()
275 enum chips id; in max16601_get_id() local
278 ret = i2c_smbus_read_block_data(client, PMBUS_IC_DEVICE_ID, buf); in max16601_get_id()
280 return -ENODEV; in max16601_get_id()
287 id = max16508; in max16601_get_id()
289 id = max16601; in max16601_get_id()
293 return -ENODEV; in max16601_get_id()
295 return id; in max16601_get_id()
298 static int max16601_probe(struct i2c_client *client) in max16601_probe() argument
300 struct device *dev = &client->dev; in max16601_probe()
301 const struct i2c_device_id *id; in max16601_probe() local
305 if (!i2c_check_functionality(client->adapter, in max16601_probe()
308 return -ENODEV; in max16601_probe()
310 chip_id = max16601_get_id(client); in max16601_probe()
314 id = i2c_match_id(max16601_id, client); in max16601_probe()
315 if (chip_id != id->driver_data) in max16601_probe()
316 dev_warn(&client->dev, in max16601_probe()
318 id->name, (int) id->driver_data, chip_id); in max16601_probe()
320 ret = i2c_smbus_read_byte_data(client, REG_PHASE_ID); in max16601_probe()
326 return -ENODEV; in max16601_probe()
331 return -ENOMEM; in max16601_probe()
333 data->id = chip_id; in max16601_probe()
334 data->iout_avg_pkg = 0xfc00; in max16601_probe()
335 data->vsa = i2c_new_dummy_device(client->adapter, client->addr + 1); in max16601_probe()
336 if (IS_ERR(data->vsa)) { in max16601_probe()
337 dev_err(dev, "Failed to register VSA client\n"); in max16601_probe()
338 return PTR_ERR(data->vsa); in max16601_probe()
344 data->info = max16601_info; in max16601_probe()
346 return pmbus_do_probe(client, &data->info); in max16601_probe()
359 MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");