static int adm1275_write_word_data(struct i2c_client *client, int page, int reg, u16 word) { int ret; if (page) return -ENXIO; switch (reg) { case PMBUS_IOUT_UC_FAULT_LIMIT: case PMBUS_IOUT_OC_FAULT_LIMIT: ret = pmbus_write_word_data(client, 0, ADM1275_IOUT_WARN2_LIMIT, word); break; case PMBUS_VIRT_RESET_IOUT_HISTORY: ret = pmbus_write_word_data(client, 0, ADM1275_PEAK_IOUT, 0); break; case PMBUS_VIRT_RESET_VOUT_HISTORY: ret = pmbus_write_word_data(client, 0, ADM1275_PEAK_VOUT, 0); break; case PMBUS_VIRT_RESET_VIN_HISTORY: ret = pmbus_write_word_data(client, 0, ADM1275_PEAK_VIN, 0); break; case PMBUS_VIRT_RESET_PIN_HISTORY: ret = pmbus_write_word_data(client, 0, ADM1276_PEAK_PIN, 0); break; default: ret = -ENODATA; break; } return ret; }
static int max34440_write_word_data(struct i2c_client *client, int page, int reg, u16 word) { int ret; switch (reg) { case PMBUS_VIRT_RESET_VOUT_HISTORY: ret = pmbus_write_word_data(client, page, MAX34440_MFR_VOUT_PEAK, 0); break; case PMBUS_VIRT_RESET_IOUT_HISTORY: ret = pmbus_write_word_data(client, page, MAX34440_MFR_IOUT_PEAK, 0); break; case PMBUS_VIRT_RESET_TEMP_HISTORY: ret = pmbus_write_word_data(client, page, MAX34440_MFR_TEMPERATURE_PEAK, 0xffff); break; default: ret = -ENODATA; break; } return ret; }
static int lm25066_write_word_data(struct i2c_client *client, int page, int reg, u16 word) { int ret; if (page > 1) return -ENXIO; switch (reg) { case PMBUS_IIN_OC_WARN_LIMIT: ret = pmbus_write_word_data(client, 0, LM25066_MFR_IIN_OC_WARN_LIMIT, word); break; case PMBUS_PIN_OP_WARN_LIMIT: ret = pmbus_write_word_data(client, 0, LM25066_MFR_PIN_OP_WARN_LIMIT, word); break; case PMBUS_VIRT_RESET_PIN_HISTORY: ret = pmbus_write_byte(client, 0, LM25066_CLEAR_PIN_PEAK); break; default: ret = -ENODATA; break; } return ret; }
static int ltc3815_write_word_data(struct i2c_client *client, int page, int reg, u16 word) { int ret; switch (reg) { case PMBUS_VIRT_RESET_IIN_HISTORY: ret = pmbus_write_word_data(client, page, LTC3815_MFR_IIN_PEAK, 0); break; case PMBUS_VIRT_RESET_IOUT_HISTORY: ret = pmbus_write_word_data(client, page, LTC3815_MFR_IOUT_PEAK, 0); break; case PMBUS_VIRT_RESET_VOUT_HISTORY: ret = pmbus_write_word_data(client, page, LTC3815_MFR_VOUT_PEAK, 0); break; case PMBUS_VIRT_RESET_VIN_HISTORY: ret = pmbus_write_word_data(client, page, LTC3815_MFR_VIN_PEAK, 0); break; case PMBUS_VIRT_RESET_TEMP_HISTORY: ret = pmbus_write_word_data(client, page, LTC3815_MFR_TEMP_PEAK, 0); break; default: ret = -ENODATA; break; } return ret; }
static int bmr46x_write_word_data(struct i2c_client *client, int page, int reg, u16 word) { const struct pmbus_driver_info *info = pmbus_get_driver_info(client); struct bmr46x_data *data = to_bmr46x_data(info); int ret, vreg; if (page > 0) return -ENXIO; /* * Limit register detection. */ switch (reg) { case PMBUS_VOUT_OV_WARN_LIMIT: case PMBUS_VOUT_UV_WARN_LIMIT: case PMBUS_IOUT_OC_WARN_LIMIT: case PMBUS_IOUT_OC_LV_FAULT_LIMIT: /* NotImpl on BMR461 */ return -ENXIO; default: if (reg >= PMBUS_VIRT_BASE) return -ENXIO; vreg = reg; break; } bmr46x_wait(data); ret = pmbus_write_word_data(client, page, vreg, word); data->access = ktime_get(); return ret; }
static int max34440_write_word_data(struct i2c_client *client, int page, int reg, u16 word) { const struct pmbus_driver_info *info = pmbus_get_driver_info(client); const struct max34440_data *data = to_max34440_data(info); int ret; switch (reg) { case PMBUS_VIRT_RESET_POUT_HISTORY: ret = pmbus_write_word_data(client, page, MAX34446_MFR_POUT_PEAK, 0); if (ret) break; ret = pmbus_write_word_data(client, page, MAX34446_MFR_POUT_AVG, 0); break; case PMBUS_VIRT_RESET_VOUT_HISTORY: ret = pmbus_write_word_data(client, page, MAX34440_MFR_VOUT_MIN, 0x7fff); if (ret) break; ret = pmbus_write_word_data(client, page, MAX34440_MFR_VOUT_PEAK, 0); break; case PMBUS_VIRT_RESET_IOUT_HISTORY: ret = pmbus_write_word_data(client, page, MAX34440_MFR_IOUT_PEAK, 0); if (!ret && data->id == max34446) ret = pmbus_write_word_data(client, page, MAX34446_MFR_IOUT_AVG, 0); break; case PMBUS_VIRT_RESET_TEMP_HISTORY: ret = pmbus_write_word_data(client, page, MAX34440_MFR_TEMPERATURE_PEAK, 0x8000); if (!ret && data->id == max34446) ret = pmbus_write_word_data(client, page, MAX34446_MFR_TEMPERATURE_AVG, 0); break; default: ret = -ENODATA; break; } return ret; }
static int adm1275_write_word_data(struct i2c_client *client, int page, int reg, u16 word) { int ret; if (page) return -EINVAL; switch (reg) { case PMBUS_VIRT_RESET_IOUT_HISTORY: ret = pmbus_write_word_data(client, 0, ADM1275_PEAK_IOUT, 0); break; case PMBUS_VIRT_RESET_VOUT_HISTORY: ret = pmbus_write_word_data(client, 0, ADM1275_PEAK_VOUT, 0); break; case PMBUS_VIRT_RESET_VIN_HISTORY: ret = pmbus_write_word_data(client, 0, ADM1275_PEAK_VIN, 0); break; default: ret = -ENODATA; break; } return ret; }
static int zl6100_write_word_data(struct i2c_client *client, int page, int reg, u16 word) { const struct pmbus_driver_info *info = pmbus_get_driver_info(client); struct zl6100_data *data = to_zl6100_data(info); int ret, vreg; if (page > 0) return -ENXIO; switch (reg) { case PMBUS_VIRT_VMON_OV_WARN_LIMIT: word = zl6100_d2l(DIV_ROUND_CLOSEST(zl6100_l2d(word) * 10, 9)); vreg = MFR_VMON_OV_FAULT_LIMIT; pmbus_clear_cache(client); break; case PMBUS_VIRT_VMON_OV_FAULT_LIMIT: vreg = MFR_VMON_OV_FAULT_LIMIT; pmbus_clear_cache(client); break; case PMBUS_VIRT_VMON_UV_WARN_LIMIT: word = zl6100_d2l(DIV_ROUND_CLOSEST(zl6100_l2d(word) * 10, 11)); vreg = MFR_VMON_UV_FAULT_LIMIT; pmbus_clear_cache(client); break; case PMBUS_VIRT_VMON_UV_FAULT_LIMIT: vreg = MFR_VMON_UV_FAULT_LIMIT; pmbus_clear_cache(client); break; default: if (reg >= PMBUS_VIRT_BASE) return -ENXIO; vreg = reg; } zl6100_wait(data); ret = pmbus_write_word_data(client, page, vreg, word); data->access = ktime_get(); return ret; }
static int ltc3815_write_byte(struct i2c_client *client, int page, u8 reg) { int ret; switch (reg) { case PMBUS_CLEAR_FAULTS: /* * LTC3815 does not support the CLEAR_FAULTS command. * Emulate it by clearing the status register. */ ret = pmbus_read_word_data(client, 0, PMBUS_STATUS_WORD); if (ret > 0) { pmbus_write_word_data(client, 0, PMBUS_STATUS_WORD, ret); ret = 0; } break; default: ret = -ENODATA; break; } return ret; }