Merge changes Ic51664f7,I6614dc07 into msm-3.0
* changes: hwmon: pm8xxx-adc: Fix setting disable bit for CNTRL register power: pm8921-charger: Disable BTM before entering suspend
This commit is contained in:
committed by
QuIC Gerrit Code Review
commit
d3f83726f1
@@ -974,22 +974,14 @@ uint32_t pm8xxx_adc_btm_end(void)
|
|||||||
{
|
{
|
||||||
struct pm8xxx_adc *adc_pmic = pmic_adc;
|
struct pm8xxx_adc *adc_pmic = pmic_adc;
|
||||||
int i, rc;
|
int i, rc;
|
||||||
u8 data_arb_btm_cntrl;
|
u8 data_arb_btm_cntrl = 0;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
disable_irq_nosync(adc_pmic->btm_warm_irq);
|
disable_irq_nosync(adc_pmic->btm_warm_irq);
|
||||||
disable_irq_nosync(adc_pmic->btm_cool_irq);
|
disable_irq_nosync(adc_pmic->btm_cool_irq);
|
||||||
|
|
||||||
spin_lock_irqsave(&adc_pmic->btm_lock, flags);
|
spin_lock_irqsave(&adc_pmic->btm_lock, flags);
|
||||||
/* Set BTM registers to Disable mode */
|
|
||||||
rc = pm8xxx_adc_read_reg(PM8XXX_ADC_ARB_BTM_CNTRL1,
|
|
||||||
&data_arb_btm_cntrl);
|
|
||||||
if (rc < 0) {
|
|
||||||
spin_unlock_irqrestore(&adc_pmic->btm_lock, flags);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
data_arb_btm_cntrl |= ~PM8XXX_ADC_ARB_BTM_CNTRL1_EN_BTM;
|
|
||||||
/* Write twice to the CNTRL register for the arbiter settings
|
/* Write twice to the CNTRL register for the arbiter settings
|
||||||
to take into effect */
|
to take into effect */
|
||||||
for (i = 0; i < 2; i++) {
|
for (i = 0; i < 2; i++) {
|
||||||
|
|||||||
@@ -239,6 +239,7 @@ struct pm8921_chg_chip {
|
|||||||
struct dentry *dent;
|
struct dentry *dent;
|
||||||
struct bms_notify bms_notify;
|
struct bms_notify bms_notify;
|
||||||
struct ext_chg_pm8921 *ext;
|
struct ext_chg_pm8921 *ext;
|
||||||
|
bool keep_btm_on_suspend;
|
||||||
bool ext_charging;
|
bool ext_charging;
|
||||||
bool ext_charge_done;
|
bool ext_charge_done;
|
||||||
DECLARE_BITMAP(enabled_irqs, PM_CHG_MAX_INTS);
|
DECLARE_BITMAP(enabled_irqs, PM_CHG_MAX_INTS);
|
||||||
@@ -2671,6 +2672,37 @@ static void create_debugfs_entries(struct pm8921_chg_chip *chip)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int pm8921_charger_resume(struct device *dev)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
struct pm8921_chg_chip *chip = dev_get_drvdata(dev);
|
||||||
|
|
||||||
|
if (!(chip->cool_temp == 0 && chip->warm_temp == 0)
|
||||||
|
&& !(chip->keep_btm_on_suspend)) {
|
||||||
|
rc = pm8xxx_adc_btm_configure(&btm_config);
|
||||||
|
if (rc)
|
||||||
|
pr_err("couldn't reconfigure btm rc=%d\n", rc);
|
||||||
|
|
||||||
|
rc = pm8xxx_adc_btm_start();
|
||||||
|
if (rc)
|
||||||
|
pr_err("couldn't restart btm rc=%d\n", rc);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pm8921_charger_suspend(struct device *dev)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
struct pm8921_chg_chip *chip = dev_get_drvdata(dev);
|
||||||
|
|
||||||
|
if (!(chip->cool_temp == 0 && chip->warm_temp == 0)
|
||||||
|
&& !(chip->keep_btm_on_suspend)) {
|
||||||
|
rc = pm8xxx_adc_btm_end();
|
||||||
|
if (rc)
|
||||||
|
pr_err("Failed to disable BTM on suspend rc=%d\n", rc);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
static int __devinit pm8921_charger_probe(struct platform_device *pdev)
|
static int __devinit pm8921_charger_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
@@ -2711,6 +2743,7 @@ static int __devinit pm8921_charger_probe(struct platform_device *pdev)
|
|||||||
chip->warm_bat_chg_current = pdata->warm_bat_chg_current;
|
chip->warm_bat_chg_current = pdata->warm_bat_chg_current;
|
||||||
chip->cool_bat_voltage = pdata->cool_bat_voltage;
|
chip->cool_bat_voltage = pdata->cool_bat_voltage;
|
||||||
chip->warm_bat_voltage = pdata->warm_bat_voltage;
|
chip->warm_bat_voltage = pdata->warm_bat_voltage;
|
||||||
|
chip->keep_btm_on_suspend = pdata->keep_btm_on_suspend;
|
||||||
chip->trkl_voltage = pdata->trkl_voltage;
|
chip->trkl_voltage = pdata->trkl_voltage;
|
||||||
chip->weak_voltage = pdata->weak_voltage;
|
chip->weak_voltage = pdata->weak_voltage;
|
||||||
chip->trkl_current = pdata->trkl_current;
|
chip->trkl_current = pdata->trkl_current;
|
||||||
@@ -2837,13 +2870,17 @@ static int __devexit pm8921_charger_remove(struct platform_device *pdev)
|
|||||||
kfree(chip);
|
kfree(chip);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
static const struct dev_pm_ops pm8921_pm_ops = {
|
||||||
|
.suspend = pm8921_charger_suspend,
|
||||||
|
.resume = pm8921_charger_resume,
|
||||||
|
};
|
||||||
static struct platform_driver pm8921_charger_driver = {
|
static struct platform_driver pm8921_charger_driver = {
|
||||||
.probe = pm8921_charger_probe,
|
.probe = pm8921_charger_probe,
|
||||||
.remove = __devexit_p(pm8921_charger_remove),
|
.remove = __devexit_p(pm8921_charger_remove),
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = PM8921_CHARGER_DEV_NAME,
|
.name = PM8921_CHARGER_DEV_NAME,
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
.pm = &pm8921_pm_ops,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ struct pm8921_charger_platform_data {
|
|||||||
unsigned int (*get_batt_capacity_percent) (void);
|
unsigned int (*get_batt_capacity_percent) (void);
|
||||||
int64_t batt_id_min;
|
int64_t batt_id_min;
|
||||||
int64_t batt_id_max;
|
int64_t batt_id_max;
|
||||||
|
bool keep_btm_on_suspend;
|
||||||
int trkl_voltage;
|
int trkl_voltage;
|
||||||
int weak_voltage;
|
int weak_voltage;
|
||||||
int trkl_current;
|
int trkl_current;
|
||||||
|
|||||||
Reference in New Issue
Block a user