/*
 * include/asm-mips/rtc.h
 *
 * (Really an interface for drivers/char/genrtc.c)
 *
 * Copyright (C) 2004 MontaVista Software Inc.
 * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
 *
 * Please read the COPYING file for all license details.
 */

#ifndef _MIPS_RTC_H
#define _MIPS_RTC_H

#ifdef __KERNEL__

#include <linux/spinlock.h>
#include <linux/rtc.h>
#include <asm/time.h>

#define RTC_PIE 0x40            /* periodic interrupt enable */
#define RTC_AIE 0x20            /* alarm interrupt enable */
#define RTC_UIE 0x10            /* update-finished interrupt enable */

/* some dummy definitions */
#define RTC_BATT_BAD 0x100      /* battery bad */
#define RTC_SQWE 0x08           /* enable square-wave output */
#define RTC_DM_BINARY 0x04      /* all time/date values are BCD if clear */
#define RTC_24H 0x02            /* 24 hour mode - else hours bit 7 means pm */
#define RTC_DST_EN 0x01         /* auto switch DST - works f. USA only */

static DEFINE_SPINLOCK(mips_rtc_lock);

static inline unsigned int get_rtc_time(struct rtc_time *time)
{
	unsigned long nowtime;

	spin_lock(&mips_rtc_lock);
	nowtime = rtc_get_time();
	to_tm(nowtime, time);
	time->tm_year -= 1900;
	spin_unlock(&mips_rtc_lock);

	return RTC_24H;
}

static inline int set_rtc_time(struct rtc_time *time)
{
	unsigned long nowtime;
	int ret;

	spin_lock(&mips_rtc_lock);
	nowtime = mktime(time->tm_year+1900, time->tm_mon+1,
			time->tm_mday, time->tm_hour, time->tm_min,
			time->tm_sec);
	ret = rtc_set_time(nowtime);
	spin_unlock(&mips_rtc_lock);

	return ret;
}

static inline unsigned int get_rtc_ss(void)
{
	struct rtc_time h;

	get_rtc_time(&h);
	return h.tm_sec;
}

static inline int get_rtc_pll(struct rtc_pll_info *pll)
{
	return -EINVAL;
}

static inline int set_rtc_pll(struct rtc_pll_info *pll)
{
	return -EINVAL;
}
#endif
#endif
