usb: dwc3: rockchip: fix possible circular deadlock
[firefly-linux-kernel-4.4.55.git] / drivers / hwmon / ads7828.c
index 6c99ee7bafa3fdf47d6479b7198697ec835a23e8..ee396ff167d9d1c2070eeb254475d53dbe4a3f0a 100644 (file)
@@ -120,6 +120,7 @@ static int ads7828_probe(struct i2c_client *client,
        unsigned int vref_mv = ADS7828_INT_VREF_MV;
        bool diff_input = false;
        bool ext_vref = false;
+       unsigned int regval;
 
        data = devm_kzalloc(dev, sizeof(struct ads7828_data), GFP_KERNEL);
        if (!data)
@@ -154,6 +155,15 @@ static int ads7828_probe(struct i2c_client *client,
        if (!diff_input)
                data->cmd_byte |= ADS7828_CMD_SD_SE;
 
+       /*
+        * Datasheet specifies internal reference voltage is disabled by
+        * default. The internal reference voltage needs to be enabled and
+        * voltage needs to settle before getting valid ADC data. So perform a
+        * dummy read to enable the internal reference voltage.
+        */
+       if (!ext_vref)
+               regmap_read(data->regmap, data->cmd_byte, &regval);
+
        hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
                                                           data,
                                                           ads7828_groups);