ti-soc-thermal: implement eocz bit to make driver useful on omap3
authorPavel Machek <pavel@ucw.cz>
Sun, 18 Jan 2015 20:20:51 +0000 (21:20 +0100)
committerEduardo Valentin <edubezval@gmail.com>
Tue, 5 May 2015 04:27:53 +0000 (21:27 -0700)
For omap3, proper implementation of eocz bit is needed. It was
actually a TODO in the driver.

Signed-off-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
drivers/thermal/ti-soc-thermal/ti-bandgap.c

index 4d8c8b6efbe0b954f073c5eb0625c31af50ad995..12f3ee5337bb7d93e854b8c15ab1cf4d5e408f67 100644 (file)
@@ -894,7 +894,8 @@ void *ti_bandgap_get_sensor_data(struct ti_bandgap *bgp, int id)
 static int
 ti_bandgap_force_single_read(struct ti_bandgap *bgp, int id)
 {
-       u32 temp = 0, counter = 1000;
+       u32 counter = 1000;
+       struct temp_sensor_registers *tsr;
 
        /* Select single conversion mode */
        if (TI_BANDGAP_HAS(bgp, MODE_CONFIG))
@@ -902,16 +903,27 @@ ti_bandgap_force_single_read(struct ti_bandgap *bgp, int id)
 
        /* Start of Conversion = 1 */
        RMW_BITS(bgp, id, temp_sensor_ctrl, bgap_soc_mask, 1);
-       /* Wait until DTEMP is updated */
-       temp = ti_bandgap_read_temp(bgp, id);
 
-       while ((temp == 0) && --counter)
-               temp = ti_bandgap_read_temp(bgp, id);
-       /* REVISIT: Check correct condition for end of conversion */
+       /* Wait for EOCZ going up */
+       tsr = bgp->conf->sensors[id].registers;
+
+       while (--counter) {
+               if (ti_bandgap_readl(bgp, tsr->temp_sensor_ctrl) &
+                   tsr->bgap_eocz_mask)
+                       break;
+       }
 
        /* Start of Conversion = 0 */
        RMW_BITS(bgp, id, temp_sensor_ctrl, bgap_soc_mask, 0);
 
+       /* Wait for EOCZ going down */
+       counter = 1000;
+       while (--counter) {
+               if (!(ti_bandgap_readl(bgp, tsr->temp_sensor_ctrl) &
+                     tsr->bgap_eocz_mask))
+                       break;
+       }
+
        return 0;
 }