for (i = 0; i < PXE1610_NUM_PAGES; i++) { if (pmbus_check_byte_register(client, i, PMBUS_VOUT_MODE)) {
u8 vout_mode; int ret;
/* Read the register with VOUT scaling value.*/
ret = pmbus_read_byte_data(client, i, PMBUS_VOUT_MODE); if (ret < 0) return ret;
vout_mode = ret & GENMASK(4, 0);
switch (vout_mode) { case 1:
info->vrm_version[i] = vr12; break; case 2:
info->vrm_version[i] = vr13; break; default: /* * If prior pages are available limit operation * to them
*/ if (i != 0) {
info->pages = i; return 0;
}
if (!i2c_check_functionality(
client->adapter,
I2C_FUNC_SMBUS_READ_BYTE_DATA
| I2C_FUNC_SMBUS_READ_WORD_DATA
| I2C_FUNC_SMBUS_READ_BLOCK_DATA)) return -ENODEV;
/* * By default this device doesn't boot to page 0, so set page 0 * to access all pmbus registers.
*/
i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0);
/* Read Manufacturer id */
ret = i2c_smbus_read_block_data(client, PMBUS_MFR_ID, buf); if (ret < 0) {
dev_err(&client->dev, "Failed to read PMBUS_MFR_ID\n"); return ret;
} if (ret != 2 || strncmp(buf, "XP", 2)) {
dev_err(&client->dev, "MFR_ID unrecognized\n"); return -ENODEV;
}
info = devm_kmemdup(&client->dev, &pxe1610_info, sizeof(struct pmbus_driver_info),
GFP_KERNEL); if (!info) return -ENOMEM;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.