Updating UI to show the battery percentage increase every 60s
authorPandey Raj <raj.pandey@intel.com>
Wed, 28 Mar 2012 07:39:37 +0000 (13:09 +0530)
committerbuildbot <buildbot@intel.com>
Thu, 29 Mar 2012 14:12:10 +0000 (07:12 -0700)
BZ: 24777

Whenever charger is connected/removed to the platform the UI should
update the battery percetange increasing/decreasing. So, the UI update
is done using the polling method rightnow. The interrupt based solution
  is WIP and needs to be verified on few platforms before going into
mainline.

Change-Id: Id42349b5ceb07b9e7144a1f2adfd8d9b2442d272
Signed-off-by: Pandey Raj <raj.pandey@intel.com>
Reviewed-on: http://android.intel.com:8080/40679
Reviewed-by: Pallala, Ramakrishna <ramakrishna.pallala@intel.com>
Tested-by: Kallappa Manjanna, MadhukumarX <madhukumarx.kallappa.manjanna@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
drivers/power/bq24192_charger.c

index 18c15ff..79260c5 100644 (file)
 #define BQ24192_CHRG_CUR_HIGH          900     /* 900mA */
 #define BQ24192_CHRG_CUR_NOLIMIT       1500    /* 1500mA */
 
+#define STATUS_UPDATE_INTERVAL         (HZ * 60) /* 60sec */
+
 struct bq24192_chrg_regs {
        u8 in_src;
        u8 pwr_cfg;
@@ -184,6 +186,7 @@ struct bq24192_chip {
        struct power_supply usb;
        struct power_supply_charger_cap cap;
        struct delayed_work chrg_evt_wrkr;
+       struct delayed_work stat_mon_wrkr;
        struct mutex event_lock;
 
        int present;
@@ -515,6 +518,14 @@ static void set_up_charging(struct bq24192_chip *chip,
        reg->chr_volt = chrg_volt_to_reg(BQ24192_DEF_VBATT_MAX);
 }
 
+static void bq24192_monitor_worker(struct work_struct *work)
+{
+       struct bq24192_chip *chip = container_of(work,
+                               struct bq24192_chip, stat_mon_wrkr.work);
+       power_supply_changed(&chip->usb);
+       schedule_delayed_work(&chip->stat_mon_wrkr, STATUS_UPDATE_INTERVAL);
+}
+
 static void bq24192_event_worker(struct work_struct *work)
 {
        struct bq24192_chip *chip = container_of(work,
@@ -902,6 +913,7 @@ static int __devinit bq24192_probe(struct i2c_client *client,
        }
 
        INIT_DELAYED_WORK(&chip->chrg_evt_wrkr, bq24192_event_worker);
+       INIT_DELAYED_WORK(&chip->stat_mon_wrkr, bq24192_monitor_worker);
        mutex_init(&chip->event_lock);
 
        chip->chrg_cur_cntl = POWER_SUPPLY_CHARGE_CURRENT_LIMIT_NONE;
@@ -943,7 +955,8 @@ static int __devinit bq24192_probe(struct i2c_client *client,
                kfree(chip);
                return ret;
        }
-
+       /* start the status monitor worker */
+       schedule_delayed_work(&chip->stat_mon_wrkr, 0);
        return 0;
 }
 
@@ -964,6 +977,7 @@ static int bq24192_suspend(struct device *dev)
 {
        struct bq24192_chip *chip = dev_get_drvdata(dev);
 
+       cancel_delayed_work(&chip->stat_mon_wrkr);
        dev_dbg(&chip->client->dev, "bq24192 suspend\n");
        return 0;
 }
@@ -972,6 +986,7 @@ static int bq24192_resume(struct device *dev)
 {
        struct bq24192_chip *chip = dev_get_drvdata(dev);
 
+       schedule_delayed_work(&chip->stat_mon_wrkr, 0);
        dev_dbg(&chip->client->dev, "bq24192 resume\n");
        return 0;
 }