hwmon: (pmbus) add helpers for byte write and read modify write
Add two helper functions: * pmbus_write_byte_data = paged byte write * pmbus_update_byte_data = paged byte read/modify/write Signed-off-by: Alan Tull <atull@opensource.altera.com> Cc: Mark Brown <broonie@kernel.org> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
Родитель
7e9d62d387
Коммит
11c119986f
|
@ -375,6 +375,10 @@ int pmbus_read_word_data(struct i2c_client *client, u8 page, u8 reg);
|
|||
int pmbus_write_word_data(struct i2c_client *client, u8 page, u8 reg, u16 word);
|
||||
int pmbus_read_byte_data(struct i2c_client *client, int page, u8 reg);
|
||||
int pmbus_write_byte(struct i2c_client *client, int page, u8 value);
|
||||
int pmbus_write_byte_data(struct i2c_client *client, int page, u8 reg,
|
||||
u8 value);
|
||||
int pmbus_update_byte_data(struct i2c_client *client, int page, u8 reg,
|
||||
u8 mask, u8 value);
|
||||
void pmbus_clear_faults(struct i2c_client *client);
|
||||
bool pmbus_check_byte_register(struct i2c_client *client, int page, int reg);
|
||||
bool pmbus_check_word_register(struct i2c_client *client, int page, int reg);
|
||||
|
|
|
@ -253,6 +253,37 @@ int pmbus_read_byte_data(struct i2c_client *client, int page, u8 reg)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(pmbus_read_byte_data);
|
||||
|
||||
int pmbus_write_byte_data(struct i2c_client *client, int page, u8 reg, u8 value)
|
||||
{
|
||||
int rv;
|
||||
|
||||
rv = pmbus_set_page(client, page);
|
||||
if (rv < 0)
|
||||
return rv;
|
||||
|
||||
return i2c_smbus_write_byte_data(client, reg, value);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pmbus_write_byte_data);
|
||||
|
||||
int pmbus_update_byte_data(struct i2c_client *client, int page, u8 reg,
|
||||
u8 mask, u8 value)
|
||||
{
|
||||
unsigned int tmp;
|
||||
int rv;
|
||||
|
||||
rv = pmbus_read_byte_data(client, page, reg);
|
||||
if (rv < 0)
|
||||
return rv;
|
||||
|
||||
tmp = (rv & ~mask) | (value & mask);
|
||||
|
||||
if (tmp != rv)
|
||||
rv = pmbus_write_byte_data(client, page, reg, tmp);
|
||||
|
||||
return rv;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pmbus_update_byte_data);
|
||||
|
||||
/*
|
||||
* _pmbus_read_byte_data() is similar to pmbus_read_byte_data(), but checks if
|
||||
* a device specific mapping function exists and calls it if necessary.
|
||||
|
|
Загрузка…
Ссылка в новой задаче