|
28 | 28 | #include <linux/delay.h>
|
29 | 29 | #include "pmbus.h"
|
30 | 30 |
|
31 |
| -enum chips { zl2004, zl2006, zl2008, zl2105, zl2106, zl6100, zl6105 }; |
| 31 | +enum chips { zl2004, zl2005, zl2006, zl2008, zl2105, zl2106, zl6100, zl6105 }; |
32 | 32 |
|
33 | 33 | struct zl6100_data {
|
34 | 34 | int id;
|
@@ -65,6 +65,19 @@ static int zl6100_read_word_data(struct i2c_client *client, int page, int reg)
|
65 | 65 | if (page || reg >= PMBUS_VIRT_BASE)
|
66 | 66 | return -ENXIO;
|
67 | 67 |
|
| 68 | + if (data->id == zl2005) { |
| 69 | + /* |
| 70 | + * Limit register detection is not reliable on ZL2005. |
| 71 | + * Make sure registers are not erroneously detected. |
| 72 | + */ |
| 73 | + switch (reg) { |
| 74 | + case PMBUS_VOUT_OV_WARN_LIMIT: |
| 75 | + case PMBUS_VOUT_UV_WARN_LIMIT: |
| 76 | + case PMBUS_IOUT_OC_WARN_LIMIT: |
| 77 | + return -ENXIO; |
| 78 | + } |
| 79 | + } |
| 80 | + |
68 | 81 | zl6100_wait(data);
|
69 | 82 | ret = pmbus_read_word_data(client, page, reg);
|
70 | 83 | data->access = ktime_get();
|
@@ -122,7 +135,10 @@ static int zl6100_write_byte(struct i2c_client *client, int page, u8 value)
|
122 | 135 | }
|
123 | 136 |
|
124 | 137 | static const struct i2c_device_id zl6100_id[] = {
|
| 138 | + {"bmr451", zl2005}, |
| 139 | + {"bmr462", zl2008}, |
125 | 140 | {"zl2004", zl2004},
|
| 141 | + {"zl2005", zl2005}, |
126 | 142 | {"zl2006", zl2006},
|
127 | 143 | {"zl2008", zl2008},
|
128 | 144 | {"zl2105", zl2105},
|
@@ -178,13 +194,14 @@ static int zl6100_probe(struct i2c_client *client,
|
178 | 194 |
|
179 | 195 | /*
|
180 | 196 | * ZL2008, ZL2105, and ZL6100 are known to require a wait time
|
181 |
| - * between I2C accesses. ZL2004 and ZL6105 are known to be safe. |
| 197 | + * between I2C accesses. ZL2004, ZL2005, and ZL6105 are known to be |
| 198 | + * safe. Other chips have not yet been tested. |
182 | 199 | *
|
183 | 200 | * Only clear the wait time for chips known to be safe. The wait time
|
184 | 201 | * can be cleared later for additional chips if tests show that it
|
185 | 202 | * is not needed (in other words, better be safe than sorry).
|
186 | 203 | */
|
187 |
| - if (data->id == zl2004 || data->id == zl6105) |
| 204 | + if (data->id == zl2004 || data->id == zl2005 || data->id == zl6105) |
188 | 205 | delay = 0;
|
189 | 206 |
|
190 | 207 | /*
|
|
0 commit comments