]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
* Patch by Tom Armistead, 04 Jun 2004:
authorwdenk <wdenk>
Wed, 9 Jun 2004 17:34:58 +0000 (17:34 +0000)
committerwdenk <wdenk>
Wed, 9 Jun 2004 17:34:58 +0000 (17:34 +0000)
  Add support for MAX6900 RTC

* Patches by Ladislav Michl, 03 Jun 2004:
  - fix cfi_flash.c on LE systems
  - let 'make mrproper' delete u-boot.img as well
  - turn printf into debug in cfi_flash.c

CHANGELOG
Makefile
README
drivers/cfi_flash.c
rtc/Makefile
rtc/max6900.c [new file with mode: 0644]

index bf6a9ffdfe465f2a1ee6eb7d62d8c0ea6e443706..b792af5093175c0f49bb5e2a3f1cbe6f7787983a 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,14 @@
 Changes since U-Boot 1.1.1:
 ======================================================================
 
 Changes since U-Boot 1.1.1:
 ======================================================================
 
+* Patch by Tom Armistead, 04 Jun 2004:
+  Add support for MAX6900 RTC
+
+* Patches by Ladislav Michl, 03 Jun 2004:
+  - fix cfi_flash.c on LE systems
+  - let 'make mrproper' delete u-boot.img as well
+  - turn printf into debug in cfi_flash.c
+
 * Patch by Kurt Stremerch, 28 May 2004:
   Add support for Exys XSEngine board
 
 * Patch by Kurt Stremerch, 28 May 2004:
   Add support for Exys XSEngine board
 
index cf8ecb780d2a27d50cbe16060c9d08b6bd6a129c..5c91ce04c4eb7cb940e5932d4b14d2b906ba19fb 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1338,10 +1338,10 @@ clean:
        rm -f board/trab/trab_fkt
 
 clobber:       clean
        rm -f board/trab/trab_fkt
 
 clobber:       clean
-       find . -type f \
-               \( -name .depend -o -name '*.srec' -o -name '*.bin' \) \
-               -print \
-               | xargs rm -f
+       find . -type f \( -name .depend \
+               -o -name '*.srec' -o -name '*.bin' -o -name u-boot.img \) \
+               -print0 \
+               | xargs -0 rm -f
        rm -f $(OBJS) *.bak tags TAGS
        rm -fr *.*~
        rm -f u-boot u-boot.map $(ALL)
        rm -f $(OBJS) *.bak tags TAGS
        rm -fr *.*~
        rm -f u-boot u-boot.map $(ALL)
diff --git a/README b/README
index b197b1d57c1c9e5b0e10292c4a980321e109a6e8..32a97cca32181aac0af0375dfa950479fb708b99 100644 (file)
--- a/README
+++ b/README
@@ -652,6 +652,7 @@ The following options need to be configured:
                CONFIG_RTC_DS1337       - use Maxim, Inc. DS1337 RTC
                CONFIG_RTC_DS1338       - use Maxim, Inc. DS1338 RTC
                CONFIG_RTC_DS164x       - use Dallas DS164x RTC
                CONFIG_RTC_DS1337       - use Maxim, Inc. DS1337 RTC
                CONFIG_RTC_DS1338       - use Maxim, Inc. DS1338 RTC
                CONFIG_RTC_DS164x       - use Dallas DS164x RTC
+               CONFIG_RTC_MAX6900      - use Maxim, Inc. MAX6900 RTC
 
                Note that if the RTC uses I2C, then the I2C interface
                must also be configured. See I2C Support, below.
 
                Note that if the RTC uses I2C, then the I2C interface
                must also be configured. See I2C Support, below.
index cba91f31a6fac938f62dc376d7f576a72a8d83c8..b79cf59344c8d2935a252064f6d17042d4e471c2 100644 (file)
@@ -46,6 +46,7 @@
 
 #include <common.h>
 #include <asm/processor.h>
 
 #include <common.h>
 #include <asm/processor.h>
+#include <asm/byteorder.h>
 #include <linux/byteorder/swab.h>
 #ifdef CFG_FLASH_CFI_DRIVER
 
 #include <linux/byteorder/swab.h>
 #ifdef CFG_FLASH_CFI_DRIVER
 
@@ -1038,7 +1039,7 @@ static ulong flash_get_size (ulong base, int banknum)
                                (tmp & 0xffff) ? ((tmp & 0xffff) * 256) : 128;
                        tmp >>= 16;
                        erase_region_count = (tmp & 0xffff) + 1;
                                (tmp & 0xffff) ? ((tmp & 0xffff) * 256) : 128;
                        tmp >>= 16;
                        erase_region_count = (tmp & 0xffff) + 1;
