Patchwork rtc-isl12022: properly handle military hour format

login
register
mail settings
Submitter Roman Fietze
Date July 14, 2010, 5:42 a.m.
Message ID <201007140742.58766.roman.fietze@telemotive.de>
Download mbox | patch
Permalink /patch/58838/
State New
Headers show

Comments

Roman Fietze - July 14, 2010, 5:42 a.m.
Hello Wan, hello list members,

I found a bug in my rtc-isl12022. Seems I missed to test that driver
thoroughly in the afternoons.

From 151b7d5413e189ec8f6dd578c253500d8814128e Mon Sep 17 00:00:00 2001
From: Roman Fietze <roman.fietze@telemotive.de>
Date: Wed, 14 Jul 2010 07:32:49 +0200
Subject: [PATCH] rtc-isl12022: properly handle military hour format

Mask out PM flag when reading the hour, always set MIL bit when
writing the hour.

Signed-off-by: Roman Fietze <roman.fietze@telemotive.de>
---
 drivers/rtc/rtc-isl12022.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

 	tm->tm_mon = bcd2bin(buf[ISL12022_REG_MO] & 0x1F) - 1;
@@ -192,7 +192,7 @@ static int isl12022_set_datetime(struct i2c_client 
*client, struct rtc_time *tm)
 	/* hours, minutes and seconds */
 	buf[ISL12022_REG_SC] = bin2bcd(tm->tm_sec);
 	buf[ISL12022_REG_MN] = bin2bcd(tm->tm_min);
-	buf[ISL12022_REG_HR] = bin2bcd(tm->tm_hour);
+	buf[ISL12022_REG_HR] = bin2bcd(tm->tm_hour) | ISL12022_HR_MIL;
 
 	buf[ISL12022_REG_DT] = bin2bcd(tm->tm_mday);
Wan ZongShun - July 14, 2010, 6:54 a.m.
2010/7/14 Roman Fietze <roman.fietze@telemotive.de>:
> Hello Wan, hello list members,
>
> I found a bug in my rtc-isl12022. Seems I missed to test that driver
> thoroughly in the afternoons.

It's not very helpful to only say "I found a bug in ". What was wrong
with the old code missed some flags?
But I give you my ack, since I believe it is really wrong, you should
know more this hardware register than me.:)

Acked-by: Wan ZongShun <mcuos.com@gmail.com>

>
> From 151b7d5413e189ec8f6dd578c253500d8814128e Mon Sep 17 00:00:00 2001
> From: Roman Fietze <roman.fietze@telemotive.de>
> Date: Wed, 14 Jul 2010 07:32:49 +0200
> Subject: [PATCH] rtc-isl12022: properly handle military hour format
>
> Mask out PM flag when reading the hour, always set MIL bit when
> writing the hour.
>
> Signed-off-by: Roman Fietze <roman.fietze@telemotive.de>
> ---
>  drivers/rtc/rtc-isl12022.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/rtc/rtc-isl12022.c b/drivers/rtc/rtc-isl12022.c
> index 293d2c1..0f300b4 100644
> --- a/drivers/rtc/rtc-isl12022.c
> +++ b/drivers/rtc/rtc-isl12022.c
> @@ -126,7 +126,7 @@ static int isl12022_get_datetime(struct i2c_client
> *client, struct rtc_time *tm)
>
>        tm->tm_sec = bcd2bin(buf[ISL12022_REG_SC] & 0x7F);
>        tm->tm_min = bcd2bin(buf[ISL12022_REG_MN] & 0x7F);
> -       tm->tm_hour = bcd2bin(buf[ISL12022_REG_HR] & 0x3F);
> +       tm->tm_hour = bcd2bin(buf[ISL12022_REG_HR] & 0x1F);
>        tm->tm_mday = bcd2bin(buf[ISL12022_REG_DT] & 0x3F);
>        tm->tm_wday = buf[ISL12022_REG_DW] & 0x07;
>        tm->tm_mon = bcd2bin(buf[ISL12022_REG_MO] & 0x1F) - 1;
> @@ -192,7 +192,7 @@ static int isl12022_set_datetime(struct i2c_client
> *client, struct rtc_time *tm)
>        /* hours, minutes and seconds */
>        buf[ISL12022_REG_SC] = bin2bcd(tm->tm_sec);
>        buf[ISL12022_REG_MN] = bin2bcd(tm->tm_min);
> -       buf[ISL12022_REG_HR] = bin2bcd(tm->tm_hour);
> +       buf[ISL12022_REG_HR] = bin2bcd(tm->tm_hour) | ISL12022_HR_MIL;
>
>        buf[ISL12022_REG_DT] = bin2bcd(tm->tm_mday);
>
> --
> 1.7.1
>
>
> --
> Roman Fietze              Telemotive AG Buero Muehlhausen
> Breitwiesen                             73347 Muehlhausen
> Tel.: +49(0)7335/18493-45        http://www.telemotive.de
>

Patch

diff --git a/drivers/rtc/rtc-isl12022.c b/drivers/rtc/rtc-isl12022.c
index 293d2c1..0f300b4 100644
--- a/drivers/rtc/rtc-isl12022.c
+++ b/drivers/rtc/rtc-isl12022.c
@@ -126,7 +126,7 @@  static int isl12022_get_datetime(struct i2c_client 
*client, struct rtc_time *tm)
 
 	tm->tm_sec = bcd2bin(buf[ISL12022_REG_SC] & 0x7F);
 	tm->tm_min = bcd2bin(buf[ISL12022_REG_MN] & 0x7F);
-	tm->tm_hour = bcd2bin(buf[ISL12022_REG_HR] & 0x3F);
+	tm->tm_hour = bcd2bin(buf[ISL12022_REG_HR] & 0x1F);
 	tm->tm_mday = bcd2bin(buf[ISL12022_REG_DT] & 0x3F);
 	tm->tm_wday = buf[ISL12022_REG_DW] & 0x07;