Lines Matching +full:read +full:- +full:only
6 * SPDX-License-Identifier: GPL-2.0-or-later
25 /* X = (Y * 10^-R - b) / m */ in pmbus_direct_mode2data()
26 uint32_t x = (value / pow(10, c.R) - c.b) / c.m; in pmbus_direct_mode2data()
32 /* L = D * 2^(-e) */ in pmbus_data2linear_mode()
34 return value << (-exp); in pmbus_data2linear_mode()
43 return value >> (-exp); in pmbus_linear_mode2data()
50 if (pmdev->out_buf_len + len > SMBUS_DATA_MAX_LEN) { in pmbus_send()
56 for (int i = len - 1; i >= 0; i--) { in pmbus_send()
57 pmdev->out_buf[i + pmdev->out_buf_len] = data[len - i - 1]; in pmbus_send()
59 pmdev->out_buf_len += len; in pmbus_send()
62 /* Internal only, convert unsigned ints to the little endian bus */
99 "%s: %s: uninitialised read from 0x%02x\n", in pmbus_send_string()
100 __func__, DEVICE(pmdev)->canonical_path, pmdev->code); in pmbus_send_string()
105 g_assert(len + pmdev->out_buf_len < SMBUS_DATA_MAX_LEN); in pmbus_send_string()
106 pmdev->out_buf[len + pmdev->out_buf_len] = len; in pmbus_send_string()
108 for (int i = len - 1; i >= 0; i--) { in pmbus_send_string()
109 pmdev->out_buf[i + pmdev->out_buf_len] = data[len - 1 - i]; in pmbus_send_string()
111 pmdev->out_buf_len += len + 1; in pmbus_send_string()
120 pmdev->in_buf++; in pmbus_receive_block()
121 pmdev->in_buf_len--; in pmbus_receive_block()
124 uint8_t sent_len = pmdev->in_buf[0]; in pmbus_receive_block()
126 if (sent_len != pmdev->in_buf_len - 1) { in pmbus_receive_block()
129 __func__, sent_len, pmdev->in_buf_len - 1); in pmbus_receive_block()
133 pmdev->in_buf++; in pmbus_receive_block()
134 pmdev->in_buf_len--; in pmbus_receive_block()
136 if (pmdev->in_buf_len < len) { in pmbus_receive_block()
137 len = pmdev->in_buf_len; in pmbus_receive_block()
139 memcpy(dest, pmdev->in_buf, len); in pmbus_receive_block()
149 pmdev->in_buf++; in pmbus_receive_uint()
150 pmdev->in_buf_len--; in pmbus_receive_uint()
152 for (int i = pmdev->in_buf_len - 1; i >= 0; i--) { in pmbus_receive_uint()
153 ret = ret << 8 | pmdev->in_buf[i]; in pmbus_receive_uint()
160 if (pmdev->in_buf_len - 1 != 1) { in pmbus_receive8()
163 __func__, pmdev->in_buf_len - 1); in pmbus_receive8()
170 if (pmdev->in_buf_len - 1 != 2) { in pmbus_receive16()
173 __func__, pmdev->in_buf_len - 1); in pmbus_receive16()
180 if (pmdev->in_buf_len - 1 != 4) { in pmbus_receive32()
183 __func__, pmdev->in_buf_len - 1); in pmbus_receive32()
190 if (pmdev->in_buf_len - 1 != 8) { in pmbus_receive64()
193 __func__, pmdev->in_buf_len - 1); in pmbus_receive64()
200 if (pmdev->out_buf_len == 0) { in pmbus_out_buf_pop()
202 "%s: tried to read from empty buffer", in pmbus_out_buf_pop()
206 uint8_t data = pmdev->out_buf[pmdev->out_buf_len - 1]; in pmbus_out_buf_pop()
207 pmdev->out_buf_len--; in pmbus_out_buf_pop()
211 static void pmbus_quick_cmd(SMBusDevice *smd, uint8_t read) in pmbus_quick_cmd() argument
216 if (pmdc->quick_cmd) { in pmbus_quick_cmd()
217 pmdc->quick_cmd(pmdev, read); in pmbus_quick_cmd()
226 return k->device_num_pages ? : 1; in pmbus_pages_num()
231 pmdev->num_pages = pmbus_pages_num(pmdev); in pmbus_pages_alloc()
232 pmdev->pages = g_new0(PMBusPage, pmdev->num_pages); in pmbus_pages_alloc()
237 for (int i = 0; i < pmdev->num_pages; i++) { in pmbus_check_limits()
238 if ((pmdev->pages[i].operation & PB_OP_ON) == 0) { in pmbus_check_limits()
242 if (pmdev->pages[i].read_vout > pmdev->pages[i].vout_ov_fault_limit) { in pmbus_check_limits()
243 pmdev->pages[i].status_word |= PB_STATUS_VOUT; in pmbus_check_limits()
244 pmdev->pages[i].status_vout |= PB_STATUS_VOUT_OV_FAULT; in pmbus_check_limits()
247 if (pmdev->pages[i].read_vout > pmdev->pages[i].vout_ov_warn_limit) { in pmbus_check_limits()
248 pmdev->pages[i].status_word |= PB_STATUS_VOUT; in pmbus_check_limits()
249 pmdev->pages[i].status_vout |= PB_STATUS_VOUT_OV_WARN; in pmbus_check_limits()
252 if (pmdev->pages[i].read_vout < pmdev->pages[i].vout_uv_warn_limit) { in pmbus_check_limits()
253 pmdev->pages[i].status_word |= PB_STATUS_VOUT; in pmbus_check_limits()
254 pmdev->pages[i].status_vout |= PB_STATUS_VOUT_UV_WARN; in pmbus_check_limits()
257 if (pmdev->pages[i].read_vout < pmdev->pages[i].vout_uv_fault_limit) { in pmbus_check_limits()
258 pmdev->pages[i].status_word |= PB_STATUS_VOUT; in pmbus_check_limits()
259 pmdev->pages[i].status_vout |= PB_STATUS_VOUT_UV_FAULT; in pmbus_check_limits()
262 if (pmdev->pages[i].read_vin > pmdev->pages[i].vin_ov_warn_limit) { in pmbus_check_limits()
263 pmdev->pages[i].status_word |= PB_STATUS_INPUT; in pmbus_check_limits()
264 pmdev->pages[i].status_input |= PB_STATUS_INPUT_VIN_OV_WARN; in pmbus_check_limits()
267 if (pmdev->pages[i].read_vin < pmdev->pages[i].vin_uv_warn_limit) { in pmbus_check_limits()
268 pmdev->pages[i].status_word |= PB_STATUS_INPUT; in pmbus_check_limits()
269 pmdev->pages[i].status_input |= PB_STATUS_INPUT_VIN_UV_WARN; in pmbus_check_limits()
272 if (pmdev->pages[i].read_iout > pmdev->pages[i].iout_oc_warn_limit) { in pmbus_check_limits()
273 pmdev->pages[i].status_word |= PB_STATUS_IOUT_POUT; in pmbus_check_limits()
274 pmdev->pages[i].status_iout |= PB_STATUS_IOUT_OC_WARN; in pmbus_check_limits()
277 if (pmdev->pages[i].read_iout > pmdev->pages[i].iout_oc_fault_limit) { in pmbus_check_limits()
278 pmdev->pages[i].status_word |= PB_STATUS_IOUT_POUT; in pmbus_check_limits()
279 pmdev->pages[i].status_iout |= PB_STATUS_IOUT_OC_FAULT; in pmbus_check_limits()
282 if (pmdev->pages[i].read_pin > pmdev->pages[i].pin_op_warn_limit) { in pmbus_check_limits()
283 pmdev->pages[i].status_word |= PB_STATUS_INPUT; in pmbus_check_limits()
284 pmdev->pages[i].status_input |= PB_STATUS_INPUT_PIN_OP_WARN; in pmbus_check_limits()
287 if (pmdev->pages[i].read_temperature_1 in pmbus_check_limits()
288 > pmdev->pages[i].ot_fault_limit) { in pmbus_check_limits()
289 pmdev->pages[i].status_word |= PB_STATUS_TEMPERATURE; in pmbus_check_limits()
290 pmdev->pages[i].status_temperature |= PB_STATUS_OT_FAULT; in pmbus_check_limits()
293 if (pmdev->pages[i].read_temperature_1 in pmbus_check_limits()
294 > pmdev->pages[i].ot_warn_limit) { in pmbus_check_limits()
295 pmdev->pages[i].status_word |= PB_STATUS_TEMPERATURE; in pmbus_check_limits()
296 pmdev->pages[i].status_temperature |= PB_STATUS_OT_WARN; in pmbus_check_limits()
303 pmdev->code = PMBUS_IDLE_STATE; in pmbus_idle()
309 for (int i = 0; i < pmdev->num_pages; i++) { in pmbus_cml_error()
310 pmdev->pages[i].status_word |= PMBUS_STATUS_CML; in pmbus_cml_error()
311 pmdev->pages[i].status_cml |= PB_CML_FAULT_INVALID_CMD; in pmbus_cml_error()
322 if (pmdev->out_buf_len != 0) { in pmbus_receive_byte()
331 if (pmdev->page == PB_ALL_PAGES) { in pmbus_receive_byte()
333 } else if (pmdev->page > pmdev->num_pages - 1) { in pmbus_receive_byte()
336 __func__, pmdev->page); in pmbus_receive_byte()
340 index = pmdev->page; in pmbus_receive_byte()
343 switch (pmdev->code) { in pmbus_receive_byte()
345 pmbus_send8(pmdev, pmdev->page); in pmbus_receive_byte()
349 pmbus_send8(pmdev, pmdev->pages[index].operation); in pmbus_receive_byte()
353 pmbus_send8(pmdev, pmdev->pages[index].on_off_config); in pmbus_receive_byte()
357 pmbus_send8(pmdev, pmdev->pages[index].phase); in pmbus_receive_byte()
361 pmbus_send8(pmdev, pmdev->pages[index].write_protect); in pmbus_receive_byte()
365 pmbus_send8(pmdev, pmdev->capability); in pmbus_receive_byte()
366 if (pmdev->capability & BIT(7)) { in pmbus_receive_byte()
374 if (pmdev->pages[index].page_flags & PB_HAS_VOUT_MODE) { in pmbus_receive_byte()
375 pmbus_send8(pmdev, pmdev->pages[index].vout_mode); in pmbus_receive_byte()
382 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
383 pmbus_send16(pmdev, pmdev->pages[index].vout_command); in pmbus_receive_byte()
390 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
391 pmbus_send16(pmdev, pmdev->pages[index].vout_trim); in pmbus_receive_byte()
398 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
399 pmbus_send16(pmdev, pmdev->pages[index].vout_cal_offset); in pmbus_receive_byte()
406 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
407 pmbus_send16(pmdev, pmdev->pages[index].vout_max); in pmbus_receive_byte()
414 if (pmdev->pages[index].page_flags & PB_HAS_VOUT_MARGIN) { in pmbus_receive_byte()
415 pmbus_send16(pmdev, pmdev->pages[index].vout_margin_high); in pmbus_receive_byte()
422 if (pmdev->pages[index].page_flags & PB_HAS_VOUT_MARGIN) { in pmbus_receive_byte()
423 pmbus_send16(pmdev, pmdev->pages[index].vout_margin_low); in pmbus_receive_byte()
430 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
431 pmbus_send16(pmdev, pmdev->pages[index].vout_transition_rate); in pmbus_receive_byte()
438 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
439 pmbus_send16(pmdev, pmdev->pages[index].vout_droop); in pmbus_receive_byte()
446 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
447 pmbus_send16(pmdev, pmdev->pages[index].vout_scale_loop); in pmbus_receive_byte()
454 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
455 pmbus_send16(pmdev, pmdev->pages[index].vout_scale_monitor); in pmbus_receive_byte()
462 if (pmdev->pages[index].page_flags & PB_HAS_VOUT_RATING) { in pmbus_receive_byte()
463 pmbus_send16(pmdev, pmdev->pages[index].vout_min); in pmbus_receive_byte()
472 if (pmdev->pages[index].page_flags & PB_HAS_POUT) { in pmbus_receive_byte()
473 pmbus_send16(pmdev, pmdev->pages[index].pout_max); in pmbus_receive_byte()
480 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_receive_byte()
481 pmbus_send16(pmdev, pmdev->pages[index].vin_on); in pmbus_receive_byte()
488 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_receive_byte()
489 pmbus_send16(pmdev, pmdev->pages[index].vin_off); in pmbus_receive_byte()
496 if (pmdev->pages[index].page_flags & PB_HAS_IOUT_GAIN) { in pmbus_receive_byte()
497 pmbus_send16(pmdev, pmdev->pages[index].iout_cal_gain); in pmbus_receive_byte()
504 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
505 pmbus_send8(pmdev, pmdev->pages[index].fan_config_1_2); in pmbus_receive_byte()
512 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
513 pmbus_send16(pmdev, pmdev->pages[index].fan_command_1); in pmbus_receive_byte()
520 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
521 pmbus_send16(pmdev, pmdev->pages[index].fan_command_2); in pmbus_receive_byte()
528 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
529 pmbus_send8(pmdev, pmdev->pages[index].fan_config_3_4); in pmbus_receive_byte()
536 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
537 pmbus_send16(pmdev, pmdev->pages[index].fan_command_3); in pmbus_receive_byte()
544 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
545 pmbus_send16(pmdev, pmdev->pages[index].fan_command_4); in pmbus_receive_byte()
552 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
553 pmbus_send16(pmdev, pmdev->pages[index].vout_ov_fault_limit); in pmbus_receive_byte()
560 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
561 pmbus_send8(pmdev, pmdev->pages[index].vout_ov_fault_response); in pmbus_receive_byte()
568 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
569 pmbus_send16(pmdev, pmdev->pages[index].vout_ov_warn_limit); in pmbus_receive_byte()
576 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
577 pmbus_send16(pmdev, pmdev->pages[index].vout_uv_warn_limit); in pmbus_receive_byte()
584 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
585 pmbus_send16(pmdev, pmdev->pages[index].vout_uv_fault_limit); in pmbus_receive_byte()
592 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
593 pmbus_send8(pmdev, pmdev->pages[index].vout_uv_fault_response); in pmbus_receive_byte()
600 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_receive_byte()
601 pmbus_send16(pmdev, pmdev->pages[index].iout_oc_fault_limit); in pmbus_receive_byte()
608 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_receive_byte()
609 pmbus_send8(pmdev, pmdev->pages[index].iout_oc_fault_response); in pmbus_receive_byte()
616 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_receive_byte()
617 pmbus_send16(pmdev, pmdev->pages[index].iout_oc_lv_fault_limit); in pmbus_receive_byte()
624 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_receive_byte()
625 pmbus_send8(pmdev, pmdev->pages[index].iout_oc_lv_fault_response); in pmbus_receive_byte()
632 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_receive_byte()
633 pmbus_send16(pmdev, pmdev->pages[index].iout_oc_warn_limit); in pmbus_receive_byte()
640 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_receive_byte()
641 pmbus_send16(pmdev, pmdev->pages[index].iout_uc_fault_limit); in pmbus_receive_byte()
648 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_receive_byte()
649 pmbus_send8(pmdev, pmdev->pages[index].iout_uc_fault_response); in pmbus_receive_byte()
656 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_receive_byte()
657 pmbus_send16(pmdev, pmdev->pages[index].ot_fault_limit); in pmbus_receive_byte()
664 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_receive_byte()
665 pmbus_send8(pmdev, pmdev->pages[index].ot_fault_response); in pmbus_receive_byte()
672 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_receive_byte()
673 pmbus_send16(pmdev, pmdev->pages[index].ot_warn_limit); in pmbus_receive_byte()
680 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_receive_byte()
681 pmbus_send16(pmdev, pmdev->pages[index].ut_warn_limit); in pmbus_receive_byte()
688 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_receive_byte()
689 pmbus_send16(pmdev, pmdev->pages[index].ut_fault_limit); in pmbus_receive_byte()
696 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_receive_byte()
697 pmbus_send8(pmdev, pmdev->pages[index].ut_fault_response); in pmbus_receive_byte()
704 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_receive_byte()
705 pmbus_send16(pmdev, pmdev->pages[index].vin_ov_fault_limit); in pmbus_receive_byte()
712 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_receive_byte()
713 pmbus_send8(pmdev, pmdev->pages[index].vin_ov_fault_response); in pmbus_receive_byte()
720 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_receive_byte()
721 pmbus_send16(pmdev, pmdev->pages[index].vin_ov_warn_limit); in pmbus_receive_byte()
728 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_receive_byte()
729 pmbus_send16(pmdev, pmdev->pages[index].vin_uv_warn_limit); in pmbus_receive_byte()
736 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_receive_byte()
737 pmbus_send16(pmdev, pmdev->pages[index].vin_uv_fault_limit); in pmbus_receive_byte()
744 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_receive_byte()
745 pmbus_send8(pmdev, pmdev->pages[index].vin_uv_fault_response); in pmbus_receive_byte()
752 if (pmdev->pages[index].page_flags & PB_HAS_IIN) { in pmbus_receive_byte()
753 pmbus_send16(pmdev, pmdev->pages[index].iin_oc_fault_limit); in pmbus_receive_byte()
760 if (pmdev->pages[index].page_flags & PB_HAS_IIN) { in pmbus_receive_byte()
761 pmbus_send8(pmdev, pmdev->pages[index].iin_oc_fault_response); in pmbus_receive_byte()
768 if (pmdev->pages[index].page_flags & PB_HAS_IIN) { in pmbus_receive_byte()
769 pmbus_send16(pmdev, pmdev->pages[index].iin_oc_warn_limit); in pmbus_receive_byte()
776 if (pmdev->pages[index].page_flags & PB_HAS_POUT) { in pmbus_receive_byte()
777 pmbus_send16(pmdev, pmdev->pages[index].pout_op_fault_limit); in pmbus_receive_byte()
784 if (pmdev->pages[index].page_flags & PB_HAS_POUT) { in pmbus_receive_byte()
785 pmbus_send8(pmdev, pmdev->pages[index].pout_op_fault_response); in pmbus_receive_byte()
792 if (pmdev->pages[index].page_flags & PB_HAS_POUT) { in pmbus_receive_byte()
793 pmbus_send16(pmdev, pmdev->pages[index].pout_op_warn_limit); in pmbus_receive_byte()
800 if (pmdev->pages[index].page_flags & PB_HAS_PIN) { in pmbus_receive_byte()
801 pmbus_send16(pmdev, pmdev->pages[index].pin_op_warn_limit); in pmbus_receive_byte()
808 pmbus_send8(pmdev, pmdev->pages[index].status_word & 0xFF); in pmbus_receive_byte()
812 pmbus_send16(pmdev, pmdev->pages[index].status_word); in pmbus_receive_byte()
816 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
817 pmbus_send8(pmdev, pmdev->pages[index].status_vout); in pmbus_receive_byte()
824 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_receive_byte()
825 pmbus_send8(pmdev, pmdev->pages[index].status_iout); in pmbus_receive_byte()
832 if (pmdev->pages[index].page_flags & PB_HAS_VIN || in pmbus_receive_byte()
833 pmdev->pages[index].page_flags & PB_HAS_IIN || in pmbus_receive_byte()
834 pmdev->pages[index].page_flags & PB_HAS_PIN) { in pmbus_receive_byte()
835 pmbus_send8(pmdev, pmdev->pages[index].status_input); in pmbus_receive_byte()
842 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_receive_byte()
843 pmbus_send8(pmdev, pmdev->pages[index].status_temperature); in pmbus_receive_byte()
850 pmbus_send8(pmdev, pmdev->pages[index].status_cml); in pmbus_receive_byte()
854 pmbus_send8(pmdev, pmdev->pages[index].status_other); in pmbus_receive_byte()
858 pmbus_send8(pmdev, pmdev->pages[index].status_mfr_specific); in pmbus_receive_byte()
862 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
863 pmbus_send8(pmdev, pmdev->pages[index].status_fans_1_2); in pmbus_receive_byte()
870 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
871 pmbus_send8(pmdev, pmdev->pages[index].status_fans_3_4); in pmbus_receive_byte()
877 case PMBUS_READ_EIN: /* Read-Only block 5 bytes */ in pmbus_receive_byte()
878 if (pmdev->pages[index].page_flags & PB_HAS_EIN) { in pmbus_receive_byte()
879 pmbus_send(pmdev, pmdev->pages[index].read_ein, 5); in pmbus_receive_byte()
885 case PMBUS_READ_EOUT: /* Read-Only block 5 bytes */ in pmbus_receive_byte()
886 if (pmdev->pages[index].page_flags & PB_HAS_EOUT) { in pmbus_receive_byte()
887 pmbus_send(pmdev, pmdev->pages[index].read_eout, 5); in pmbus_receive_byte()
893 case PMBUS_READ_VIN: /* Read-Only word */ in pmbus_receive_byte()
894 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_receive_byte()
895 pmbus_send16(pmdev, pmdev->pages[index].read_vin); in pmbus_receive_byte()
901 case PMBUS_READ_IIN: /* Read-Only word */ in pmbus_receive_byte()
902 if (pmdev->pages[index].page_flags & PB_HAS_IIN) { in pmbus_receive_byte()
903 pmbus_send16(pmdev, pmdev->pages[index].read_iin); in pmbus_receive_byte()
909 case PMBUS_READ_VCAP: /* Read-Only word */ in pmbus_receive_byte()
910 if (pmdev->pages[index].page_flags & PB_HAS_VCAP) { in pmbus_receive_byte()
911 pmbus_send16(pmdev, pmdev->pages[index].read_vcap); in pmbus_receive_byte()
917 case PMBUS_READ_VOUT: /* Read-Only word */ in pmbus_receive_byte()
918 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_receive_byte()
919 pmbus_send16(pmdev, pmdev->pages[index].read_vout); in pmbus_receive_byte()
925 case PMBUS_READ_IOUT: /* Read-Only word */ in pmbus_receive_byte()
926 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_receive_byte()
927 pmbus_send16(pmdev, pmdev->pages[index].read_iout); in pmbus_receive_byte()
933 case PMBUS_READ_TEMPERATURE_1: /* Read-Only word */ in pmbus_receive_byte()
934 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_receive_byte()
935 pmbus_send16(pmdev, pmdev->pages[index].read_temperature_1); in pmbus_receive_byte()
941 case PMBUS_READ_TEMPERATURE_2: /* Read-Only word */ in pmbus_receive_byte()
942 if (pmdev->pages[index].page_flags & PB_HAS_TEMP2) { in pmbus_receive_byte()
943 pmbus_send16(pmdev, pmdev->pages[index].read_temperature_2); in pmbus_receive_byte()
949 case PMBUS_READ_TEMPERATURE_3: /* Read-Only word */ in pmbus_receive_byte()
950 if (pmdev->pages[index].page_flags & PB_HAS_TEMP3) { in pmbus_receive_byte()
951 pmbus_send16(pmdev, pmdev->pages[index].read_temperature_3); in pmbus_receive_byte()
957 case PMBUS_READ_FAN_SPEED_1: /* Read-Only word */ in pmbus_receive_byte()
958 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
959 pmbus_send16(pmdev, pmdev->pages[index].read_fan_speed_1); in pmbus_receive_byte()
965 case PMBUS_READ_FAN_SPEED_2: /* Read-Only word */ in pmbus_receive_byte()
966 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
967 pmbus_send16(pmdev, pmdev->pages[index].read_fan_speed_2); in pmbus_receive_byte()
973 case PMBUS_READ_FAN_SPEED_3: /* Read-Only word */ in pmbus_receive_byte()
974 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
975 pmbus_send16(pmdev, pmdev->pages[index].read_fan_speed_3); in pmbus_receive_byte()
981 case PMBUS_READ_FAN_SPEED_4: /* Read-Only word */ in pmbus_receive_byte()
982 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
983 pmbus_send16(pmdev, pmdev->pages[index].read_fan_speed_4); in pmbus_receive_byte()
989 case PMBUS_READ_DUTY_CYCLE: /* Read-Only word */ in pmbus_receive_byte()
990 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
991 pmbus_send16(pmdev, pmdev->pages[index].read_duty_cycle); in pmbus_receive_byte()
997 case PMBUS_READ_FREQUENCY: /* Read-Only word */ in pmbus_receive_byte()
998 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_receive_byte()
999 pmbus_send16(pmdev, pmdev->pages[index].read_frequency); in pmbus_receive_byte()
1005 case PMBUS_READ_POUT: /* Read-Only word */ in pmbus_receive_byte()
1006 if (pmdev->pages[index].page_flags & PB_HAS_POUT) { in pmbus_receive_byte()
1007 pmbus_send16(pmdev, pmdev->pages[index].read_pout); in pmbus_receive_byte()
1013 case PMBUS_READ_PIN: /* Read-Only word */ in pmbus_receive_byte()
1014 if (pmdev->pages[index].page_flags & PB_HAS_PIN) { in pmbus_receive_byte()
1015 pmbus_send16(pmdev, pmdev->pages[index].read_pin); in pmbus_receive_byte()
1021 case PMBUS_REVISION: /* Read-Only byte */ in pmbus_receive_byte()
1022 pmbus_send8(pmdev, pmdev->pages[index].revision); in pmbus_receive_byte()
1026 if (pmdev->pages[index].page_flags & PB_HAS_MFR_INFO) { in pmbus_receive_byte()
1027 pmbus_send_string(pmdev, pmdev->pages[index].mfr_id); in pmbus_receive_byte()
1034 if (pmdev->pages[index].page_flags & PB_HAS_MFR_INFO) { in pmbus_receive_byte()
1035 pmbus_send_string(pmdev, pmdev->pages[index].mfr_model); in pmbus_receive_byte()
1042 if (pmdev->pages[index].page_flags & PB_HAS_MFR_INFO) { in pmbus_receive_byte()
1043 pmbus_send_string(pmdev, pmdev->pages[index].mfr_revision); in pmbus_receive_byte()
1050 if (pmdev->pages[index].page_flags & PB_HAS_MFR_INFO) { in pmbus_receive_byte()
1051 pmbus_send_string(pmdev, pmdev->pages[index].mfr_location); in pmbus_receive_byte()
1057 case PMBUS_MFR_VIN_MIN: /* Read-Only word */ in pmbus_receive_byte()
1058 if (pmdev->pages[index].page_flags & PB_HAS_VIN_RATING) { in pmbus_receive_byte()
1059 pmbus_send16(pmdev, pmdev->pages[index].mfr_vin_min); in pmbus_receive_byte()
1065 case PMBUS_MFR_VIN_MAX: /* Read-Only word */ in pmbus_receive_byte()
1066 if (pmdev->pages[index].page_flags & PB_HAS_VIN_RATING) { in pmbus_receive_byte()
1067 pmbus_send16(pmdev, pmdev->pages[index].mfr_vin_max); in pmbus_receive_byte()
1073 case PMBUS_MFR_IIN_MAX: /* Read-Only word */ in pmbus_receive_byte()
1074 if (pmdev->pages[index].page_flags & PB_HAS_IIN_RATING) { in pmbus_receive_byte()
1075 pmbus_send16(pmdev, pmdev->pages[index].mfr_iin_max); in pmbus_receive_byte()
1081 case PMBUS_MFR_PIN_MAX: /* Read-Only word */ in pmbus_receive_byte()
1082 if (pmdev->pages[index].page_flags & PB_HAS_PIN_RATING) { in pmbus_receive_byte()
1083 pmbus_send16(pmdev, pmdev->pages[index].mfr_pin_max); in pmbus_receive_byte()
1089 case PMBUS_MFR_VOUT_MIN: /* Read-Only word */ in pmbus_receive_byte()
1090 if (pmdev->pages[index].page_flags & PB_HAS_VOUT_RATING) { in pmbus_receive_byte()
1091 pmbus_send16(pmdev, pmdev->pages[index].mfr_vout_min); in pmbus_receive_byte()
1097 case PMBUS_MFR_VOUT_MAX: /* Read-Only word */ in pmbus_receive_byte()
1098 if (pmdev->pages[index].page_flags & PB_HAS_VOUT_RATING) { in pmbus_receive_byte()
1099 pmbus_send16(pmdev, pmdev->pages[index].mfr_vout_max); in pmbus_receive_byte()
1105 case PMBUS_MFR_IOUT_MAX: /* Read-Only word */ in pmbus_receive_byte()
1106 if (pmdev->pages[index].page_flags & PB_HAS_IOUT_RATING) { in pmbus_receive_byte()
1107 pmbus_send16(pmdev, pmdev->pages[index].mfr_iout_max); in pmbus_receive_byte()
1113 case PMBUS_MFR_POUT_MAX: /* Read-Only word */ in pmbus_receive_byte()
1114 if (pmdev->pages[index].page_flags & PB_HAS_POUT_RATING) { in pmbus_receive_byte()
1115 pmbus_send16(pmdev, pmdev->pages[index].mfr_pout_max); in pmbus_receive_byte()
1122 if (pmdev->pages[index].page_flags & PB_HAS_TEMP_RATING) { in pmbus_receive_byte()
1123 pmbus_send16(pmdev, pmdev->pages[index].mfr_max_temp_1); in pmbus_receive_byte()
1130 if (pmdev->pages[index].page_flags & PB_HAS_TEMP_RATING) { in pmbus_receive_byte()
1131 pmbus_send16(pmdev, pmdev->pages[index].mfr_max_temp_2); in pmbus_receive_byte()
1138 if (pmdev->pages[index].page_flags & PB_HAS_TEMP_RATING) { in pmbus_receive_byte()
1139 pmbus_send16(pmdev, pmdev->pages[index].mfr_max_temp_3); in pmbus_receive_byte()
1150 case PMBUS_PAGE_PLUS_WRITE: /* Block Write-only */ in pmbus_receive_byte()
1153 case PMBUS_STORE_DEFAULT_CODE: /* Write-only Byte */ in pmbus_receive_byte()
1154 case PMBUS_RESTORE_DEFAULT_CODE: /* Write-only Byte */ in pmbus_receive_byte()
1157 case PMBUS_STORE_USER_CODE: /* Write-only Byte */ in pmbus_receive_byte()
1158 case PMBUS_RESTORE_USER_CODE: /* Write-only Byte */ in pmbus_receive_byte()
1159 case PMBUS_QUERY: /* Write-Only */ in pmbus_receive_byte()
1161 "%s: reading from write only register 0x%02x\n", in pmbus_receive_byte()
1162 __func__, pmdev->code); in pmbus_receive_byte()
1167 /* Pass through read request if not handled */ in pmbus_receive_byte()
1168 if (pmdc->receive_byte) { in pmbus_receive_byte()
1169 ret = pmdc->receive_byte(pmdev); in pmbus_receive_byte()
1174 if (pmdev->out_buf_len != 0) { in pmbus_receive_byte()
1184 * should separately get re-asserted.
1188 for (uint8_t i = 0; i < pmdev->num_pages; i++) { in pmbus_clear_faults()
1189 pmdev->pages[i].status_word = 0; in pmbus_clear_faults()
1190 pmdev->pages[i].status_vout = 0; in pmbus_clear_faults()
1191 pmdev->pages[i].status_iout = 0; in pmbus_clear_faults()
1192 pmdev->pages[i].status_input = 0; in pmbus_clear_faults()
1193 pmdev->pages[i].status_temperature = 0; in pmbus_clear_faults()
1194 pmdev->pages[i].status_cml = 0; in pmbus_clear_faults()
1195 pmdev->pages[i].status_other = 0; in pmbus_clear_faults()
1196 pmdev->pages[i].status_mfr_specific = 0; in pmbus_clear_faults()
1197 pmdev->pages[i].status_fans_1_2 = 0; in pmbus_clear_faults()
1198 pmdev->pages[i].status_fans_3_4 = 0; in pmbus_clear_faults()
1209 uint8_t index = pmdev->page; in pmbus_operation()
1210 if ((pmdev->pages[index].operation & PB_OP_ON) == 0) { in pmbus_operation()
1211 pmdev->pages[index].read_vout = 0; in pmbus_operation()
1212 pmdev->pages[index].read_iout = 0; in pmbus_operation()
1213 pmdev->pages[index].read_pout = 0; in pmbus_operation()
1217 if (pmdev->pages[index].operation & (PB_OP_ON | PB_OP_MARGIN_HIGH)) { in pmbus_operation()
1218 pmdev->pages[index].read_vout = pmdev->pages[index].vout_margin_high; in pmbus_operation()
1221 if (pmdev->pages[index].operation & (PB_OP_ON | PB_OP_MARGIN_LOW)) { in pmbus_operation()
1222 pmdev->pages[index].read_vout = pmdev->pages[index].vout_margin_low; in pmbus_operation()
1239 if (!pmdev->pages) { /* allocate memory for pages on first use */ in pmbus_write_data()
1243 pmdev->in_buf_len = len; in pmbus_write_data()
1244 pmdev->in_buf = buf; in pmbus_write_data()
1246 pmdev->code = buf[0]; /* PMBus command code */ in pmbus_write_data()
1248 if (pmdev->code == PMBUS_CLEAR_FAULTS) { in pmbus_write_data()
1252 if (len == 1) { /* Single length writes are command codes only */ in pmbus_write_data()
1256 if (pmdev->code == PMBUS_PAGE) { in pmbus_write_data()
1257 pmdev->page = pmbus_receive8(pmdev); in pmbus_write_data()
1259 if (pmdev->page > pmdev->num_pages - 1 && pmdev->page != PB_ALL_PAGES) { in pmbus_write_data()
1262 __func__, pmdev->page); in pmbus_write_data()
1263 pmdev->page = 0; /* undefined behaviour - reset to page 0 */ in pmbus_write_data()
1271 if (pmdev->page == PB_ALL_PAGES) { in pmbus_write_data()
1272 for (int i = 0; i < pmdev->num_pages; i++) { in pmbus_write_data()
1273 pmdev->page = i; in pmbus_write_data()
1276 pmdev->page = PB_ALL_PAGES; in pmbus_write_data()
1280 index = pmdev->page; in pmbus_write_data()
1282 switch (pmdev->code) { in pmbus_write_data()
1284 pmdev->pages[index].operation = pmbus_receive8(pmdev); in pmbus_write_data()
1289 pmdev->pages[index].on_off_config = pmbus_receive8(pmdev); in pmbus_write_data()
1297 pmdev->pages[index].phase = pmbus_receive8(pmdev); in pmbus_write_data()
1300 case PMBUS_PAGE_PLUS_WRITE: /* Block Write-only */ in pmbus_write_data()
1302 pmdev->pages[index].write_protect = pmbus_receive8(pmdev); in pmbus_write_data()
1306 if (pmdev->pages[index].page_flags & PB_HAS_VOUT_MODE) { in pmbus_write_data()
1307 pmdev->pages[index].vout_mode = pmbus_receive8(pmdev); in pmbus_write_data()
1314 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1315 pmdev->pages[index].vout_command = pmbus_receive16(pmdev); in pmbus_write_data()
1322 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1323 pmdev->pages[index].vout_trim = pmbus_receive16(pmdev); in pmbus_write_data()
1330 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1331 pmdev->pages[index].vout_cal_offset = pmbus_receive16(pmdev); in pmbus_write_data()
1338 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1339 pmdev->pages[index].vout_max = pmbus_receive16(pmdev); in pmbus_write_data()
1346 if (pmdev->pages[index].page_flags & PB_HAS_VOUT_MARGIN) { in pmbus_write_data()
1347 pmdev->pages[index].vout_margin_high = pmbus_receive16(pmdev); in pmbus_write_data()
1354 if (pmdev->pages[index].page_flags & PB_HAS_VOUT_MARGIN) { in pmbus_write_data()
1355 pmdev->pages[index].vout_margin_low = pmbus_receive16(pmdev); in pmbus_write_data()
1362 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1363 pmdev->pages[index].vout_transition_rate = pmbus_receive16(pmdev); in pmbus_write_data()
1370 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1371 pmdev->pages[index].vout_droop = pmbus_receive16(pmdev); in pmbus_write_data()
1378 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1379 pmdev->pages[index].vout_scale_loop = pmbus_receive16(pmdev); in pmbus_write_data()
1386 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1387 pmdev->pages[index].vout_scale_monitor = pmbus_receive16(pmdev); in pmbus_write_data()
1394 if (pmdev->pages[index].page_flags & PB_HAS_VOUT_RATING) { in pmbus_write_data()
1395 pmdev->pages[index].vout_min = pmbus_receive16(pmdev); in pmbus_write_data()
1402 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1403 pmdev->pages[index].pout_max = pmbus_receive16(pmdev); in pmbus_write_data()
1410 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_write_data()
1411 pmdev->pages[index].vin_on = pmbus_receive16(pmdev); in pmbus_write_data()
1418 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_write_data()
1419 pmdev->pages[index].vin_off = pmbus_receive16(pmdev); in pmbus_write_data()
1426 if (pmdev->pages[index].page_flags & PB_HAS_IOUT_GAIN) { in pmbus_write_data()
1427 pmdev->pages[index].iout_cal_gain = pmbus_receive16(pmdev); in pmbus_write_data()
1434 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_write_data()
1435 pmdev->pages[index].fan_config_1_2 = pmbus_receive8(pmdev); in pmbus_write_data()
1442 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_write_data()
1443 pmdev->pages[index].fan_command_1 = pmbus_receive16(pmdev); in pmbus_write_data()
1450 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_write_data()
1451 pmdev->pages[index].fan_command_2 = pmbus_receive16(pmdev); in pmbus_write_data()
1458 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_write_data()
1459 pmdev->pages[index].fan_config_3_4 = pmbus_receive8(pmdev); in pmbus_write_data()
1466 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_write_data()
1467 pmdev->pages[index].fan_command_3 = pmbus_receive16(pmdev); in pmbus_write_data()
1474 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_write_data()
1475 pmdev->pages[index].fan_command_4 = pmbus_receive16(pmdev); in pmbus_write_data()
1482 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1483 pmdev->pages[index].vout_ov_fault_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1490 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1491 pmdev->pages[index].vout_ov_fault_response = pmbus_receive8(pmdev); in pmbus_write_data()
1498 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1499 pmdev->pages[index].vout_ov_warn_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1506 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1507 pmdev->pages[index].vout_uv_warn_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1514 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1515 pmdev->pages[index].vout_uv_fault_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1522 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1523 pmdev->pages[index].vout_uv_fault_response = pmbus_receive8(pmdev); in pmbus_write_data()
1530 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_write_data()
1531 pmdev->pages[index].iout_oc_fault_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1538 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_write_data()
1539 pmdev->pages[index].iout_oc_fault_response = pmbus_receive8(pmdev); in pmbus_write_data()
1546 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_write_data()
1547 pmdev->pages[index].iout_oc_lv_fault_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1554 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_write_data()
1555 pmdev->pages[index].iout_oc_lv_fault_response in pmbus_write_data()
1563 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_write_data()
1564 pmdev->pages[index].iout_oc_warn_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1571 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_write_data()
1572 pmdev->pages[index].iout_uc_fault_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1579 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_write_data()
1580 pmdev->pages[index].iout_uc_fault_response = pmbus_receive8(pmdev); in pmbus_write_data()
1587 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_write_data()
1588 pmdev->pages[index].ot_fault_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1595 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_write_data()
1596 pmdev->pages[index].ot_fault_response = pmbus_receive8(pmdev); in pmbus_write_data()
1603 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_write_data()
1604 pmdev->pages[index].ot_warn_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1611 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_write_data()
1612 pmdev->pages[index].ut_warn_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1619 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_write_data()
1620 pmdev->pages[index].ut_fault_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1627 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_write_data()
1628 pmdev->pages[index].ut_fault_response = pmbus_receive8(pmdev); in pmbus_write_data()
1635 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_write_data()
1636 pmdev->pages[index].vin_ov_fault_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1643 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_write_data()
1644 pmdev->pages[index].vin_ov_fault_response = pmbus_receive8(pmdev); in pmbus_write_data()
1651 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_write_data()
1652 pmdev->pages[index].vin_ov_warn_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1659 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_write_data()
1660 pmdev->pages[index].vin_uv_warn_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1667 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_write_data()
1668 pmdev->pages[index].vin_uv_fault_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1675 if (pmdev->pages[index].page_flags & PB_HAS_VIN) { in pmbus_write_data()
1676 pmdev->pages[index].vin_uv_fault_response = pmbus_receive8(pmdev); in pmbus_write_data()
1683 if (pmdev->pages[index].page_flags & PB_HAS_IIN) { in pmbus_write_data()
1684 pmdev->pages[index].iin_oc_fault_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1691 if (pmdev->pages[index].page_flags & PB_HAS_IIN) { in pmbus_write_data()
1692 pmdev->pages[index].iin_oc_fault_response = pmbus_receive8(pmdev); in pmbus_write_data()
1699 if (pmdev->pages[index].page_flags & PB_HAS_IIN) { in pmbus_write_data()
1700 pmdev->pages[index].iin_oc_warn_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1707 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1708 pmdev->pages[index].pout_op_fault_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1715 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1716 pmdev->pages[index].pout_op_fault_response = pmbus_receive8(pmdev); in pmbus_write_data()
1723 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1724 pmdev->pages[index].pout_op_warn_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1731 if (pmdev->pages[index].page_flags & PB_HAS_PIN) { in pmbus_write_data()
1732 pmdev->pages[index].pin_op_warn_limit = pmbus_receive16(pmdev); in pmbus_write_data()
1739 pmdev->pages[index].status_word = pmbus_receive8(pmdev); in pmbus_write_data()
1743 pmdev->pages[index].status_word = pmbus_receive16(pmdev); in pmbus_write_data()
1747 if (pmdev->pages[index].page_flags & PB_HAS_VOUT) { in pmbus_write_data()
1748 pmdev->pages[index].status_vout = pmbus_receive8(pmdev); in pmbus_write_data()
1755 if (pmdev->pages[index].page_flags & PB_HAS_IOUT) { in pmbus_write_data()
1756 pmdev->pages[index].status_iout = pmbus_receive8(pmdev); in pmbus_write_data()
1763 pmdev->pages[index].status_input = pmbus_receive8(pmdev); in pmbus_write_data()
1767 if (pmdev->pages[index].page_flags & PB_HAS_TEMPERATURE) { in pmbus_write_data()
1768 pmdev->pages[index].status_temperature = pmbus_receive8(pmdev); in pmbus_write_data()
1775 pmdev->pages[index].status_cml = pmbus_receive8(pmdev); in pmbus_write_data()
1779 pmdev->pages[index].status_other = pmbus_receive8(pmdev); in pmbus_write_data()
1783 pmdev->pages[index].status_mfr_specific = pmbus_receive8(pmdev); in pmbus_write_data()
1787 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_write_data()
1788 pmbus_send8(pmdev, pmdev->pages[index].status_fans_1_2); in pmbus_write_data()
1795 if (pmdev->pages[index].page_flags & PB_HAS_FAN) { in pmbus_write_data()
1796 pmbus_send8(pmdev, pmdev->pages[index].status_fans_3_4); in pmbus_write_data()
1802 case PMBUS_PAGE_PLUS_READ: /* Block Read-only */ in pmbus_write_data()
1803 case PMBUS_CAPABILITY: /* Read-Only byte */ in pmbus_write_data()
1804 case PMBUS_COEFFICIENTS: /* Read-only block 5 bytes */ in pmbus_write_data()
1805 case PMBUS_READ_EIN: /* Read-Only block 5 bytes */ in pmbus_write_data()
1806 case PMBUS_READ_EOUT: /* Read-Only block 5 bytes */ in pmbus_write_data()
1807 case PMBUS_READ_VIN: /* Read-Only word */ in pmbus_write_data()
1808 case PMBUS_READ_IIN: /* Read-Only word */ in pmbus_write_data()
1809 case PMBUS_READ_VCAP: /* Read-Only word */ in pmbus_write_data()
1810 case PMBUS_READ_VOUT: /* Read-Only word */ in pmbus_write_data()
1811 case PMBUS_READ_IOUT: /* Read-Only word */ in pmbus_write_data()
1812 case PMBUS_READ_TEMPERATURE_1: /* Read-Only word */ in pmbus_write_data()
1813 case PMBUS_READ_TEMPERATURE_2: /* Read-Only word */ in pmbus_write_data()
1814 case PMBUS_READ_TEMPERATURE_3: /* Read-Only word */ in pmbus_write_data()
1815 case PMBUS_READ_FAN_SPEED_1: /* Read-Only word */ in pmbus_write_data()
1816 case PMBUS_READ_FAN_SPEED_2: /* Read-Only word */ in pmbus_write_data()
1817 case PMBUS_READ_FAN_SPEED_3: /* Read-Only word */ in pmbus_write_data()
1818 case PMBUS_READ_FAN_SPEED_4: /* Read-Only word */ in pmbus_write_data()
1819 case PMBUS_READ_DUTY_CYCLE: /* Read-Only word */ in pmbus_write_data()
1820 case PMBUS_READ_FREQUENCY: /* Read-Only word */ in pmbus_write_data()
1821 case PMBUS_READ_POUT: /* Read-Only word */ in pmbus_write_data()
1822 case PMBUS_READ_PIN: /* Read-Only word */ in pmbus_write_data()
1823 case PMBUS_REVISION: /* Read-Only byte */ in pmbus_write_data()
1824 case PMBUS_APP_PROFILE_SUPPORT: /* Read-Only block-read */ in pmbus_write_data()
1825 case PMBUS_MFR_VIN_MIN: /* Read-Only word */ in pmbus_write_data()
1826 case PMBUS_MFR_VIN_MAX: /* Read-Only word */ in pmbus_write_data()
1827 case PMBUS_MFR_IIN_MAX: /* Read-Only word */ in pmbus_write_data()
1828 case PMBUS_MFR_PIN_MAX: /* Read-Only word */ in pmbus_write_data()
1829 case PMBUS_MFR_VOUT_MIN: /* Read-Only word */ in pmbus_write_data()
1830 case PMBUS_MFR_VOUT_MAX: /* Read-Only word */ in pmbus_write_data()
1831 case PMBUS_MFR_IOUT_MAX: /* Read-Only word */ in pmbus_write_data()
1832 case PMBUS_MFR_POUT_MAX: /* Read-Only word */ in pmbus_write_data()
1833 case PMBUS_MFR_TAMBIENT_MAX: /* Read-Only word */ in pmbus_write_data()
1834 case PMBUS_MFR_TAMBIENT_MIN: /* Read-Only word */ in pmbus_write_data()
1835 case PMBUS_MFR_EFFICIENCY_LL: /* Read-Only block 14 bytes */ in pmbus_write_data()
1836 case PMBUS_MFR_EFFICIENCY_HL: /* Read-Only block 14 bytes */ in pmbus_write_data()
1837 case PMBUS_MFR_PIN_ACCURACY: /* Read-Only byte */ in pmbus_write_data()
1838 case PMBUS_IC_DEVICE_ID: /* Read-Only block-read */ in pmbus_write_data()
1839 case PMBUS_IC_DEVICE_REV: /* Read-Only block-read */ in pmbus_write_data()
1841 "%s: writing to read-only register 0x%02x\n", in pmbus_write_data()
1842 __func__, pmdev->code); in pmbus_write_data()
1848 if (pmdc->write_data) { in pmbus_write_data()
1849 ret = pmdc->write_data(pmdev, buf, len); in pmbus_write_data()
1854 pmdev->in_buf_len = 0; in pmbus_write_data()
1860 if (!pmdev->pages) { /* allocate memory for pages on first use */ in pmbus_page_config()
1866 for (int i = 0; i < pmdev->num_pages; i++) { in pmbus_page_config()
1867 pmdev->pages[i].page_flags = flags; in pmbus_page_config()
1872 if (index > pmdev->num_pages - 1) { in pmbus_page_config()
1876 return -1; in pmbus_page_config()
1879 pmdev->pages[index].page_flags = flags; in pmbus_page_config()
1902 g_free(pmdev->pages); in pmbus_device_finalize()
1909 k->quick_cmd = pmbus_quick_cmd; in pmbus_device_class_init()
1910 k->write_data = pmbus_write_data; in pmbus_device_class_init()
1911 k->receive_byte = pmbus_receive_byte; in pmbus_device_class_init()