• Home
  • Raw
  • Download

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

90 #define LTC_POLL_TIMEOUT		100	/* in milli-seconds */
104 enum chips id; member
120 #define has_clear_peaks(d) ((d)->features & FEAT_CLEAR_PEAKS)
121 #define needs_polling(d) ((d)->features & FEAT_NEEDS_POLLING)
123 static int ltc_wait_ready(struct i2c_client *client) in ltc_wait_ready() argument
126 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in ltc_wait_ready()
139 if (data->id != ltc3883) in ltc_wait_ready()
143 status = pmbus_read_byte_data(client, 0, LTC2978_MFR_COMMON); in ltc_wait_ready()
144 if (status == -EBADMSG || status == -ENXIO) { in ltc_wait_ready()
158 return -ETIMEDOUT; in ltc_wait_ready()
161 static int ltc_read_word_data(struct i2c_client *client, int page, int reg) in ltc_read_word_data() argument
165 ret = ltc_wait_ready(client); in ltc_read_word_data()
169 return pmbus_read_word_data(client, page, reg); in ltc_read_word_data()
172 static int ltc_read_byte_data(struct i2c_client *client, int page, int reg) in ltc_read_byte_data() argument
176 ret = ltc_wait_ready(client); in ltc_read_byte_data()
180 return pmbus_read_byte_data(client, page, reg); in ltc_read_byte_data()
183 static int ltc_write_byte(struct i2c_client *client, int page, u8 byte) in ltc_write_byte() argument
187 ret = ltc_wait_ready(client); in ltc_write_byte()
191 return pmbus_write_byte(client, page, byte); in ltc_write_byte()
204 return (e < 0 ? m >> -e : m << e); in lin11_to_val()
207 static int ltc_get_max(struct ltc2978_data *data, struct i2c_client *client, in ltc_get_max() argument
212 ret = ltc_read_word_data(client, page, reg); in ltc_get_max()
221 static int ltc_get_min(struct ltc2978_data *data, struct i2c_client *client, in ltc_get_min() argument
226 ret = ltc_read_word_data(client, page, reg); in ltc_get_min()
235 static int ltc2978_read_word_data_common(struct i2c_client *client, int page, in ltc2978_read_word_data_common() argument
238 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in ltc2978_read_word_data_common()
244 ret = ltc_get_max(data, client, page, LTC2978_MFR_VIN_PEAK, in ltc2978_read_word_data_common()
245 &data->vin_max); in ltc2978_read_word_data_common()
248 ret = ltc_read_word_data(client, page, LTC2978_MFR_VOUT_PEAK); in ltc2978_read_word_data_common()
254 if (ret > data->vout_max[page]) in ltc2978_read_word_data_common()
255 data->vout_max[page] = ret; in ltc2978_read_word_data_common()
256 ret = data->vout_max[page]; in ltc2978_read_word_data_common()
260 ret = ltc_get_max(data, client, page, in ltc2978_read_word_data_common()
262 &data->temp_max[page]); in ltc2978_read_word_data_common()
270 ret = ltc_wait_ready(client); in ltc2978_read_word_data_common()
273 ret = -ENODATA; in ltc2978_read_word_data_common()
279 static int ltc2978_read_word_data(struct i2c_client *client, int page, int reg) in ltc2978_read_word_data() argument
281 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in ltc2978_read_word_data()
287 ret = ltc_get_min(data, client, page, LTC2978_MFR_VIN_MIN, in ltc2978_read_word_data()
288 &data->vin_min); in ltc2978_read_word_data()
291 ret = ltc_read_word_data(client, page, LTC2978_MFR_VOUT_MIN); in ltc2978_read_word_data()
299 if (data->vout_max[page] && ret > data->vout_max[page]) in ltc2978_read_word_data()
300 ret = data->vout_max[page]; in ltc2978_read_word_data()
301 if (ret < data->vout_min[page]) in ltc2978_read_word_data()
302 data->vout_min[page] = ret; in ltc2978_read_word_data()
303 ret = data->vout_min[page]; in ltc2978_read_word_data()
307 ret = ltc_get_min(data, client, page, in ltc2978_read_word_data()
309 &data->temp_min[page]); in ltc2978_read_word_data()
315 ret = -ENXIO; in ltc2978_read_word_data()
318 ret = ltc2978_read_word_data_common(client, page, reg); in ltc2978_read_word_data()
324 static int ltc2974_read_word_data(struct i2c_client *client, int page, int reg) in ltc2974_read_word_data() argument
326 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in ltc2974_read_word_data()
332 ret = ltc_get_max(data, client, page, LTC2974_MFR_IOUT_PEAK, in ltc2974_read_word_data()
333 &data->iout_max[page]); in ltc2974_read_word_data()
336 ret = ltc_get_min(data, client, page, LTC2974_MFR_IOUT_MIN, in ltc2974_read_word_data()
337 &data->iout_min[page]); in ltc2974_read_word_data()
343 ret = ltc2978_read_word_data(client, page, reg); in ltc2974_read_word_data()
349 static int ltc2975_read_word_data(struct i2c_client *client, int page, int reg) in ltc2975_read_word_data() argument
351 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in ltc2975_read_word_data()
357 ret = ltc_get_max(data, client, page, LTC2975_MFR_IIN_PEAK, in ltc2975_read_word_data()
358 &data->iin_max); in ltc2975_read_word_data()
361 ret = ltc_get_min(data, client, page, LTC2975_MFR_IIN_MIN, in ltc2975_read_word_data()
362 &data->iin_min); in ltc2975_read_word_data()
365 ret = ltc_get_max(data, client, page, LTC2975_MFR_PIN_PEAK, in ltc2975_read_word_data()
366 &data->pin_max); in ltc2975_read_word_data()
369 ret = ltc_get_min(data, client, page, LTC2975_MFR_PIN_MIN, in ltc2975_read_word_data()
370 &data->pin_min); in ltc2975_read_word_data()
377 ret = ltc2978_read_word_data(client, page, reg); in ltc2975_read_word_data()
383 static int ltc3880_read_word_data(struct i2c_client *client, int page, int reg) in ltc3880_read_word_data() argument
385 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in ltc3880_read_word_data()
391 ret = ltc_get_max(data, client, page, LTC3880_MFR_IOUT_PEAK, in ltc3880_read_word_data()
392 &data->iout_max[page]); in ltc3880_read_word_data()
395 ret = ltc_get_max(data, client, page, in ltc3880_read_word_data()
397 &data->temp2_max); in ltc3880_read_word_data()
402 ret = -ENXIO; in ltc3880_read_word_data()
409 ret = ltc2978_read_word_data_common(client, page, reg); in ltc3880_read_word_data()
415 static int ltc3883_read_word_data(struct i2c_client *client, int page, int reg) in ltc3883_read_word_data() argument
417 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in ltc3883_read_word_data()
423 ret = ltc_get_max(data, client, page, LTC3883_MFR_IIN_PEAK, in ltc3883_read_word_data()
424 &data->iin_max); in ltc3883_read_word_data()
430 ret = ltc3880_read_word_data(client, page, reg); in ltc3883_read_word_data()
437 struct i2c_client *client, int page) in ltc2978_clear_peaks() argument
442 ret = ltc_write_byte(client, 0, LTC3880_MFR_CLEAR_PEAKS); in ltc2978_clear_peaks()
444 ret = ltc_write_byte(client, page, PMBUS_CLEAR_FAULTS); in ltc2978_clear_peaks()
449 static int ltc2978_write_word_data(struct i2c_client *client, int page, in ltc2978_write_word_data() argument
452 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); in ltc2978_write_word_data()
458 data->iin_max = 0x7c00; in ltc2978_write_word_data()
459 data->iin_min = 0x7bff; in ltc2978_write_word_data()
460 ret = ltc2978_clear_peaks(data, client, 0); in ltc2978_write_word_data()
463 data->pin_max = 0x7c00; in ltc2978_write_word_data()
464 data->pin_min = 0x7bff; in ltc2978_write_word_data()
465 ret = ltc2978_clear_peaks(data, client, 0); in ltc2978_write_word_data()
468 data->iout_max[page] = 0x7c00; in ltc2978_write_word_data()
469 data->iout_min[page] = 0xfbff; in ltc2978_write_word_data()
470 ret = ltc2978_clear_peaks(data, client, page); in ltc2978_write_word_data()
473 data->temp2_max = 0x7c00; in ltc2978_write_word_data()
474 ret = ltc2978_clear_peaks(data, client, page); in ltc2978_write_word_data()
477 data->vout_min[page] = 0xffff; in ltc2978_write_word_data()
478 data->vout_max[page] = 0; in ltc2978_write_word_data()
479 ret = ltc2978_clear_peaks(data, client, page); in ltc2978_write_word_data()
482 data->vin_min = 0x7bff; in ltc2978_write_word_data()
483 data->vin_max = 0x7c00; in ltc2978_write_word_data()
484 ret = ltc2978_clear_peaks(data, client, page); in ltc2978_write_word_data()
487 data->temp_min[page] = 0x7bff; in ltc2978_write_word_data()
488 data->temp_max[page] = 0x7c00; in ltc2978_write_word_data()
489 ret = ltc2978_clear_peaks(data, client, page); in ltc2978_write_word_data()
492 ret = ltc_wait_ready(client); in ltc2978_write_word_data()
495 ret = -ENODATA; in ltc2978_write_word_data()
532 static int ltc2978_get_id(struct i2c_client *client) in ltc2978_get_id() argument
536 chip_id = i2c_smbus_read_word_data(client, LTC2978_MFR_SPECIAL_ID); in ltc2978_get_id()
538 const struct i2c_device_id *id; in ltc2978_get_id() local
542 if (!i2c_check_functionality(client->adapter, in ltc2978_get_id()
544 return -ENODEV; in ltc2978_get_id()
546 ret = i2c_smbus_read_block_data(client, PMBUS_MFR_ID, buf); in ltc2978_get_id()
550 return -ENODEV; in ltc2978_get_id()
552 ret = i2c_smbus_read_block_data(client, PMBUS_MFR_MODEL, buf); in ltc2978_get_id()
555 for (id = &ltc2978_id[0]; strlen(id->name); id++) { in ltc2978_get_id()
556 if (!strncasecmp(id->name, buf, strlen(id->name))) in ltc2978_get_id()
557 return (int)id->driver_data; in ltc2978_get_id()
559 return -ENODEV; in ltc2978_get_id()
592 dev_err(&client->dev, "Unsupported chip ID 0x%x\n", chip_id); in ltc2978_get_id()
593 return -ENODEV; in ltc2978_get_id()
596 static int ltc2978_probe(struct i2c_client *client, in ltc2978_probe() argument
597 const struct i2c_device_id *id) in ltc2978_probe() argument
603 if (!i2c_check_functionality(client->adapter, in ltc2978_probe()
605 return -ENODEV; in ltc2978_probe()
607 data = devm_kzalloc(&client->dev, sizeof(struct ltc2978_data), in ltc2978_probe()
610 return -ENOMEM; in ltc2978_probe()
612 chip_id = ltc2978_get_id(client); in ltc2978_probe()
616 data->id = chip_id; in ltc2978_probe()
617 if (data->id != id->driver_data) in ltc2978_probe()
618 dev_warn(&client->dev, in ltc2978_probe()
620 id->name, in ltc2978_probe()
621 ltc2978_id[data->id].name); in ltc2978_probe()
623 info = &data->info; in ltc2978_probe()
624 info->write_word_data = ltc2978_write_word_data; in ltc2978_probe()
625 info->write_byte = ltc_write_byte; in ltc2978_probe()
626 info->read_word_data = ltc_read_word_data; in ltc2978_probe()
627 info->read_byte_data = ltc_read_byte_data; in ltc2978_probe()
629 data->vin_min = 0x7bff; in ltc2978_probe()
630 data->vin_max = 0x7c00; in ltc2978_probe()
631 for (i = 0; i < ARRAY_SIZE(data->vout_min); i++) in ltc2978_probe()
632 data->vout_min[i] = 0xffff; in ltc2978_probe()
633 for (i = 0; i < ARRAY_SIZE(data->iout_min); i++) in ltc2978_probe()
634 data->iout_min[i] = 0xfbff; in ltc2978_probe()
635 for (i = 0; i < ARRAY_SIZE(data->iout_max); i++) in ltc2978_probe()
636 data->iout_max[i] = 0x7c00; in ltc2978_probe()
637 for (i = 0; i < ARRAY_SIZE(data->temp_min); i++) in ltc2978_probe()
638 data->temp_min[i] = 0x7bff; in ltc2978_probe()
639 for (i = 0; i < ARRAY_SIZE(data->temp_max); i++) in ltc2978_probe()
640 data->temp_max[i] = 0x7c00; in ltc2978_probe()
641 data->temp2_max = 0x7c00; in ltc2978_probe()
643 switch (data->id) { in ltc2978_probe()
645 info->read_word_data = ltc2974_read_word_data; in ltc2978_probe()
646 info->pages = LTC2974_NUM_PAGES; in ltc2978_probe()
647 info->func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT in ltc2978_probe()
649 for (i = 0; i < info->pages; i++) { in ltc2978_probe()
650 info->func[i] |= PMBUS_HAVE_VOUT in ltc2978_probe()
657 info->read_word_data = ltc2975_read_word_data; in ltc2978_probe()
658 info->pages = LTC2974_NUM_PAGES; in ltc2978_probe()
659 info->func[0] = PMBUS_HAVE_IIN | PMBUS_HAVE_PIN in ltc2978_probe()
662 for (i = 0; i < info->pages; i++) { in ltc2978_probe()
663 info->func[i] |= PMBUS_HAVE_VOUT in ltc2978_probe()
673 info->read_word_data = ltc2978_read_word_data; in ltc2978_probe()
674 info->pages = LTC2978_NUM_PAGES; in ltc2978_probe()
675 info->func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT in ltc2978_probe()
679 info->func[i] = PMBUS_HAVE_VOUT in ltc2978_probe()
687 data->features |= FEAT_CLEAR_PEAKS | FEAT_NEEDS_POLLING; in ltc2978_probe()
688 info->read_word_data = ltc3880_read_word_data; in ltc2978_probe()
689 info->pages = LTC3880_NUM_PAGES; in ltc2978_probe()
690 info->func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN in ltc2978_probe()
696 info->func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT in ltc2978_probe()
702 data->features |= FEAT_CLEAR_PEAKS | FEAT_NEEDS_POLLING; in ltc2978_probe()
703 info->read_word_data = ltc3880_read_word_data; in ltc2978_probe()
704 info->pages = LTC3880_NUM_PAGES; in ltc2978_probe()
705 info->func[0] = PMBUS_HAVE_VIN in ltc2978_probe()
711 info->func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT in ltc2978_probe()
717 data->features |= FEAT_CLEAR_PEAKS | FEAT_NEEDS_POLLING; in ltc2978_probe()
718 info->read_word_data = ltc3883_read_word_data; in ltc2978_probe()
719 info->pages = LTC3883_NUM_PAGES; in ltc2978_probe()
720 info->func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN in ltc2978_probe()
728 data->features |= FEAT_CLEAR_PEAKS | FEAT_NEEDS_POLLING; in ltc2978_probe()
729 info->read_word_data = ltc3883_read_word_data; in ltc2978_probe()
730 info->pages = LTC3880_NUM_PAGES; in ltc2978_probe()
731 info->func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN in ltc2978_probe()
737 info->func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT in ltc2978_probe()
743 return -ENODEV; in ltc2978_probe()
747 info->num_regulators = info->pages; in ltc2978_probe()
748 info->reg_desc = ltc2978_reg_desc; in ltc2978_probe()
749 if (info->num_regulators > ARRAY_SIZE(ltc2978_reg_desc)) { in ltc2978_probe()
750 dev_err(&client->dev, "num_regulators too large!"); in ltc2978_probe()
751 info->num_regulators = ARRAY_SIZE(ltc2978_reg_desc); in ltc2978_probe()
755 return pmbus_do_probe(client, id, info); in ltc2978_probe()