2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00

hwmon: (pmbus/zl6100) Add support for ZL2005

Add explicit support for ZL2005. Functionality is almost the same as with other
Zilker Labs / Intersil chips, but limit register detection does not work reliably.

Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Reviewed-by: Robert Coulson <robert.coulson@ericsson.com>
This commit is contained in:
Guenter Roeck 2011-10-01 16:50:36 -07:00
parent 87102808d0
commit bc581e6fcc
3 changed files with 23 additions and 4 deletions

View File

@ -6,6 +6,10 @@ Supported chips:
Prefix: 'zl2004' Prefix: 'zl2004'
Addresses scanned: - Addresses scanned: -
Datasheet: http://www.intersil.com/data/fn/fn6847.pdf Datasheet: http://www.intersil.com/data/fn/fn6847.pdf
* Intersil / Zilker Labs ZL2005
Prefix: 'zl2005'
Addresses scanned: -
Datasheet: http://www.intersil.com/data/fn/fn6848.pdf
* Intersil / Zilker Labs ZL2006 * Intersil / Zilker Labs ZL2006
Prefix: 'zl2006' Prefix: 'zl2006'
Addresses scanned: - Addresses scanned: -

View File

@ -113,8 +113,8 @@ config SENSORS_ZL6100
default n default n
help help
If you say yes here you get hardware monitoring support for Intersil If you say yes here you get hardware monitoring support for Intersil
ZL2004, ZL2006, ZL2008, ZL2105, ZL2106, ZL6100, and ZL6105 Digital ZL2004, ZL2005, ZL2006, ZL2008, ZL2105, ZL2106, ZL6100, and ZL6105
DC/DC Controllers. Digital DC/DC Controllers.
This driver can also be built as a module. If so, the module will This driver can also be built as a module. If so, the module will
be called zl6100. be called zl6100.

View File

@ -28,7 +28,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include "pmbus.h" #include "pmbus.h"
enum chips { zl2004, zl2006, zl2008, zl2105, zl2106, zl6100, zl6105 }; enum chips { zl2004, zl2005, zl2006, zl2008, zl2105, zl2106, zl6100, zl6105 };
struct zl6100_data { struct zl6100_data {
int id; int id;
@ -65,6 +65,19 @@ static int zl6100_read_word_data(struct i2c_client *client, int page, int reg)
if (page || reg >= PMBUS_VIRT_BASE) if (page || reg >= PMBUS_VIRT_BASE)
return -ENXIO; return -ENXIO;
if (data->id == zl2005) {
/*
* Limit register detection is not reliable on ZL2005.
* Make sure registers are not erroneously detected.
*/
switch (reg) {
case PMBUS_VOUT_OV_WARN_LIMIT:
case PMBUS_VOUT_UV_WARN_LIMIT:
case PMBUS_IOUT_OC_WARN_LIMIT:
return -ENXIO;
}
}
zl6100_wait(data); zl6100_wait(data);
ret = pmbus_read_word_data(client, page, reg); ret = pmbus_read_word_data(client, page, reg);
data->access = ktime_get(); data->access = ktime_get();
@ -123,6 +136,7 @@ static int zl6100_write_byte(struct i2c_client *client, int page, u8 value)
static const struct i2c_device_id zl6100_id[] = { static const struct i2c_device_id zl6100_id[] = {
{"zl2004", zl2004}, {"zl2004", zl2004},
{"zl2005", zl2005},
{"zl2006", zl2006}, {"zl2006", zl2006},
{"zl2008", zl2008}, {"zl2008", zl2008},
{"zl2105", zl2105}, {"zl2105", zl2105},
@ -177,8 +191,9 @@ static int zl6100_probe(struct i2c_client *client,
data->id = mid->driver_data; data->id = mid->driver_data;
/* /*
* ZL2008, ZL2105, and ZL6100 are known to require a wait time * ZL2005, ZL2008, ZL2105, and ZL6100 are known to require a wait time
* between I2C accesses. ZL2004 and ZL6105 are known to be safe. * between I2C accesses. ZL2004 and ZL6105 are known to be safe.
* Other chips have not yet been tested.
* *
* Only clear the wait time for chips known to be safe. The wait time * Only clear the wait time for chips known to be safe. The wait time
* can be cleared later for additional chips if tests show that it * can be cleared later for additional chips if tests show that it