diff options
Diffstat (limited to 'drivers/hwmon')
-rw-r--r-- | drivers/hwmon/w83792d.c | 29 |
1 files changed, 9 insertions, 20 deletions
diff --git a/drivers/hwmon/w83792d.c b/drivers/hwmon/w83792d.c index ff1c9f0abf93..0ad1ae569531 100644 --- a/drivers/hwmon/w83792d.c +++ b/drivers/hwmon/w83792d.c | |||
@@ -269,7 +269,6 @@ DIV_TO_REG(long val) | |||
269 | struct w83792d_data { | 269 | struct w83792d_data { |
270 | struct i2c_client client; | 270 | struct i2c_client client; |
271 | struct class_device *class_dev; | 271 | struct class_device *class_dev; |
272 | struct semaphore lock; | ||
273 | enum chips type; | 272 | enum chips type; |
274 | 273 | ||
275 | struct semaphore update_lock; | 274 | struct semaphore update_lock; |
@@ -1192,7 +1191,6 @@ w83792d_detect(struct i2c_adapter *adapter, int address, int kind) | |||
1192 | new_client = &data->client; | 1191 | new_client = &data->client; |
1193 | i2c_set_clientdata(new_client, data); | 1192 | i2c_set_clientdata(new_client, data); |
1194 | new_client->addr = address; | 1193 | new_client->addr = address; |
1195 | init_MUTEX(&data->lock); | ||
1196 | new_client->adapter = adapter; | 1194 | new_client->adapter = adapter; |
1197 | new_client->driver = &w83792d_driver; | 1195 | new_client->driver = &w83792d_driver; |
1198 | new_client->flags = 0; | 1196 | new_client->flags = 0; |
@@ -1243,7 +1241,7 @@ w83792d_detect(struct i2c_adapter *adapter, int address, int kind) | |||
1243 | goto ERROR1; | 1241 | goto ERROR1; |
1244 | } | 1242 | } |
1245 | val1 = w83792d_read_value(new_client, W83792D_REG_WCHIPID); | 1243 | val1 = w83792d_read_value(new_client, W83792D_REG_WCHIPID); |
1246 | if (val1 == 0x7a && address >= 0x2c) { | 1244 | if (val1 == 0x7a) { |
1247 | kind = w83792d; | 1245 | kind = w83792d; |
1248 | } else { | 1246 | } else { |
1249 | if (kind == 0) | 1247 | if (kind == 0) |
@@ -1416,26 +1414,17 @@ w83792d_detach_client(struct i2c_client *client) | |||
1416 | return 0; | 1414 | return 0; |
1417 | } | 1415 | } |
1418 | 1416 | ||
1419 | /* The SMBus locks itself, usually, but nothing may access the Winbond between | 1417 | /* The SMBus locks itself. The Winbond W83792D chip has a bank register, |
1420 | bank switches. ISA access must always be locked explicitly! | 1418 | but the driver only accesses registers in bank 0, so we don't have |
1421 | We ignore the W83792D BUSY flag at this moment - it could lead to deadlocks, | 1419 | to switch banks and lock access between switches. */ |
1422 | would slow down the W83792D access and should not be necessary. | 1420 | static int w83792d_read_value(struct i2c_client *client, u8 reg) |
1423 | There are some ugly typecasts here, but the good news is - they should | ||
1424 | nowhere else be necessary! */ | ||
1425 | static int | ||
1426 | w83792d_read_value(struct i2c_client *client, u8 reg) | ||
1427 | { | 1421 | { |
1428 | int res=0; | 1422 | return i2c_smbus_read_byte_data(client, reg); |
1429 | res = i2c_smbus_read_byte_data(client, reg); | ||
1430 | |||
1431 | return res; | ||
1432 | } | 1423 | } |
1433 | 1424 | ||
1434 | static int | 1425 | static int w83792d_write_value(struct i2c_client *client, u8 reg, u8 value) |
1435 | w83792d_write_value(struct i2c_client *client, u8 reg, u8 value) | ||
1436 | { | 1426 | { |
1437 | i2c_smbus_write_byte_data(client, reg, value); | 1427 | return i2c_smbus_write_byte_data(client, reg, value); |
1438 | return 0; | ||
1439 | } | 1428 | } |
1440 | 1429 | ||
1441 | static void | 1430 | static void |
@@ -1506,7 +1495,7 @@ static struct w83792d_data *w83792d_update_device(struct device *dev) | |||
1506 | pwm_array_tmp[i] = w83792d_read_value(client, | 1495 | pwm_array_tmp[i] = w83792d_read_value(client, |
1507 | W83792D_REG_PWM[i]); | 1496 | W83792D_REG_PWM[i]); |
1508 | data->pwm[i] = pwm_array_tmp[i] & 0x0f; | 1497 | data->pwm[i] = pwm_array_tmp[i] & 0x0f; |
1509 | data->pwm_mode[i] = (pwm_array_tmp[i] >> 7) & 0x01; | 1498 | data->pwm_mode[i] = pwm_array_tmp[i] >> 7; |
1510 | } | 1499 | } |
1511 | 1500 | ||
1512 | reg_tmp = w83792d_read_value(client, W83792D_REG_FAN_CFG); | 1501 | reg_tmp = w83792d_read_value(client, W83792D_REG_FAN_CFG); |