Re: [PATCH 13/57] power: ab8500_bm: Ignore false btemp low interrupt

From: Anton Vorontsov
Date: Wed Sep 26 2012 - 23:34:39 EST


On Tue, Sep 25, 2012 at 10:12:10AM -0600, mathieu.poirier@xxxxxxxxxx wrote:
> From: Hakan Berg <hakan.berg@xxxxxxxxxxxxxx>
>
> Ignore the low btemp interrupts for ab8500 3.0 and 3.3
>
> Signed-off-by: Hakan Berg <hakan.berg@xxxxxxxxxxxxxx>
> Signed-off-by: Mathieu Poirier <mathieu.poirier@xxxxxxxxxx>
> Reviewed-by: Jonas ABERG <jonas.aberg@xxxxxxxxxxxxxx>
> ---
> drivers/power/ab8500_btemp.c | 22 +++++++++++-----------
> include/linux/mfd/abx500/ab8500.h | 5 +++++
> 2 files changed, 16 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/power/ab8500_btemp.c b/drivers/power/ab8500_btemp.c
> index 45b10ad..04f9dec 100644
> --- a/drivers/power/ab8500_btemp.c
> +++ b/drivers/power/ab8500_btemp.c
> @@ -622,9 +622,9 @@ static irqreturn_t ab8500_btemp_templow_handler(int irq, void *_di)
> {
> struct ab8500_btemp *di = _di;
>
> - if (is_ab8500_2p0_or_earlier(di->parent)) {
> - dev_dbg(di->dev, "Ignore false btemp low irq"
> - " for ABB cut 1.0, 1.1 and 2.0\n");
> + if (is_ab8500_3p3_or_earlier(di->parent)) {
> + dev_dbg(di->dev, "Ignore false btemp low irq");
> + dev_dbg(di->dev, " for ABB cut 1.0, 1.1, 2.0 and 3.3\n");
> } else {
> dev_crit(di->dev, "Battery temperature lower than -10deg c\n");
>
> @@ -738,30 +738,30 @@ static int ab8500_btemp_get_temp(struct ab8500_btemp *di)
> int temp = 0;
>
> /*
> - * The BTEMP events are not reliabe on AB8500 cut2.0
> + * The BTEMP events are not reliabe on AB8500 cut3.3
> * and prior versions
> */
> - if (is_ab8500_2p0_or_earlier(di->parent)) {
> + if (is_ab8500_3p3_or_earlier(di->parent)) {

OK, this change reflects patch description.

> temp = di->bat_temp * 10;
> } else {
> if (di->events.btemp_low) {
> if (temp > di->btemp_ranges.btemp_low_limit)
> - temp = di->btemp_ranges.btemp_low_limit;
> + temp = di->btemp_ranges.btemp_low_limit * 10;

But why these changes?

> else
> temp = di->bat_temp * 10;
> } else if (di->events.btemp_high) {
> if (temp < di->btemp_ranges.btemp_high_limit)
> - temp = di->btemp_ranges.btemp_high_limit;
> + temp = di->btemp_ranges.btemp_high_limit * 10;
> else
> temp = di->bat_temp * 10;
> } else if (di->events.btemp_lowmed) {
> if (temp > di->btemp_ranges.btemp_med_limit)
> - temp = di->btemp_ranges.btemp_med_limit;
> + temp = di->btemp_ranges.btemp_med_limit * 10;
> else
> temp = di->bat_temp * 10;
> } else if (di->events.btemp_medhigh) {
> if (temp < di->btemp_ranges.btemp_med_limit)
> - temp = di->btemp_ranges.btemp_med_limit;
> + temp = di->btemp_ranges.btemp_med_limit * 10;
> else
> temp = di->bat_temp * 10;
> } else
> @@ -1026,8 +1026,8 @@ static int __devinit ab8500_btemp_probe(struct platform_device *pdev)
> ab8500_btemp_periodic_work);
>
> /* Set BTEMP thermal limits. Low and Med are fixed */
> - di->btemp_ranges.btemp_low_limit = BTEMP_THERMAL_LOW_LIMIT;
> - di->btemp_ranges.btemp_med_limit = BTEMP_THERMAL_MED_LIMIT;
> + di->btemp_ranges.btemp_low_limit = BTEMP_THERMAL_LOW_LIMIT * 10;
> + di->btemp_ranges.btemp_med_limit = BTEMP_THERMAL_MED_LIMIT * 10;
>
> ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER,
> AB8500_BTEMP_HIGH_TH, &val);
> diff --git a/include/linux/mfd/abx500/ab8500.h b/include/linux/mfd/abx500/ab8500.h
> index db8a1e3..087b445 100644
> --- a/include/linux/mfd/abx500/ab8500.h
> +++ b/include/linux/mfd/abx500/ab8500.h
> @@ -340,6 +340,11 @@ static inline int is_ab8500_2p0_or_earlier(struct ab8500 *ab)
> return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT2P0));
> }
>
> +static inline int is_ab8500_3p3_or_earlier(struct ab8500 *ab)
> +{
> + return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT3P3));
> +}
> +
> /* exclude also ab8505, ab9540... */
> static inline int is_ab8500_2p0(struct ab8500 *ab)
> {
> --
> 1.7.5.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/