aboutsummaryrefslogtreecommitdiff
path: root/arch/sparc64/kernel
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2005-04-21 21:42:34 -0700
committerDavid S. Miller <davem@sunset.davemloft.net>2005-04-21 21:42:34 -0700
commitb4bca26c0160f48b4eb04f21d31a229832732013 (patch)
treeb4a6d736fcb8664753066df3e6a93ed24c0f409b /arch/sparc64/kernel
parentd7be828e03969ea7f922f299acb8daa0d8ce7006 (diff)
[SPARC]: Provide generic ioctls in Sparc RTC driver.
Provide support for drivers/char/rtc.c ioctls in the Mostek rtc driver as well as the Sparc specific RTCGET and RTCSET. This allows userspace to be much less messy. Currently util-linux and other spots jump through hoops trying various ioctl variants until it hits the right one whatever driver actually being used supports. Eventually all of this should move over to the genrtc.c driver, but not today... While we are here, fix up the register types for sparse. Thanks to Frans Pop for helping point out this issue. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel')
-rw-r--r--arch/sparc64/kernel/time.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/arch/sparc64/kernel/time.c b/arch/sparc64/kernel/time.c
index 6a717d4d2bc..c60785c046b 100644
--- a/arch/sparc64/kernel/time.c
+++ b/arch/sparc64/kernel/time.c
@@ -48,7 +48,7 @@
DEFINE_SPINLOCK(mostek_lock);
DEFINE_SPINLOCK(rtc_lock);
-unsigned long mstk48t02_regs = 0UL;
+void * __iomem mstk48t02_regs = 0UL;
#ifdef CONFIG_PCI
unsigned long ds1287_regs = 0UL;
#endif
@@ -59,8 +59,8 @@ u64 jiffies_64 = INITIAL_JIFFIES;
EXPORT_SYMBOL(jiffies_64);
-static unsigned long mstk48t08_regs = 0UL;
-static unsigned long mstk48t59_regs = 0UL;
+static void * __iomem mstk48t08_regs;
+static void * __iomem mstk48t59_regs;
static int set_rtc_mmss(unsigned long);
@@ -520,7 +520,7 @@ void timer_tick_interrupt(struct pt_regs *regs)
/* Kick start a stopped clock (procedure from the Sun NVRAM/hostid FAQ). */
static void __init kick_start_clock(void)
{
- unsigned long regs = mstk48t02_regs;
+ void * __iomem regs = mstk48t02_regs;
u8 sec, tmp;
int i, count;
@@ -604,7 +604,7 @@ static void __init kick_start_clock(void)
/* Return nonzero if the clock chip battery is low. */
static int __init has_low_battery(void)
{
- unsigned long regs = mstk48t02_regs;
+ void * __iomem regs = mstk48t02_regs;
u8 data1, data2;
spin_lock_irq(&mostek_lock);
@@ -623,7 +623,7 @@ static int __init has_low_battery(void)
static void __init set_system_time(void)
{
unsigned int year, mon, day, hour, min, sec;
- unsigned long mregs = mstk48t02_regs;
+ void * __iomem mregs = mstk48t02_regs;
#ifdef CONFIG_PCI
unsigned long dregs = ds1287_regs;
#else
@@ -843,7 +843,8 @@ void __init clock_probe(void)
!strcmp(model, "m5823")) {
ds1287_regs = edev->resource[0].start;
} else {
- mstk48t59_regs = edev->resource[0].start;
+ mstk48t59_regs = (void * __iomem)
+ edev->resource[0].start;
mstk48t02_regs = mstk48t59_regs + MOSTEK_48T59_48T02;
}
break;
@@ -865,7 +866,8 @@ try_isa_clock:
!strcmp(model, "m5823")) {
ds1287_regs = isadev->resource.start;
} else {
- mstk48t59_regs = isadev->resource.start;
+ mstk48t59_regs = (void * __iomem)
+ isadev->resource.start;
mstk48t02_regs = mstk48t59_regs + MOSTEK_48T59_48T02;
}
break;
@@ -893,21 +895,24 @@ try_isa_clock:
}
if(model[5] == '0' && model[6] == '2') {
- mstk48t02_regs = (((u64)clk_reg[0].phys_addr) |
- (((u64)clk_reg[0].which_io)<<32UL));
+ mstk48t02_regs = (void * __iomem)
+ (((u64)clk_reg[0].phys_addr) |
+ (((u64)clk_reg[0].which_io)<<32UL));
} else if(model[5] == '0' && model[6] == '8') {
- mstk48t08_regs = (((u64)clk_reg[0].phys_addr) |
- (((u64)clk_reg[0].which_io)<<32UL));
+ mstk48t08_regs = (void * __iomem)
+ (((u64)clk_reg[0].phys_addr) |
+ (((u64)clk_reg[0].which_io)<<32UL));
mstk48t02_regs = mstk48t08_regs + MOSTEK_48T08_48T02;
} else {
- mstk48t59_regs = (((u64)clk_reg[0].phys_addr) |
- (((u64)clk_reg[0].which_io)<<32UL));
+ mstk48t59_regs = (void * __iomem)
+ (((u64)clk_reg[0].phys_addr) |
+ (((u64)clk_reg[0].which_io)<<32UL));
mstk48t02_regs = mstk48t59_regs + MOSTEK_48T59_48T02;
}
break;
}
- if (mstk48t02_regs != 0UL) {
+ if (mstk48t02_regs != NULL) {
/* Report a low battery voltage condition. */
if (has_low_battery())
prom_printf("NVRAM: Low battery voltage!\n");
@@ -1087,7 +1092,7 @@ unsigned long long sched_clock(void)
static int set_rtc_mmss(unsigned long nowtime)
{
int real_seconds, real_minutes, chip_minutes;
- unsigned long mregs = mstk48t02_regs;
+ void * __iomem mregs = mstk48t02_regs;
#ifdef CONFIG_PCI
unsigned long dregs = ds1287_regs;
#else