Lines Matching +full:reg +full:- +full:data

1 // SPDX-License-Identifier: GPL-2.0
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.
58 static int max16601_read_byte(struct i2c_client *client, int page, int reg) in max16601_read_byte() argument
61 struct max16601_data *data = to_max16601_data(info); in max16601_read_byte() local
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()
72 int reg) in max16601_read_word() argument
75 struct max16601_data *data = to_max16601_data(info); in max16601_read_word() local
82 return -ENODATA; in max16601_read_word()
83 switch (reg) { in max16601_read_word()
97 return -EIO; in max16601_read_word()
98 switch (reg) { in max16601_read_word()
109 return -EOPNOTSUPP; in max16601_read_word()
111 switch (reg) { in max16601_read_word()
120 return -EOPNOTSUPP; in max16601_read_word()
122 switch (reg) { 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
154 struct max16601_data *data = to_max16601_data(info); in max16601_write_byte() local
157 if (reg == PMBUS_CLEAR_FAULTS) 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
168 struct max16601_data *data = to_max16601_data(info); in max16601_write_word() local
172 return -ENODATA; in max16601_write_word()
175 return -EOPNOTSUPP; in max16601_write_word()
177 switch (reg) { 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()
195 struct max16601_data *data = to_max16601_data(info); in max16601_identify() local
196 int reg; in max16601_identify() local
198 reg = i2c_smbus_read_byte_data(client, REG_SETPT_DVID); in max16601_identify()
199 if (reg < 0) in max16601_identify()
200 return reg; in max16601_identify()
201 if (reg & DAC_10MV_MODE) 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()
210 if (reg < 0) in max16601_identify()
211 return reg; in max16601_identify()
217 reg &= 0x0f; in max16601_identify()
218 if (reg && reg <= MAX16601_NUM_PHASES) in max16601_identify()
219 info->phases[0] = reg; in max16601_identify()
260 struct max16601_data *data = _data; in max16601_remove() local
262 i2c_unregister_device(data->vsa); in max16601_remove()
276 struct device *dev = &client->dev; in max16601_get_id()
283 return -ENODEV; in max16601_get_id()
300 return -ENODEV; in max16601_get_id()
307 struct device *dev = &client->dev; in max16601_probe()
309 struct max16601_data *data; in max16601_probe() local
312 if (!i2c_check_functionality(client->adapter, in max16601_probe()
315 return -ENODEV; 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()
333 return -ENODEV; in max16601_probe()
336 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); in max16601_probe()
337 if (!data) 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()
345 return PTR_ERR(data->vsa); in max16601_probe()
347 ret = devm_add_action_or_reset(dev, max16601_remove, data); 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>");