aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hwmon')
-rw-r--r--drivers/hwmon/w83781d.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/drivers/hwmon/w83781d.c b/drivers/hwmon/w83781d.c
index 782117817526..8b17132f6b94 100644
--- a/drivers/hwmon/w83781d.c
+++ b/drivers/hwmon/w83781d.c
@@ -57,6 +57,10 @@ I2C_CLIENT_INSMOD_5(w83781d, w83782d, w83783s, w83627hf, as99127f);
57I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: " 57I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
58 "{bus, clientaddr, subclientaddr1, subclientaddr2}"); 58 "{bus, clientaddr, subclientaddr1, subclientaddr2}");
59 59
60static int reset;
61module_param(reset, bool, 0);
62MODULE_PARM_DESC(reset, "Set to one to reset chip on load");
63
60static int init = 1; 64static int init = 1;
61module_param(init, bool, 0); 65module_param(init, bool, 0);
62MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization"); 66MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization");
@@ -1460,8 +1464,17 @@ w83781d_init_client(struct i2c_client *client)
1460 int type = data->type; 1464 int type = data->type;
1461 u8 tmp; 1465 u8 tmp;
1462 1466
1463 if (init && type != as99127f) { /* this resets registers we don't have 1467 if (reset && type != as99127f) { /* this resets registers we don't have
1464 documentation for on the as99127f */ 1468 documentation for on the as99127f */
1469 /* Resetting the chip has been the default for a long time,
1470 but it causes the BIOS initializations (fan clock dividers,
1471 thermal sensor types...) to be lost, so it is now optional.
1472 It might even go away if nobody reports it as being useful,
1473 as I see very little reason why this would be needed at
1474 all. */
1475 dev_info(&client->dev, "If reset=1 solved a problem you were "
1476 "having, please report!\n");
1477
1465 /* save these registers */ 1478 /* save these registers */
1466 i = w83781d_read_value(client, W83781D_REG_BEEP_CONFIG); 1479 i = w83781d_read_value(client, W83781D_REG_BEEP_CONFIG);
1467 p = w83781d_read_value(client, W83781D_REG_PWMCLK12); 1480 p = w83781d_read_value(client, W83781D_REG_PWMCLK12);
@@ -1478,6 +1491,13 @@ w83781d_init_client(struct i2c_client *client)
1478 w83781d_write_value(client, W83781D_REG_BEEP_INTS2, 0); 1491 w83781d_write_value(client, W83781D_REG_BEEP_INTS2, 0);
1479 } 1492 }
1480 1493
1494 /* Disable power-on abnormal beep, as advised by the datasheet.
1495 Already done if reset=1. */
1496 if (init && !reset && type != as99127f) {
1497 i = w83781d_read_value(client, W83781D_REG_BEEP_CONFIG);
1498 w83781d_write_value(client, W83781D_REG_BEEP_CONFIG, i | 0x80);
1499 }
1500
1481 data->vrm = vid_which_vrm(); 1501 data->vrm = vid_which_vrm();
1482 1502
1483 if ((type != w83781d) && (type != as99127f)) { 1503 if ((type != w83781d) && (type != as99127f)) {