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
@ -30,6 +30,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/spinlock.h>
|
||||
@ -58,7 +59,6 @@ static DEFINE_SPINLOCK(au1xxx_dbdma_spin_lock);
|
||||
|
||||
static dbdma_global_t *dbdma_gptr = (dbdma_global_t *)DDMA_GLOBAL_BASE;
|
||||
static int dbdma_initialized;
|
||||
static void au1xxx_dbdma_init(void);
|
||||
|
||||
static dbdev_tab_t dbdev_tab[] = {
|
||||
#ifdef CONFIG_SOC_AU1550
|
||||
@ -250,8 +250,7 @@ u32 au1xxx_dbdma_chan_alloc(u32 srcid, u32 destid,
|
||||
* which can't be done successfully during board set up.
|
||||
*/
|
||||
if (!dbdma_initialized)
|
||||
au1xxx_dbdma_init();
|
||||
dbdma_initialized = 1;
|
||||
return 0;
|
||||
|
||||
stp = find_dbdev_id(srcid);
|
||||
if (stp == NULL)
|
||||
@ -871,28 +870,6 @@ static irqreturn_t dbdma_interrupt(int irq, void *dev_id)
|
||||
return IRQ_RETVAL(1);
|
||||
}
|
||||
|
||||
static void au1xxx_dbdma_init(void)
|
||||
{
|
||||
int irq_nr;
|
||||
|
||||
dbdma_gptr->ddma_config = 0;
|
||||
dbdma_gptr->ddma_throttle = 0;
|
||||
dbdma_gptr->ddma_inten = 0xffff;
|
||||
au_sync();
|
||||
|
||||
#if defined(CONFIG_SOC_AU1550)
|
||||
irq_nr = AU1550_DDMA_INT;
|
||||
#elif defined(CONFIG_SOC_AU1200)
|
||||
irq_nr = AU1200_DDMA_INT;
|
||||
#else
|
||||
#error Unknown Au1x00 SOC
|
||||
#endif
|
||||
|
||||
if (request_irq(irq_nr, dbdma_interrupt, IRQF_DISABLED,
|
||||
"Au1xxx dbdma", (void *)dbdma_gptr))
|
||||
printk(KERN_ERR "Can't get 1550 dbdma irq");
|
||||
}
|
||||
|
||||
void au1xxx_dbdma_dump(u32 chanid)
|
||||
{
|
||||
chan_tab_t *ctp;
|
||||
@ -1041,4 +1018,38 @@ void au1xxx_dbdma_resume(void)
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
static int __init au1xxx_dbdma_init(void)
|
||||
{
|
||||
int irq_nr, ret;
|
||||
|
||||
dbdma_gptr->ddma_config = 0;
|
||||
dbdma_gptr->ddma_throttle = 0;
|
||||
dbdma_gptr->ddma_inten = 0xffff;
|
||||
au_sync();
|
||||
|
||||
switch (alchemy_get_cputype()) {
|
||||
case ALCHEMY_CPU_AU1550:
|
||||
irq_nr = AU1550_DDMA_INT;
|
||||
break;
|
||||
case ALCHEMY_CPU_AU1200:
|
||||
irq_nr = AU1200_DDMA_INT;
|
||||
break;
|
||||
default:
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
ret = request_irq(irq_nr, dbdma_interrupt, IRQF_DISABLED,
|
||||
"Au1xxx dbdma", (void *)dbdma_gptr);
|
||||
if (ret)
|
||||
printk(KERN_ERR "Cannot grab DBDMA interrupt!\n");
|
||||
else {
|
||||
dbdma_initialized = 1;
|
||||
printk(KERN_INFO "Alchemy DBDMA initialized\n");
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
subsys_initcall(au1xxx_dbdma_init);
|
||||
|
||||
#endif /* defined(CONFIG_SOC_AU1550) || defined(CONFIG_SOC_AU1200) */
|
||||
|
Reference in New Issue
Block a user