hwmon: pmbus: ucd9000: Use generic code
Use generic pmbus bus write access delay. Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Message-ID: <20240902075319.585656-3-patrick.rudolph@9elements.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
committed by
Guenter Roeck
parent
d83219e9fc
commit
106cfea5fa
@@ -67,7 +67,6 @@ struct ucd9000_data {
|
||||
struct gpio_chip gpio;
|
||||
#endif
|
||||
struct dentry *debugfs;
|
||||
ktime_t write_time;
|
||||
};
|
||||
#define to_ucd9000_data(_info) container_of(_info, struct ucd9000_data, info)
|
||||
|
||||
@@ -86,63 +85,6 @@ struct ucd9000_debugfs_entry {
|
||||
*/
|
||||
#define UCD90320_WAIT_DELAY_US 500
|
||||
|
||||
static inline void ucd90320_wait(const struct ucd9000_data *data)
|
||||
{
|
||||
s64 delta = ktime_us_delta(ktime_get(), data->write_time);
|
||||
|
||||
if (delta < UCD90320_WAIT_DELAY_US)
|
||||
udelay(UCD90320_WAIT_DELAY_US - delta);
|
||||
}
|
||||
|
||||
static int ucd90320_read_word_data(struct i2c_client *client, int page,
|
||||
int phase, int reg)
|
||||
{
|
||||
const struct pmbus_driver_info *info = pmbus_get_driver_info(client);
|
||||
struct ucd9000_data *data = to_ucd9000_data(info);
|
||||
|
||||
if (reg >= PMBUS_VIRT_BASE)
|
||||
return -ENXIO;
|
||||
|
||||
ucd90320_wait(data);
|
||||
return pmbus_read_word_data(client, page, phase, reg);
|
||||
}
|
||||
|
||||
static int ucd90320_read_byte_data(struct i2c_client *client, int page, int reg)
|
||||
{
|
||||
const struct pmbus_driver_info *info = pmbus_get_driver_info(client);
|
||||
struct ucd9000_data *data = to_ucd9000_data(info);
|
||||
|
||||
ucd90320_wait(data);
|
||||
return pmbus_read_byte_data(client, page, reg);
|
||||
}
|
||||
|
||||
static int ucd90320_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 ucd9000_data *data = to_ucd9000_data(info);
|
||||
int ret;
|
||||
|
||||
ucd90320_wait(data);
|
||||
ret = pmbus_write_word_data(client, page, reg, word);
|
||||
data->write_time = ktime_get();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ucd90320_write_byte(struct i2c_client *client, int page, u8 value)
|
||||
{
|
||||
const struct pmbus_driver_info *info = pmbus_get_driver_info(client);
|
||||
struct ucd9000_data *data = to_ucd9000_data(info);
|
||||
int ret;
|
||||
|
||||
ucd90320_wait(data);
|
||||
ret = pmbus_write_byte(client, page, value);
|
||||
data->write_time = ktime_get();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ucd9000_get_fan_config(struct i2c_client *client, int fan)
|
||||
{
|
||||
int fan_config = 0;
|
||||
@@ -667,10 +609,8 @@ static int ucd9000_probe(struct i2c_client *client)
|
||||
info->func[0] |= PMBUS_HAVE_FAN12 | PMBUS_HAVE_STATUS_FAN12
|
||||
| PMBUS_HAVE_FAN34 | PMBUS_HAVE_STATUS_FAN34;
|
||||
} else if (mid->driver_data == ucd90320) {
|
||||
info->read_byte_data = ucd90320_read_byte_data;
|
||||
info->read_word_data = ucd90320_read_word_data;
|
||||
info->write_byte = ucd90320_write_byte;
|
||||
info->write_word_data = ucd90320_write_word_data;
|
||||
/* Delay SMBus operations after a write */
|
||||
info->write_delay = UCD90320_WAIT_DELAY_US;
|
||||
}
|
||||
|
||||
ucd9000_probe_gpio(client, mid, data);
|
||||
|
||||
Reference in New Issue
Block a user