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:
parent
7e9d62d387
commit
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_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_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(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);
|
void pmbus_clear_faults(struct i2c_client *client);
|
||||||
bool pmbus_check_byte_register(struct i2c_client *client, int page, int reg);
|
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);
|
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);
|
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
|
* _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.
|
* a device specific mapping function exists and calls it if necessary.
|
||||||
|
|
Loading…
Reference in New Issue