aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc/rtc-palmas.c
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2013-09-11 17:24:19 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-09-11 18:58:55 -0400
commit666a584d3a765a914642f80deef7a33fb309df5d (patch)
tree44075201728ea751d07c63ce5458e4cfd0404e92 /drivers/rtc/rtc-palmas.c
parent8af750e3f5ca21eaa5595a96a4cf5eaa996deed4 (diff)
drivers/rtc/rtc-palmas.c: support for backup battery charging
Palmas series device like TPS65913, TPS80036 supports the backup battery for powering the RTC when no other energy source is available. The backup battery is optional, connected to the VBACKUP pin, and can be nonrechargeable or rechargeable. The rechargeable battery can be charged from the system supply using the backup battery charger. Add support for enabling charging of this backup battery. Also add the DT binding document and the new properties to have this support. Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-by: Felipe Balbi <balbi@ti.com> Acked-by: Kumar Gala <galak@codeaurora.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/rtc/rtc-palmas.c')
-rw-r--r--drivers/rtc/rtc-palmas.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/rtc/rtc-palmas.c b/drivers/rtc/rtc-palmas.c
index a1fecc8d97fc..fffb7d3449d7 100644
--- a/drivers/rtc/rtc-palmas.c
+++ b/drivers/rtc/rtc-palmas.c
@@ -238,6 +238,15 @@ static int palmas_rtc_probe(struct platform_device *pdev)
238 struct palmas *palmas = dev_get_drvdata(pdev->dev.parent); 238 struct palmas *palmas = dev_get_drvdata(pdev->dev.parent);
239 struct palmas_rtc *palmas_rtc = NULL; 239 struct palmas_rtc *palmas_rtc = NULL;
240 int ret; 240 int ret;
241 bool enable_bb_charging = false;
242 bool high_bb_charging;
243
244 if (pdev->dev.of_node) {
245 enable_bb_charging = of_property_read_bool(pdev->dev.of_node,
246 "ti,backup-battery-chargeable");
247 high_bb_charging = of_property_read_bool(pdev->dev.of_node,
248 "ti,backup-battery-charge-high-current");
249 }
241 250
242 palmas_rtc = devm_kzalloc(&pdev->dev, sizeof(struct palmas_rtc), 251 palmas_rtc = devm_kzalloc(&pdev->dev, sizeof(struct palmas_rtc),
243 GFP_KERNEL); 252 GFP_KERNEL);
@@ -254,6 +263,32 @@ static int palmas_rtc_probe(struct platform_device *pdev)
254 palmas_rtc->dev = &pdev->dev; 263 palmas_rtc->dev = &pdev->dev;
255 platform_set_drvdata(pdev, palmas_rtc); 264 platform_set_drvdata(pdev, palmas_rtc);
256 265
266 if (enable_bb_charging) {
267 unsigned reg = PALMAS_BACKUP_BATTERY_CTRL_BBS_BBC_LOW_ICHRG;
268
269 if (high_bb_charging)
270 reg = 0;
271
272 ret = palmas_update_bits(palmas, PALMAS_PMU_CONTROL_BASE,
273 PALMAS_BACKUP_BATTERY_CTRL,
274 PALMAS_BACKUP_BATTERY_CTRL_BBS_BBC_LOW_ICHRG, reg);
275 if (ret < 0) {
276 dev_err(&pdev->dev,
277 "BACKUP_BATTERY_CTRL update failed, %d\n", ret);
278 return ret;
279 }
280
281 ret = palmas_update_bits(palmas, PALMAS_PMU_CONTROL_BASE,
282 PALMAS_BACKUP_BATTERY_CTRL,
283 PALMAS_BACKUP_BATTERY_CTRL_BB_CHG_EN,
284 PALMAS_BACKUP_BATTERY_CTRL_BB_CHG_EN);
285 if (ret < 0) {
286 dev_err(&pdev->dev,
287 "BACKUP_BATTERY_CTRL update failed, %d\n", ret);
288 return ret;
289 }
290 }
291
257 /* Start RTC */ 292 /* Start RTC */
258 ret = palmas_update_bits(palmas, PALMAS_RTC_BASE, PALMAS_RTC_CTRL_REG, 293 ret = palmas_update_bits(palmas, PALMAS_RTC_BASE, PALMAS_RTC_CTRL_REG,
259 PALMAS_RTC_CTRL_REG_STOP_RTC, 294 PALMAS_RTC_CTRL_REG_STOP_RTC,