#include <asm/lasat/lasat.h>
#include <linux/delay.h>
#include <asm/lasat/ds1603.h>
+#include <asm/time.h>
#include "ds1603.h"
#define TRIMMER_VALUE_MASK 0x38
#define TRIMMER_SHIFT 3
-struct ds_defs *ds1603 = NULL;
+struct ds_defs *ds1603;
/* HW specific register functions */
static void rtc_reg_write(unsigned long val)
{
int i;
- for (i = 0; i<=7; i++) {
+ for (i = 0; i <= 7; i++) {
rtc_write_databit(byte & 1L);
byte >>= 1;
}
{
int i;
- for (i = 0; i<=31; i++) {
+ for (i = 0; i <= 31; i++) {
rtc_write_databit(word & 1L);
word >>= 1;
}
unsigned long word = 0;
unsigned long shift = 0;
- for (i = 0; i<=31; i++) {
+ for (i = 0; i <= 31; i++) {
word |= rtc_read_databit() << shift;
shift++;
}
lasat_ndelay(1000);
}
-/* interface */
-unsigned long ds1603_read(void)
+unsigned long read_persistent_clock(void)
{
unsigned long word;
+ unsigned long flags;
+
+ spin_lock_irqsave(&rtc_lock, flags);
rtc_init_op();
rtc_write_byte(READ_TIME_CMD);
word = rtc_read_word();
rtc_end_op();
+ spin_unlock_irqrestore(&rtc_lock, flags);
+
return word;
}
-int ds1603_set(unsigned long time)
+int rtc_mips_set_mmss(unsigned long time)
{
+ unsigned long flags;
+
+ spin_lock_irqsave(&rtc_lock, flags);
rtc_init_op();
rtc_write_byte(SET_TIME_CMD);
rtc_write_word(time);
rtc_end_op();
+ spin_unlock_irqrestore(&rtc_lock, flags);
return 0;
}