- strcpy(model, hp300_model_name);
-}
-
-#define RTCBASE 0xf0420000
-#define RTC_DATA 0x1
-#define RTC_CMD 0x3
-
-#define RTC_BUSY 0x02
-#define RTC_DATA_RDY 0x01
-
-#define rtc_busy() (in_8(RTCBASE + RTC_CMD) & RTC_BUSY)
-#define rtc_data_available() (in_8(RTCBASE + RTC_CMD) & RTC_DATA_RDY)
-#define rtc_status() (in_8(RTCBASE + RTC_CMD))
-#define rtc_command(x) out_8(RTCBASE + RTC_CMD, (x))
-#define rtc_read_data() (in_8(RTCBASE + RTC_DATA))
-#define rtc_write_data(x) out_8(RTCBASE + RTC_DATA, (x))
-
-#define RTC_SETREG 0xe0
-#define RTC_WRITEREG 0xc2
-#define RTC_READREG 0xc3
-
-#define RTC_REG_SEC2 0
-#define RTC_REG_SEC1 1
-#define RTC_REG_MIN2 2
-#define RTC_REG_MIN1 3
-#define RTC_REG_HOUR2 4
-#define RTC_REG_HOUR1 5
-#define RTC_REG_WDAY 6
-#define RTC_REG_DAY2 7
-#define RTC_REG_DAY1 8
-#define RTC_REG_MON2 9
-#define RTC_REG_MON1 10
-#define RTC_REG_YEAR2 11
-#define RTC_REG_YEAR1 12
-
-#define RTC_HOUR1_24HMODE 0x8
-
-#define RTC_STAT_MASK 0xf0
-#define RTC_STAT_RDY 0x40
-
-static inline unsigned char hp300_rtc_read(unsigned char reg)
-{
- unsigned char s, ret;
- unsigned long flags;
-
- local_irq_save(flags);
-
- while (rtc_busy());
- rtc_command(RTC_SETREG);
- while (rtc_busy());
- rtc_write_data(reg);
- while (rtc_busy());
- rtc_command(RTC_READREG);
-
- do {
- while (!rtc_data_available());
- s = rtc_status();
- ret = rtc_read_data();
- } while ((s & RTC_STAT_MASK) != RTC_STAT_RDY);
-
- local_irq_restore(flags);
-
- return ret;
-}
-
-static inline unsigned char hp300_rtc_write(unsigned char reg,
- unsigned char val)
-{
- unsigned char s, ret;
- unsigned long flags;
-
- local_irq_save(flags);
-
- while (rtc_busy());
- rtc_command(RTC_SETREG);
- while (rtc_busy());
- rtc_write_data((val << 4) | reg);
- while (rtc_busy());
- rtc_command(RTC_WRITEREG);
- while (rtc_busy());
- rtc_command(RTC_READREG);
-
- do {
- while (!rtc_data_available());
- s = rtc_status();
- ret = rtc_read_data();
- } while ((s & RTC_STAT_MASK) != RTC_STAT_RDY);
-
- local_irq_restore(flags);
-
- return ret;
-}
-
-static int hp300_hwclk(int op, struct rtc_time *t)
-{
- if (!op) { /* read */
- t->tm_sec = hp300_rtc_read(RTC_REG_SEC1) * 10 +
- hp300_rtc_read(RTC_REG_SEC2);
- t->tm_min = hp300_rtc_read(RTC_REG_MIN1) * 10 +
- hp300_rtc_read(RTC_REG_MIN2);
- t->tm_hour = (hp300_rtc_read(RTC_REG_HOUR1) & 3) * 10 +
- hp300_rtc_read(RTC_REG_HOUR2);
- t->tm_wday = -1;
- t->tm_mday = hp300_rtc_read(RTC_REG_DAY1) * 10 +
- hp300_rtc_read(RTC_REG_DAY2);
- t->tm_mon = hp300_rtc_read(RTC_REG_MON1) * 10 +
- hp300_rtc_read(RTC_REG_MON2) - 1;
- t->tm_year = hp300_rtc_read(RTC_REG_YEAR1) * 10 +
- hp300_rtc_read(RTC_REG_YEAR2);
- if (t->tm_year <= 69)
- t->tm_year += 100;
- } else {
- hp300_rtc_write(RTC_REG_SEC1, t->tm_sec / 10);
- hp300_rtc_write(RTC_REG_SEC2, t->tm_sec % 10);
- hp300_rtc_write(RTC_REG_MIN1, t->tm_min / 10);
- hp300_rtc_write(RTC_REG_MIN2, t->tm_min % 10);
- hp300_rtc_write(RTC_REG_HOUR1,
- ((t->tm_hour / 10) & 3) | RTC_HOUR1_24HMODE);
- hp300_rtc_write(RTC_REG_HOUR2, t->tm_hour % 10);
- hp300_rtc_write(RTC_REG_DAY1, t->tm_mday / 10);
- hp300_rtc_write(RTC_REG_DAY2, t->tm_mday % 10);
- hp300_rtc_write(RTC_REG_MON1, (t->tm_mon + 1) / 10);
- hp300_rtc_write(RTC_REG_MON2, (t->tm_mon + 1) % 10);
- if (t->tm_year >= 100)
- t->tm_year -= 100;
- hp300_rtc_write(RTC_REG_YEAR1, t->tm_year / 10);
- hp300_rtc_write(RTC_REG_YEAR2, t->tm_year % 10);
- }
-
- return 0;
-}
-
-static unsigned int hp300_get_ss(void)
-{
- return hp300_rtc_read(RTC_REG_SEC1) * 10 +
- hp300_rtc_read(RTC_REG_SEC2);