-                       printf ("erase_region_count = %d erase_region_size = %d\n",
+                       debug ("erase_region_count = %d erase_region_size = %d\n",
                                erase_region_count, erase_region_size);
                        for (j = 0; j < erase_region_count; j++) {
                                info->start[sect_cnt] = sector;
                                erase_region_count, erase_region_size);
                        for (j = 0; j < erase_region_count; j++) {
                                info->start[sect_cnt] = sector;
index 1c543d74f330e240f685b6c37a3a6f18a1f4ae87..71fadeafdfd7e151b1ba8cc7d0cb49a374ff055d 100644 (file)
@@ -30,7 +30,7 @@ LIB   = librtc.a
 OBJS   = date.o   \
          ds12887.o ds1302.o ds1306.o ds1307.o ds1337.o \
          ds1556.o ds164x.o ds174x.o \
 OBJS   = date.o   \
          ds12887.o ds1302.o ds1306.o ds1307.o ds1337.o \
          ds1556.o ds164x.o ds174x.o \
-         m41t11.o m48t35ax.o mc146818.o mk48t59.o \
+         m41t11.o max6900.o m48t35ax.o mc146818.o mk48t59.o \
          mpc5xxx.o mpc8xx.o pcf8563.o s3c24x0_rtc.o
 
 all:   $(LIB)
          mpc5xxx.o mpc8xx.o pcf8563.o s3c24x0_rtc.o
 
 all:   $(LIB)
diff --git a/rtc/max6900.c b/rtc/max6900.c
new file mode 100644 (file)
index 0000000..73919cd
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * (C) Copyright 2004
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * Date & Time support for MAXIM MAX6900 RTC
+ */
+
+/* #define     DEBUG   */
+
+#include <common.h>
+#include <command.h>
+#include <rtc.h>
+#include <i2c.h>
+
+#if defined(CONFIG_RTC_MAX6900) && (CONFIG_COMMANDS & CFG_CMD_DATE)
+
+#ifndef        CFG_I2C_RTC_ADDR
+#define        CFG_I2C_RTC_ADDR        0x50
+#endif
+
+/* ------------------------------------------------------------------------- */
+
+static uchar rtc_read (uchar reg)
+{
+       return (i2c_reg_read (CFG_I2C_RTC_ADDR, reg));
+}
+
+static void rtc_write (uchar reg, uchar val)
+{
+       i2c_reg_write (CFG_I2C_RTC_ADDR, reg, val);
+       udelay(2500);
+}
+
+static unsigned bcd2bin (uchar n)
+{
+       return ((((n >> 4) & 0x0F) * 10) + (n & 0x0F));
+}
+
+static unsigned char bin2bcd (unsigned int n)
+{
+       return (((n / 10) << 4) | (n % 10));
+}
+
+/* ------------------------------------------------------------------------- */
+
+void rtc_get (struct rtc_time *tmp)
+{
+       uchar sec, min, hour, mday, wday, mon, cent, year;
+       int retry = 1;
+
+       do {
+               sec     = rtc_read (0x80);
+               min     = rtc_read (0x82);
+               hour    = rtc_read (0x84);
+               mday    = rtc_read (0x86);
+               mon     = rtc_read (0x88);
+               wday    = rtc_read (0x8a);
+               year    = rtc_read (0x8c);
+               cent    = rtc_read (0x92);
+               /*
+                * Check for seconds rollover
+                */
+               if ((sec != 59) || (rtc_read(0x80) == sec)){
+                       retry = 0;
+               }
+       } while (retry);
+
+       debug ( "Get RTC year: %02x mon: %02x cent: %02x mday: %02x wday: %02x "
+               "hr: %02x min: %02x sec: %02x\n",
+               year, mon, cent, mday, wday,
+               hour, min, sec );
+
+       tmp->tm_sec  = bcd2bin (sec  & 0x7F);
+       tmp->tm_min  = bcd2bin (min  & 0x7F);
+       tmp->tm_hour = bcd2bin (hour & 0x3F);
+       tmp->tm_mday = bcd2bin (mday & 0x3F);
+       tmp->tm_mon  = bcd2bin (mon & 0x1F);
+       tmp->tm_year = bcd2bin (year) + bcd2bin(cent) * 100;
+       tmp->tm_wday = bcd2bin (wday & 0x07);
+       tmp->tm_yday = 0;
+       tmp->tm_isdst= 0;
+
+       debug ( "Get DATE: %4d-%02d-%02d (wday=%d)  TIME: %2d:%02d:%02d\n",
+               tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday,
+               tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
+}
+
+void rtc_set (struct rtc_time *tmp)
+{
+
+       debug ( "Set DATE: %4d-%02d-%02d (wday=%d)  TIME: %2d:%02d:%02d\n",
+               tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday,
+               tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
+
+       rtc_write (0x9E, 0x00);
+       rtc_write (0x80, 0);    /* Clear seconds to ensure no rollover */
+       rtc_write (0x92, bin2bcd(tmp->tm_year / 100));
+       rtc_write (0x8c, bin2bcd(tmp->tm_year % 100));
+       rtc_write (0x8a, bin2bcd(tmp->tm_wday));
+       rtc_write (0x88, bin2bcd(tmp->tm_mon));
+       rtc_write (0x86, bin2bcd(tmp->tm_mday));
+       rtc_write (0x84, bin2bcd(tmp->tm_hour));
+       rtc_write (0x82, bin2bcd(tmp->tm_min ));
+       rtc_write (0x80, bin2bcd(tmp->tm_sec ));
+}
+
+void rtc_reset (void)
+{
+}
+
+#endif /* CONFIG_RTC_MAX6900 && CFG_CMD_DATE */