]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
staging: ti-soc-thermal: fix bitfield writing while updating thresholds
authorEduardo Valentin <eduardo.valentin@ti.com>
Tue, 19 Mar 2013 14:54:27 +0000 (10:54 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Mar 2013 18:28:31 +0000 (11:28 -0700)
Wrong threshold cold values may be written with current implementation.
This patch fixes the threshold update function by simplifying the
bitfield manipulation sequence.

Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/ti-soc-thermal/ti-bandgap.c

index d0751863a9c03b949230e657e72f386edde61133..5c946cd7d672b9dc59c6984f77e3bf8e257d18ce 100644 (file)
@@ -418,10 +418,10 @@ static int ti_bandgap_update_alert_threshold(struct ti_bandgap *bgp, int id,
        }
 
        /* write the new threshold values */
-       reg_val = thresh_val & ~tsr->threshold_thot_mask;
-       reg_val |= (t_hot << __ffs(tsr->threshold_thot_mask));
-       reg_val |= thresh_val & ~tsr->threshold_tcold_mask;
-       reg_val |= (t_cold << __ffs(tsr->threshold_tcold_mask));
+       reg_val = thresh_val &
+                 ~(tsr->threshold_thot_mask | tsr->threshold_tcold_mask);
+       reg_val |= (t_hot << __ffs(tsr->threshold_thot_mask)) |
+                  (t_cold << __ffs(tsr->threshold_tcold_mask));
        ti_bandgap_writel(bgp, reg_val, tsr->bgap_threshold);
 
        if (err) {