hwmon: (pmbus/core) Implement regulator get_status
Add get_status for pmbus_regulator_ops. Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Signed-off-by: Naresh Solanki <Naresh.Solanki@9elements.com> Link: https://lore.kernel.org/r/20221124193642.4081054-1-Naresh.Solanki@9elements.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
3ca0f12a02
commit
c05f477c4b
@ -2855,6 +2855,49 @@ static int pmbus_regulator_get_error_flags(struct regulator_dev *rdev, unsigned
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int pmbus_regulator_get_status(struct regulator_dev *rdev)
|
||||||
|
{
|
||||||
|
struct device *dev = rdev_get_dev(rdev);
|
||||||
|
struct i2c_client *client = to_i2c_client(dev->parent);
|
||||||
|
struct pmbus_data *data = i2c_get_clientdata(client);
|
||||||
|
u8 page = rdev_get_id(rdev);
|
||||||
|
int status, ret;
|
||||||
|
|
||||||
|
mutex_lock(&data->update_lock);
|
||||||
|
status = pmbus_get_status(client, page, PMBUS_STATUS_WORD);
|
||||||
|
if (status < 0) {
|
||||||
|
ret = status;
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status & PB_STATUS_OFF) {
|
||||||
|
ret = REGULATOR_STATUS_OFF;
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If regulator is ON & reports power good then return ON */
|
||||||
|
if (!(status & PB_STATUS_POWER_GOOD_N)) {
|
||||||
|
ret = REGULATOR_STATUS_ON;
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = pmbus_regulator_get_error_flags(rdev, &status);
|
||||||
|
if (ret)
|
||||||
|
goto unlock;
|
||||||
|
|
||||||
|
if (status & (REGULATOR_ERROR_UNDER_VOLTAGE | REGULATOR_ERROR_OVER_CURRENT |
|
||||||
|
REGULATOR_ERROR_REGULATION_OUT | REGULATOR_ERROR_FAIL | REGULATOR_ERROR_OVER_TEMP)) {
|
||||||
|
ret = REGULATOR_STATUS_ERROR;
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = REGULATOR_STATUS_UNDEFINED;
|
||||||
|
|
||||||
|
unlock:
|
||||||
|
mutex_unlock(&data->update_lock);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int pmbus_regulator_get_low_margin(struct i2c_client *client, int page)
|
static int pmbus_regulator_get_low_margin(struct i2c_client *client, int page)
|
||||||
{
|
{
|
||||||
struct pmbus_data *data = i2c_get_clientdata(client);
|
struct pmbus_data *data = i2c_get_clientdata(client);
|
||||||
@ -2995,6 +3038,7 @@ const struct regulator_ops pmbus_regulator_ops = {
|
|||||||
.disable = pmbus_regulator_disable,
|
.disable = pmbus_regulator_disable,
|
||||||
.is_enabled = pmbus_regulator_is_enabled,
|
.is_enabled = pmbus_regulator_is_enabled,
|
||||||
.get_error_flags = pmbus_regulator_get_error_flags,
|
.get_error_flags = pmbus_regulator_get_error_flags,
|
||||||
|
.get_status = pmbus_regulator_get_status,
|
||||||
.get_voltage = pmbus_regulator_get_voltage,
|
.get_voltage = pmbus_regulator_get_voltage,
|
||||||
.set_voltage = pmbus_regulator_set_voltage,
|
.set_voltage = pmbus_regulator_set_voltage,
|
||||||
.list_voltage = pmbus_regulator_list_voltage,
|
.list_voltage = pmbus_regulator_list_voltage,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user