static int lm25066_remove(struct i2c_client *client) { const struct pmbus_driver_info *info = pmbus_get_driver_info(client); const struct lm25066_data *data = to_lm25066_data(info); int ret; ret = pmbus_do_remove(client); kfree(data); return ret; }
static int lm25066_read_word_data(struct i2c_client *client, int page, int reg) { const struct pmbus_driver_info *info = pmbus_get_driver_info(client); const struct lm25066_data *data = to_lm25066_data(info); int ret; if (page > 1) return -ENXIO; /* Map READ_VAUX into READ_VOUT register on page 1 */ if (page == 1) { switch (reg) { case PMBUS_READ_VOUT: ret = pmbus_read_word_data(client, 0, LM25066_READ_VAUX); if (ret < 0) break; /* Adjust returned value to match VOUT coefficients */ switch (data->id) { case lm25066: /* VOUT: 4.54 mV VAUX: 283.2 uV LSB */ ret = DIV_ROUND_CLOSEST(ret * 2832, 45400); break; case lm5064: /* VOUT: 4.53 mV VAUX: 700 uV LSB */ ret = DIV_ROUND_CLOSEST(ret * 70, 453); break; case lm5066: /* VOUT: 2.18 mV VAUX: 725 uV LSB */ ret = DIV_ROUND_CLOSEST(ret * 725, 2180); break; } break; default: /* No other valid registers on page 1 */ ret = -ENXIO; break; } goto done; } switch (reg) { case PMBUS_READ_IIN: ret = pmbus_read_word_data(client, 0, LM25066_MFR_READ_IIN); break; case PMBUS_READ_PIN: ret = pmbus_read_word_data(client, 0, LM25066_MFR_READ_PIN); break; case PMBUS_IIN_OC_WARN_LIMIT: ret = pmbus_read_word_data(client, 0, LM25066_MFR_IIN_OC_WARN_LIMIT); break; case PMBUS_PIN_OP_WARN_LIMIT: ret = pmbus_read_word_data(client, 0, LM25066_MFR_PIN_OP_WARN_LIMIT); break; case PMBUS_VIRT_READ_VIN_AVG: ret = pmbus_read_word_data(client, 0, LM25066_READ_AVG_VIN); break; case PMBUS_VIRT_READ_VOUT_AVG: ret = pmbus_read_word_data(client, 0, LM25066_READ_AVG_VOUT); break; case PMBUS_VIRT_READ_IIN_AVG: ret = pmbus_read_word_data(client, 0, LM25066_READ_AVG_IIN); break; case PMBUS_VIRT_READ_PIN_AVG: ret = pmbus_read_word_data(client, 0, LM25066_READ_AVG_PIN); break; case PMBUS_VIRT_READ_PIN_MAX: ret = pmbus_read_word_data(client, 0, LM25066_READ_PIN_PEAK); break; case PMBUS_VIRT_RESET_PIN_HISTORY: ret = 0; break; default: ret = -ENODATA; break; } done: return ret; }