mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-05 13:25:20 +02:00
hwmon: pmbus: max15301: Use generic code
Use the generic pmbus bus access delay. Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Message-ID: <20240902075319.585656-2-patrick.rudolph@9elements.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
21d9e60131
commit
d83219e9fc
|
@ -31,8 +31,6 @@ MODULE_DEVICE_TABLE(i2c, max15301_id);
|
|||
|
||||
struct max15301_data {
|
||||
int id;
|
||||
ktime_t access; /* Chip access time */
|
||||
int delay; /* Delay between chip accesses in us */
|
||||
struct pmbus_driver_info info;
|
||||
};
|
||||
|
||||
|
@ -55,89 +53,6 @@ static struct max15301_data max15301_data = {
|
|||
}
|
||||
};
|
||||
|
||||
/* This chip needs a delay between accesses */
|
||||
static inline void max15301_wait(const struct max15301_data *data)
|
||||
{
|
||||
if (data->delay) {
|
||||
s64 delta = ktime_us_delta(ktime_get(), data->access);
|
||||
|
||||
if (delta < data->delay)
|
||||
udelay(data->delay - delta);
|
||||
}
|
||||
}
|
||||
|
||||
static int max15301_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 max15301_data *data = to_max15301_data(info);
|
||||
int ret;
|
||||
|
||||
if (page > 0)
|
||||
return -ENXIO;
|
||||
|
||||
if (reg >= PMBUS_VIRT_BASE)
|
||||
return -ENXIO;
|
||||
|
||||
max15301_wait(data);
|
||||
ret = pmbus_read_word_data(client, page, phase, reg);
|
||||
data->access = ktime_get();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int max15301_read_byte_data(struct i2c_client *client, int page, int reg)
|
||||
{
|
||||
const struct pmbus_driver_info *info = pmbus_get_driver_info(client);
|
||||
struct max15301_data *data = to_max15301_data(info);
|
||||
int ret;
|
||||
|
||||
if (page > 0)
|
||||
return -ENXIO;
|
||||
|
||||
max15301_wait(data);
|
||||
ret = pmbus_read_byte_data(client, page, reg);
|
||||
data->access = ktime_get();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int max15301_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 max15301_data *data = to_max15301_data(info);
|
||||
int ret;
|
||||
|
||||
if (page > 0)
|
||||
return -ENXIO;
|
||||
|
||||
if (reg >= PMBUS_VIRT_BASE)
|
||||
return -ENXIO;
|
||||
|
||||
max15301_wait(data);
|
||||
ret = pmbus_write_word_data(client, page, reg, word);
|
||||
data->access = ktime_get();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int max15301_write_byte(struct i2c_client *client, int page, u8 value)
|
||||
{
|
||||
const struct pmbus_driver_info *info = pmbus_get_driver_info(client);
|
||||
struct max15301_data *data = to_max15301_data(info);
|
||||
int ret;
|
||||
|
||||
if (page > 0)
|
||||
return -ENXIO;
|
||||
|
||||
max15301_wait(data);
|
||||
ret = pmbus_write_byte(client, page, value);
|
||||
data->access = ktime_get();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int max15301_probe(struct i2c_client *client)
|
||||
{
|
||||
int status;
|
||||
|
@ -164,12 +79,7 @@ static int max15301_probe(struct i2c_client *client)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
max15301_data.delay = delay;
|
||||
|
||||
info->read_byte_data = max15301_read_byte_data;
|
||||
info->read_word_data = max15301_read_word_data;
|
||||
info->write_byte = max15301_write_byte;
|
||||
info->write_word_data = max15301_write_word_data;
|
||||
info->access_delay = delay;
|
||||
|
||||
return pmbus_do_probe(client, info);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user