diff options
| author | Guenter Roeck <guenter.roeck@ericsson.com> | 2011-07-29 22:08:07 -0700 | 
|---|---|---|
| committer | Guenter Roeck <guenter.roeck@ericsson.com> | 2011-08-11 10:14:04 -0700 | 
| commit | 044cd3a574be5cd97ab80d0c6d06f5fab327541d (patch) | |
| tree | 8780ad5134089df0ddb997903ae8ea483048208b /drivers | |
| parent | 322a8b034003c0d46d39af85bf24fee27b902f48 (diff) | |
hwmon: (pmbus) Virtualize pmbus_write_byte
With virtual pages and to be able to handle more chips, it is necessary to
virtualise pmbus_write_byte().
Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Reviewed-by: Robert Coulson <robert.coulson@ericsson.com>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/hwmon/pmbus/pmbus.h | 1 | ||||
| -rw-r--r-- | drivers/hwmon/pmbus/pmbus_core.c | 20 | 
2 files changed, 20 insertions, 1 deletions
| diff --git a/drivers/hwmon/pmbus/pmbus.h b/drivers/hwmon/pmbus/pmbus.h index 0808d986d75b..a6ae20ffef6b 100644 --- a/drivers/hwmon/pmbus/pmbus.h +++ b/drivers/hwmon/pmbus/pmbus.h @@ -325,6 +325,7 @@ struct pmbus_driver_info {  	int (*read_word_data)(struct i2c_client *client, int page, int reg);  	int (*write_word_data)(struct i2c_client *client, int page, int reg,  			       u16 word); +	int (*write_byte)(struct i2c_client *client, int page, u8 value);  	/*  	 * The identify function determines supported PMBus functionality.  	 * This function is only necessary if a chip driver supports multiple diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c index 5c1b6cf31701..a561c3a0e916 100644 --- a/drivers/hwmon/pmbus/pmbus_core.c +++ b/drivers/hwmon/pmbus/pmbus_core.c @@ -182,6 +182,24 @@ int pmbus_write_byte(struct i2c_client *client, int page, u8 value)  }  EXPORT_SYMBOL_GPL(pmbus_write_byte); +/* + * _pmbus_write_byte() is similar to pmbus_write_byte(), but checks if + * a device specific mapping funcion exists and calls it if necessary. + */ +static int _pmbus_write_byte(struct i2c_client *client, int page, u8 value) +{ +	struct pmbus_data *data = i2c_get_clientdata(client); +	const struct pmbus_driver_info *info = data->info; +	int status; + +	if (info->write_byte) { +		status = info->write_byte(client, page, value); +		if (status != -ENODATA) +			return status; +	} +	return pmbus_write_byte(client, page, value); +} +  int pmbus_write_word_data(struct i2c_client *client, u8 page, u8 reg, u16 word)  {  	int rv; @@ -281,7 +299,7 @@ static int _pmbus_read_byte_data(struct i2c_client *client, int page, int reg)  static void pmbus_clear_fault_page(struct i2c_client *client, int page)  { -	pmbus_write_byte(client, page, PMBUS_CLEAR_FAULTS); +	_pmbus_write_byte(client, page, PMBUS_CLEAR_FAULTS);  }  void pmbus_clear_faults(struct i2c_client *client) | 
