aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Reichel <sebastian.reichel@collabora.co.uk>2018-03-12 09:35:10 -0400
committerSebastian Reichel <sebastian.reichel@collabora.co.uk>2018-03-12 09:35:10 -0400
commit75dd56c0cd68847809e6e75d6fcc234e6e6711d5 (patch)
treec1c3b11bff4bf0b11e9c8d7720a02513d996e2cd
parentfc5a7f0339d0641c0df14a9ed8af49c9992f9bef (diff)
parentf72c14ad8c6631a0a42115e74164f9b5faf4c724 (diff)
Merge branch 'fixes' into for-next
Merge for-stable fixes branch into for-next development branch. Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
-rw-r--r--drivers/power/reset/gemini-poweroff.c30
-rw-r--r--drivers/power/supply/bq27xxx_battery.c2
-rw-r--r--drivers/power/supply/ltc2941-battery-gauge.c8
-rw-r--r--drivers/power/supply/max17042_battery.c1
4 files changed, 23 insertions, 18 deletions
diff --git a/drivers/power/reset/gemini-poweroff.c b/drivers/power/reset/gemini-poweroff.c
index ff75af5abbc5..2ac291af1265 100644
--- a/drivers/power/reset/gemini-poweroff.c
+++ b/drivers/power/reset/gemini-poweroff.c
@@ -47,8 +47,12 @@ static irqreturn_t gemini_powerbutton_interrupt(int irq, void *data)
47 val &= 0x70U; 47 val &= 0x70U;
48 switch (val) { 48 switch (val) {
49 case GEMINI_STAT_CIR: 49 case GEMINI_STAT_CIR:
50 dev_info(gpw->dev, "infrared poweroff\n"); 50 /*
51 orderly_poweroff(true); 51 * We do not yet have a driver for the infrared
52 * controller so it can cause spurious poweroff
53 * events. Ignore those for now.
54 */
55 dev_info(gpw->dev, "infrared poweroff - ignored\n");
52 break; 56 break;
53 case GEMINI_STAT_RTC: 57 case GEMINI_STAT_RTC:
54 dev_info(gpw->dev, "RTC poweroff\n"); 58 dev_info(gpw->dev, "RTC poweroff\n");
@@ -116,7 +120,17 @@ static int gemini_poweroff_probe(struct platform_device *pdev)
116 return -ENODEV; 120 return -ENODEV;
117 } 121 }
118 122
119 /* Clear the power management IRQ */ 123 /*
124 * Enable the power controller. This is crucial on Gemini
125 * systems: if this is not done, pressing the power button
126 * will result in unconditional poweroff without any warning.
127 * This makes the kernel handle the poweroff.
128 */
129 val = readl(gpw->base + GEMINI_PWC_CTRLREG);
130 val |= GEMINI_CTRL_ENABLE;
131 writel(val, gpw->base + GEMINI_PWC_CTRLREG);
132
133 /* Now that the state machine is active, clear the IRQ */
120 val = readl(gpw->base + GEMINI_PWC_CTRLREG); 134 val = readl(gpw->base + GEMINI_PWC_CTRLREG);
121 val |= GEMINI_CTRL_IRQ_CLR; 135 val |= GEMINI_CTRL_IRQ_CLR;
122 writel(val, gpw->base + GEMINI_PWC_CTRLREG); 136 writel(val, gpw->base + GEMINI_PWC_CTRLREG);
@@ -129,16 +143,6 @@ static int gemini_poweroff_probe(struct platform_device *pdev)
129 pm_power_off = gemini_poweroff; 143 pm_power_off = gemini_poweroff;
130 gpw_poweroff = gpw; 144 gpw_poweroff = gpw;
131 145
132 /*
133 * Enable the power controller. This is crucial on Gemini
134 * systems: if this is not done, pressing the power button
135 * will result in unconditional poweroff without any warning.
136 * This makes the kernel handle the poweroff.
137 */
138 val = readl(gpw->base + GEMINI_PWC_CTRLREG);
139 val |= GEMINI_CTRL_ENABLE;
140 writel(val, gpw->base + GEMINI_PWC_CTRLREG);
141
142 dev_info(dev, "Gemini poweroff driver registered\n"); 146 dev_info(dev, "Gemini poweroff driver registered\n");
143 147
144 return 0; 148 return 0;
diff --git a/drivers/power/supply/bq27xxx_battery.c b/drivers/power/supply/bq27xxx_battery.c
index d99981542a46..7ce60519b1bc 100644
--- a/drivers/power/supply/bq27xxx_battery.c
+++ b/drivers/power/supply/bq27xxx_battery.c
@@ -1670,7 +1670,7 @@ static int bq27xxx_battery_status(struct bq27xxx_device_info *di,
1670 status = POWER_SUPPLY_STATUS_FULL; 1670 status = POWER_SUPPLY_STATUS_FULL;
1671 else if (di->cache.flags & BQ27000_FLAG_CHGS) 1671 else if (di->cache.flags & BQ27000_FLAG_CHGS)
1672 status = POWER_SUPPLY_STATUS_CHARGING; 1672 status = POWER_SUPPLY_STATUS_CHARGING;
1673 else if (power_supply_am_i_supplied(di->bat)) 1673 else if (power_supply_am_i_supplied(di->bat) > 0)
1674 status = POWER_SUPPLY_STATUS_NOT_CHARGING; 1674 status = POWER_SUPPLY_STATUS_NOT_CHARGING;
1675 else 1675 else
1676 status = POWER_SUPPLY_STATUS_DISCHARGING; 1676 status = POWER_SUPPLY_STATUS_DISCHARGING;
diff --git a/drivers/power/supply/ltc2941-battery-gauge.c b/drivers/power/supply/ltc2941-battery-gauge.c
index 9360faca7026..4f129bb4c972 100644
--- a/drivers/power/supply/ltc2941-battery-gauge.c
+++ b/drivers/power/supply/ltc2941-battery-gauge.c
@@ -341,15 +341,15 @@ static int ltc294x_get_temperature(const struct ltc294x_info *info, int *val)
341 341
342 if (info->id == LTC2942_ID) { 342 if (info->id == LTC2942_ID) {
343 reg = LTC2942_REG_TEMPERATURE_MSB; 343 reg = LTC2942_REG_TEMPERATURE_MSB;
344 value = 60000; /* Full-scale is 600 Kelvin */ 344 value = 6000; /* Full-scale is 600 Kelvin */
345 } else { 345 } else {
346 reg = LTC2943_REG_TEMPERATURE_MSB; 346 reg = LTC2943_REG_TEMPERATURE_MSB;
347 value = 51000; /* Full-scale is 510 Kelvin */ 347 value = 5100; /* Full-scale is 510 Kelvin */
348 } 348 }
349 ret = ltc294x_read_regs(info->client, reg, &datar[0], 2); 349 ret = ltc294x_read_regs(info->client, reg, &datar[0], 2);
350 value *= (datar[0] << 8) | datar[1]; 350 value *= (datar[0] << 8) | datar[1];
351 /* Convert to centidegrees */ 351 /* Convert to tenths of degree Celsius */
352 *val = value / 0xFFFF - 27215; 352 *val = value / 0xFFFF - 2722;
353 return ret; 353 return ret;
354} 354}
355 355
diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c
index 35dde81b1c9b..1a568df383db 100644
--- a/drivers/power/supply/max17042_battery.c
+++ b/drivers/power/supply/max17042_battery.c
@@ -1053,6 +1053,7 @@ static int max17042_probe(struct i2c_client *client,
1053 1053
1054 i2c_set_clientdata(client, chip); 1054 i2c_set_clientdata(client, chip);
1055 psy_cfg.drv_data = chip; 1055 psy_cfg.drv_data = chip;
1056 psy_cfg.of_node = dev->of_node;
1056 1057
1057 /* When current is not measured, 1058 /* When current is not measured,
1058 * CURRENT_NOW and CURRENT_AVG properties should be invisible. */ 1059 * CURRENT_NOW and CURRENT_AVG properties should be invisible. */