diff options
author | Guenter Roeck <guenter.roeck@ericsson.com> | 2011-07-30 01:08:07 -0400 |
---|---|---|
committer | Guenter Roeck <guenter.roeck@ericsson.com> | 2011-08-11 13:14:04 -0400 |
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 { | |||
325 | int (*read_word_data)(struct i2c_client *client, int page, int reg); | 325 | int (*read_word_data)(struct i2c_client *client, int page, int reg); |
326 | int (*write_word_data)(struct i2c_client *client, int page, int reg, | 326 | int (*write_word_data)(struct i2c_client *client, int page, int reg, |
327 | u16 word); | 327 | u16 word); |
328 | int (*write_byte)(struct i2c_client *client, int page, u8 value); | ||
328 | /* | 329 | /* |
329 | * The identify function determines supported PMBus functionality. | 330 | * The identify function determines supported PMBus functionality. |
330 | * This function is only necessary if a chip driver supports multiple | 331 | * 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) | |||
182 | } | 182 | } |
183 | EXPORT_SYMBOL_GPL(pmbus_write_byte); | 183 | EXPORT_SYMBOL_GPL(pmbus_write_byte); |
184 | 184 | ||
185 | /* | ||
186 | * _pmbus_write_byte() is similar to pmbus_write_byte(), but checks if | ||
187 | * a device specific mapping funcion exists and calls it if necessary. | ||
188 | */ | ||
189 | static int _pmbus_write_byte(struct i2c_client *client, int page, u8 value) | ||
190 | { | ||
191 | struct pmbus_data *data = i2c_get_clientdata(client); | ||
192 | const struct pmbus_driver_info *info = data->info; | ||
193 | int status; | ||
194 | |||
195 | if (info->write_byte) { | ||
196 | status = info->write_byte(client, page, value); | ||
197 | if (status != -ENODATA) | ||
198 | return status; | ||
199 | } | ||
200 | return pmbus_write_byte(client, page, value); | ||
201 | } | ||
202 | |||
185 | int pmbus_write_word_data(struct i2c_client *client, u8 page, u8 reg, u16 word) | 203 | int pmbus_write_word_data(struct i2c_client *client, u8 page, u8 reg, u16 word) |
186 | { | 204 | { |
187 | int rv; | 205 | int rv; |
@@ -281,7 +299,7 @@ static int _pmbus_read_byte_data(struct i2c_client *client, int page, int reg) | |||
281 | 299 | ||
282 | static void pmbus_clear_fault_page(struct i2c_client *client, int page) | 300 | static void pmbus_clear_fault_page(struct i2c_client *client, int page) |
283 | { | 301 | { |
284 | pmbus_write_byte(client, page, PMBUS_CLEAR_FAULTS); | 302 | _pmbus_write_byte(client, page, PMBUS_CLEAR_FAULTS); |
285 | } | 303 | } |
286 | 304 | ||
287 | void pmbus_clear_faults(struct i2c_client *client) | 305 | void pmbus_clear_faults(struct i2c_client *client) |