提交 bc581e6f 编写于 作者: G Guenter Roeck

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: NGuenter Roeck <guenter.roeck@ericsson.com>
Reviewed-by: NRobert Coulson <robert.coulson@ericsson.com>
上级 87102808
...@@ -6,6 +6,10 @@ Supported chips: ...@@ -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: -
......
...@@ -113,8 +113,8 @@ config SENSORS_ZL6100 ...@@ -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.
......
...@@ -28,7 +28,7 @@ ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册