MIPS: Alchemy: Stop IRQ name sharing
Eliminate the sharing of IRQ names among the differenct Alchemy variants. IRQ numbers need no longer be hidden behind a CONFIG_SOC_AU1XXX symbol: step 1 in my quest to make the Alchemy code less reliant on a hardcoded subtype. This patch also renames the GPIO irq number constants. It's really an interrupt line, NOT a GPIO number! Code which relied on certain irq numbers to have the same name across all supported cpu subtypes is changed to determine current cpu subtype at runtime; in some places this isn't possible so a "compat" symbol is used. Run-tested on DB1200. Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:

committed by
Ralf Baechle

parent
93e9cd8485
commit
788144656b
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2008 Manuel Lauss <mano@roarinelk.homelinux.net>
|
||||
* Copyright (C) 2008-2009 Manuel Lauss <manuel.lauss@gmail.com>
|
||||
*
|
||||
* Previous incarnations were:
|
||||
* Copyright (C) 2001, 2006, 2008 MontaVista Software, <source@mvista.com>
|
||||
@@ -85,7 +85,6 @@ static struct clock_event_device au1x_rtcmatch2_clockdev = {
|
||||
.name = "rtcmatch2",
|
||||
.features = CLOCK_EVT_FEAT_ONESHOT,
|
||||
.rating = 100,
|
||||
.irq = AU1000_RTC_MATCH2_INT,
|
||||
.set_next_event = au1x_rtcmatch2_set_next_event,
|
||||
.set_mode = au1x_rtcmatch2_set_mode,
|
||||
.cpumask = cpu_all_mask,
|
||||
@@ -98,11 +97,13 @@ static struct irqaction au1x_rtcmatch2_irqaction = {
|
||||
.dev_id = &au1x_rtcmatch2_clockdev,
|
||||
};
|
||||
|
||||
void __init plat_time_init(void)
|
||||
static int __init alchemy_time_init(unsigned int m2int)
|
||||
{
|
||||
struct clock_event_device *cd = &au1x_rtcmatch2_clockdev;
|
||||
unsigned long t;
|
||||
|
||||
au1x_rtcmatch2_clockdev.irq = m2int;
|
||||
|
||||
/* Check if firmware (YAMON, ...) has enabled 32kHz and clock
|
||||
* has been detected. If so install the rtcmatch2 clocksource,
|
||||
* otherwise don't bother. Note that both bits being set is by
|
||||
@@ -148,13 +149,18 @@ void __init plat_time_init(void)
|
||||
cd->max_delta_ns = clockevent_delta2ns(0xffffffff, cd);
|
||||
cd->min_delta_ns = clockevent_delta2ns(8, cd); /* ~0.25ms */
|
||||
clockevents_register_device(cd);
|
||||
setup_irq(AU1000_RTC_MATCH2_INT, &au1x_rtcmatch2_irqaction);
|
||||
setup_irq(m2int, &au1x_rtcmatch2_irqaction);
|
||||
|
||||
printk(KERN_INFO "Alchemy clocksource installed\n");
|
||||
|
||||
return;
|
||||
return 0;
|
||||
|
||||
cntr_err:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void __init alchemy_setup_c0timer(void)
|
||||
{
|
||||
/*
|
||||
* MIPS kernel assigns 'au1k_wait' to 'cpu_wait' before this
|
||||
* function is called. Because the Alchemy counters are unusable
|
||||
@@ -166,3 +172,22 @@ cntr_err:
|
||||
r4k_clockevent_init();
|
||||
init_r4k_clocksource();
|
||||
}
|
||||
|
||||
static int alchemy_m2inttab[] __initdata = {
|
||||
AU1000_RTC_MATCH2_INT,
|
||||
AU1500_RTC_MATCH2_INT,
|
||||
AU1100_RTC_MATCH2_INT,
|
||||
AU1550_RTC_MATCH2_INT,
|
||||
AU1200_RTC_MATCH2_INT,
|
||||
};
|
||||
|
||||
void __init plat_time_init(void)
|
||||
{
|
||||
int t;
|
||||
|
||||
t = alchemy_get_cputype();
|
||||
if (t == ALCHEMY_CPU_UNKNOWN)
|
||||
alchemy_setup_c0timer();
|
||||
else if (alchemy_time_init(alchemy_m2inttab[t]))
|
||||
alchemy_setup_c0timer();
|
||||
}
|
||||
|
Reference in New Issue
Block a user