linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Trickle charging for rtc-bq32k
@ 2014-08-22 13:11 Pavel Machek
  2014-08-22 14:28 ` Wolfram Sang
  0 siblings, 1 reply; 4+ messages in thread
From: Pavel Machek @ 2014-08-22 13:11 UTC (permalink / raw)
  To: a.zummo, rtc-linux, linux-kernel; +Cc: linux-i2c, wsa

Hi!

Here's a patch to enable trickle charging; without it the clock stops
when power is removed -> not very useful.

_But_ this should probably be enabled using device tree entry, right?
Unfortunately, the driver is i2c driver, not platform one, so I don't
see how to do that easily...

Or would module parameter be acceptable?

Thanks,
								Pavel

commit 00abeaa1197a5ad6400497558891793b6cd880d5
Author: Pavel <pavel@ucw.cz>
Date:   Fri Aug 22 14:58:00 2014 +0200

Enable trickle charging for bq32k.

diff --git a/drivers/rtc/rtc-bq32k.c b/drivers/rtc/rtc-bq32k.c
index c74bf0d..b6a4dd0 100644
--- a/drivers/rtc/rtc-bq32k.c
+++ b/drivers/rtc/rtc-bq32k.c
@@ -2,10 +2,14 @@
  * Driver for TI BQ32000 RTC.
  *
  * Copyright (C) 2009 Semihalf.
+ * Copyright (C) 2014 Pavel Machek <pavel@denx.de>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
+ *
+ * You can get hardware description at
+ * http://www.ti.com/lit/ds/symlink/bq32000.pdf
  */
 
 #include <linux/module.h>
@@ -27,6 +31,10 @@
 #define BQ32K_CENT		0x40	/* Century flag */
 #define BQ32K_CENT_EN		0x80	/* Century flag enable bit */
 
+#define BQ32K_CALIBRATION	0x07	/* CAL_CFG1, calibration and control */
+#define BQ32K_TCH2		0x08	/* Trickle charge enable */
+#define BQ32K_CFG2		0x09	/* Trickle charger control */
+
 struct bq32k_regs {
 	uint8_t		seconds;
 	uint8_t		minutes;
@@ -153,6 +161,25 @@ static int bq32k_probe(struct i2c_client *client,
 	if (error)
 		return error;
 
+	if (0) {
+		/*
+		 * TCHE[3:0] == 0x05, TCH2 == 1, TCFE == 0 (charging
+		 * over diode and 940ohm resistor)
+		 */
+
+		reg = 0x05;
+		error = bq32k_write(dev, &reg, BQ32K_CFG2, 1);
+		if (error)
+			return error;
+
+		reg = 0x20;
+		error = bq32k_write(dev, &reg, BQ32K_TCH2, 1);
+		if (error)
+			return error;
+
+		dev_info(dev, "Enabled trickle RTC battery charge.\n");
+	}
+
 	rtc = devm_rtc_device_register(&client->dev, bq32k_driver.driver.name,
 						&bq32k_rtc_ops, THIS_MODULE);
 	if (IS_ERR(rtc))

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: Trickle charging for rtc-bq32k
  2014-08-22 13:11 Trickle charging for rtc-bq32k Pavel Machek
@ 2014-08-22 14:28 ` Wolfram Sang
  2014-08-22 14:38   ` Pavel Machek
  0 siblings, 1 reply; 4+ messages in thread
From: Wolfram Sang @ 2014-08-22 14:28 UTC (permalink / raw)
  To: Pavel Machek; +Cc: a.zummo, rtc-linux, linux-kernel, linux-i2c

[-- Attachment #1: Type: text/plain, Size: 900 bytes --]


> _But_ this should probably be enabled using device tree entry, right?
> Unfortunately, the driver is i2c driver, not platform one, so I don't
> see how to do that easily...

Trickle charging is usually depending on the hardware setup, so
devicetree is actually a good place to put it. We'd just need generic
bindings so that they could be applied to various RTC. Just guessing,
resistor value would probably be one such property? We would not need
putting plain register values into DT.

There should be no difference regarding DT between i2c and platform
drivers.

You should add the devicetree ML for discussing such things.

> Or would module parameter be acceptable?

No, this is device dependent, not module dependent.

>   * Copyright (C) 2009 Semihalf.
> + * Copyright (C) 2014 Pavel Machek <pavel@denx.de>

IMO, such a small improvement does not justify claiming copyright on the
driver.


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Trickle charging for rtc-bq32k
  2014-08-22 14:28 ` Wolfram Sang
@ 2014-08-22 14:38   ` Pavel Machek
  2014-09-02 11:51     ` Wolfram Sang
  0 siblings, 1 reply; 4+ messages in thread
From: Pavel Machek @ 2014-08-22 14:38 UTC (permalink / raw)
  To: Wolfram Sang; +Cc: a.zummo, rtc-linux, linux-kernel, linux-i2c, devicetree

On Fri 2014-08-22 09:28:52, Wolfram Sang wrote:
> 
> > _But_ this should probably be enabled using device tree entry, right?
> > Unfortunately, the driver is i2c driver, not platform one, so I don't
> > see how to do that easily...
> 
> Trickle charging is usually depending on the hardware setup, so
> devicetree is actually a good place to put it. We'd just need generic
> bindings so that they could be applied to various RTC. Just guessing,
> resistor value would probably be one such property? We would not need
> putting plain register values into DT.

Well, for bq32000 there's selection between "no charging", "diode +
resistor", "different resistor".

> There should be no difference regarding DT between i2c and platform
> drivers.

Do you have example how to acces of_ from i2c driver?

Platform drivers do:

static int palmas_rtc_probe(struct platform_device *pdev)
{
        struct palmas *palmas = dev_get_drvdata(pdev->dev.parent);
        struct palmas_rtc *palmas_rtc = NULL;
	int ret;
        bool enable_bb_charging = false;
        bool high_bb_charging;

        if (pdev->dev.of_node) {
	   enable_bb_charging =
	   of_property_read_bool(pdev->dev.of_node,
                                        "ti,backup-battery-chargeable");
					        high_bb_charging =
	   of_property_read_bool(pdev->dev.of_node,
                                        "ti,backup-battery-charge-high-current");

Thanks,
									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Trickle charging for rtc-bq32k
  2014-08-22 14:38   ` Pavel Machek
@ 2014-09-02 11:51     ` Wolfram Sang
  0 siblings, 0 replies; 4+ messages in thread
From: Wolfram Sang @ 2014-09-02 11:51 UTC (permalink / raw)
  To: Pavel Machek; +Cc: a.zummo, rtc-linux, linux-kernel, linux-i2c, devicetree

[-- Attachment #1: Type: text/plain, Size: 238 bytes --]


> Do you have example how to acces of_ from i2c driver?
> 
> Platform drivers do:
> 
>         if (pdev->dev.of_node) {

As I said, this is basically the same. Just use the node from the
client's device. Nothing special here.


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-09-02 11:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-22 13:11 Trickle charging for rtc-bq32k Pavel Machek
2014-08-22 14:28 ` Wolfram Sang
2014-08-22 14:38   ` Pavel Machek
2014-09-02 11:51     ` Wolfram Sang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).