All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH, RESEND] RTC v3020 fixes
@ 2007-08-23  7:36 Mike Rapoport
  0 siblings, 0 replies; only message in thread
From: Mike Rapoport @ 2007-08-23  7:36 UTC (permalink / raw)
  To: LKML; +Cc: Raphael Assenat, Alessandro Zummo

Fix off-by-one in month calculations
Add delay for bus accesses to satisfy Tw > 500ns

Signed-off-by: Mike Rapoport <mike@compulab.co.il>
Acked-by: Raphael Assenat <raph@8d.com>

 drivers/rtc/rtc-v3020.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/rtc/rtc-v3020.c b/drivers/rtc/rtc-v3020.c
index 3b58d3d..e96d667 100644
--- a/drivers/rtc/rtc-v3020.c
+++ b/drivers/rtc/rtc-v3020.c
@@ -26,6 +26,7 @@
 #include <linux/types.h>
 #include <linux/bcd.h>
 #include <linux/rtc-v3020.h>
+#include <linux/delay.h>

 #include <asm/io.h>

@@ -47,6 +48,7 @@ static void v3020_set_reg(struct v3020 *chip, unsigned char address,
     for (i = 0; i < 4; i++) {
         writel((tmp & 1) << chip->leftshift, chip->ioaddress);
         tmp >>= 1;
+        udelay(1);
     }

     /* Commands dont have data */
@@ -54,6 +56,7 @@ static void v3020_set_reg(struct v3020 *chip, unsigned char address,
         for (i = 0; i < 8; i++) {
             writel((data & 1) << chip->leftshift, chip->ioaddress);
             data >>= 1;
+            udelay(1);
         }
     }
 }
@@ -66,12 +69,14 @@ static unsigned char v3020_get_reg(struct v3020 *chip, unsigned char address)
     for (i = 0; i < 4; i++) {
         writel((address & 1) << chip->leftshift, chip->ioaddress);
         address >>= 1;
+        udelay(1);
     }

     for (i = 0; i < 8; i++) {
         data >>= 1;
         if (readl(chip->ioaddress) & (1 << chip->leftshift))
             data |= 0x80;
+        udelay(1);
     }

     return data;
@@ -95,7 +100,7 @@ static int v3020_read_time(struct device *dev, struct rtc_time *dt)
     tmp = v3020_get_reg(chip, V3020_MONTH_DAY);
     dt->tm_mday    = BCD2BIN(tmp);
     tmp = v3020_get_reg(chip, V3020_MONTH);
-    dt->tm_mon    = BCD2BIN(tmp);
+    dt->tm_mon    = BCD2BIN(tmp) - 1;
     tmp = v3020_get_reg(chip, V3020_WEEK_DAY);
     dt->tm_wday    = BCD2BIN(tmp);
     tmp = v3020_get_reg(chip, V3020_YEAR);
@@ -135,7 +140,7 @@ static int v3020_set_time(struct device *dev, struct rtc_time *dt)
     v3020_set_reg(chip, V3020_MINUTES,     BIN2BCD(dt->tm_min));
     v3020_set_reg(chip, V3020_HOURS,     BIN2BCD(dt->tm_hour));
     v3020_set_reg(chip, V3020_MONTH_DAY,    BIN2BCD(dt->tm_mday));
-    v3020_set_reg(chip, V3020_MONTH,     BIN2BCD(dt->tm_mon));
+    v3020_set_reg(chip, V3020_MONTH,     BIN2BCD(dt->tm_mon + 1));
     v3020_set_reg(chip, V3020_WEEK_DAY,     BIN2BCD(dt->tm_wday));
     v3020_set_reg(chip, V3020_YEAR,     BIN2BCD(dt->tm_year % 100));


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2007-08-23  7:41 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-23  7:36 [PATCH, RESEND] RTC v3020 fixes Mike Rapoport

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.