From: Alessandro Zummo <a.zummo@towertech.it>
To: linux-kernel@vger.kernel.org
Cc: akpm@zip.com.au, akpm@osdl.org, Kumar Gala <galak@kernel.crashing.org>
Subject: [PATCH 01/10] RTC subsystem, DS1672 oscillator handling
Date: Fri, 31 Mar 2006 12:04:24 +0200 [thread overview]
Message-ID: <20060331100423.320464000@towertech.it> (raw)
In-Reply-To: 20060331100423.175139000@towertech.it
[-- Attachment #1: rtc-subsys-ds1672-fix-osc.patch --]
[-- Type: text/plain, Size: 3706 bytes --]
From: Kumar Gala <galak@kernel.crashing.org>
* Always enable the oscillator when we set the time
* If the oscillator is disable when we probe the RTC report back a warning
to the user
* Added sysfs attribute to represent the state of the oscillator
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Signed-off-by: Alessandro Zummo <a.zummo@towertech.it>
---
commit 3acc1a4629e70bce7493b5463f3c785379ae8b6b
tree 34463406603ac788697d8d228a2caf2c0ea40b3a
parent 329b10bb0feacb7fb9a41389313ff0a51ae56f2a
author Kumar Gala <galak@kernel.crashing.org> Tue, 28 Mar 2006 16:53:43 -0600
committer Kumar Gala <galak@kernel.crashing.org> Tue, 28 Mar 2006 16:53:43 -0600
drivers/rtc/rtc-ds1672.c | 61 ++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 58 insertions(+), 3 deletions(-)
--- linux-rtc.orig/drivers/rtc/rtc-ds1672.c 2006-03-29 02:14:50.000000000 +0200
+++ linux-rtc/drivers/rtc/rtc-ds1672.c 2006-03-29 02:16:01.000000000 +0200
@@ -23,6 +23,7 @@ I2C_CLIENT_INSMOD;
#define DS1672_REG_CNT_BASE 0
#define DS1672_REG_CONTROL 4
+#define DS1672_REG_CONTROL_EOSC 0x80
#define DS1672_REG_TRICKLE 5
@@ -72,16 +73,17 @@ static int ds1672_get_datetime(struct i2
static int ds1672_set_mmss(struct i2c_client *client, unsigned long secs)
{
int xfer;
- unsigned char buf[5];
+ unsigned char buf[6];
buf[0] = DS1672_REG_CNT_BASE;
buf[1] = secs & 0x000000FF;
buf[2] = (secs & 0x0000FF00) >> 8;
buf[3] = (secs & 0x00FF0000) >> 16;
buf[4] = (secs & 0xFF000000) >> 24;
+ buf[5] = 0; /* set control reg to enable counting */
- xfer = i2c_master_send(client, buf, 5);
- if (xfer != 5) {
+ xfer = i2c_master_send(client, buf, 6);
+ if (xfer != 6) {
dev_err(&client->dev, "%s: send: %d\n", __FUNCTION__, xfer);
return -EIO;
}
@@ -120,6 +122,44 @@ static int ds1672_rtc_set_mmss(struct de
return ds1672_set_mmss(to_i2c_client(dev), secs);
}
+static int ds1672_get_control(struct i2c_client *client, u8 *status)
+{
+ unsigned char addr = DS1672_REG_CONTROL;
+
+ struct i2c_msg msgs[] = {
+ { client->addr, 0, 1, &addr }, /* setup read ptr */
+ { client->addr, I2C_M_RD, 1, status }, /* read control */
+ };
+
+ /* read control register */
+ if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
+ return -EIO;
+ }
+
+ return 0;
+}
+
+/* following are the sysfs callback functions */
+static ssize_t show_control(struct device *dev, struct device_attribute *attr, char *buf)
+{
+ struct i2c_client *client = to_i2c_client(dev);
+ char *state = "enabled";
+ u8 control;
+ int err;
+
+ err = ds1672_get_control(client, &control);
+ if (err)
+ return err;
+
+ if (control & DS1672_REG_CONTROL_EOSC)
+ state = "disabled";
+
+ return sprintf(buf, "%s\n", state);
+}
+
+static DEVICE_ATTR(control, S_IRUGO, show_control, NULL);
+
static struct rtc_class_ops ds1672_rtc_ops = {
.read_time = ds1672_rtc_read_time,
.set_time = ds1672_rtc_set_time,
@@ -162,6 +202,7 @@ static struct i2c_driver ds1672_driver =
static int ds1672_probe(struct i2c_adapter *adapter, int address, int kind)
{
int err = 0;
+ u8 control;
struct i2c_client *client;
struct rtc_device *rtc;
@@ -202,6 +243,20 @@ static int ds1672_probe(struct i2c_adapt
i2c_set_clientdata(client, rtc);
+ /* read control register */
+ err = ds1672_get_control(client, &control);
+ if (err) {
+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
+ goto exit_detach;
+ }
+
+ if (control & DS1672_REG_CONTROL_EOSC)
+ dev_warn(&client->dev, "Oscillator not enabled. "
+ "Set time to enable.\n");
+
+ /* Register sysfs hooks */
+ device_create_file(&client->dev, &dev_attr_control);
+
return 0;
exit_detach:
--
next prev parent reply other threads:[~2006-03-31 10:07 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-31 10:04 [PATCH 00/10] RTC subsystem Alessandro Zummo
2006-03-31 10:04 ` Alessandro Zummo [this message]
2006-03-31 10:04 ` [PATCH 02/10] RTC subsystem, DS1672 cleanup Alessandro Zummo
2006-03-31 10:04 ` [PATCH 03/10] RTC subsystem, X1205 sysfs cleanup Alessandro Zummo
2006-03-31 10:04 ` [PATCH 04/10] RTC subsystem, whitespaces and error messages cleanup Alessandro Zummo
2006-03-31 10:04 ` [PATCH 05/10] RTC subsystem, fix proc output Alessandro Zummo
2006-03-31 10:04 ` [PATCH 06/10] RTC subsystem, RS5C372 sysfs fix Alessandro Zummo
2006-03-31 10:04 ` [PATCH 07/10] RTC subsystem, compact error messages Alessandro Zummo
2006-03-31 10:04 ` [PATCH 08/10] RTC subsystem, SA1100 cleanup Alessandro Zummo
2006-04-02 18:43 ` Pavel Machek
2006-03-31 10:04 ` [PATCH 09/10] RTC subsystem, VR41XX driver Alessandro Zummo
2006-04-01 23:20 ` Andrew Morton
2006-03-31 10:04 ` [PATCH 10/10] RTC subsystem, VR41XX cleanup Alessandro Zummo
[not found] ` <Pine.LNX.4.63.0605030826290.1846@pcgl.dsa-ac.de>
[not found] ` <20060503105816.65f309f8@inspiron>
[not found] ` <Pine.LNX.4.63.0605031120570.1846@pcgl.dsa-ac.de>
[not found] ` <20060503121354.61bf3558@inspiron>
[not found] ` <Pine.LNX.4.63.0605031223350.1846@pcgl.dsa-ac.de>
[not found] ` <20060503122555.5337523f@inspiron>
[not found] ` <Pine.LNX.4.63.0605031242020.1846@pcgl.dsa-ac.de>
[not found] ` <20060503132301.52a75dcd@inspiron>
2006-05-05 18:43 ` drivers/acorn/char/pcf8583.[hc] vs. RTC subsystem Guennadi Liakhovetski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060331100423.320464000@towertech.it \
--to=a.zummo@towertech.it \
--cc=akpm@osdl.org \
--cc=akpm@zip.com.au \
--cc=galak@kernel.crashing.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.