ARM: pxa: lubbock: use new pxa_cplds driver
As the interrupt handling was transferred to the pxa_cplds driver,
make the switch in lubbock platform code.
Fixes: 157d2644cb
("ARM: pxa: change gpio to platform device")
Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
Acked-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
277688639f
commit
fc9e38c0f4
|
@ -37,7 +37,9 @@
|
||||||
#define LUB_GP __LUB_REG(LUBBOCK_FPGA_PHYS + 0x100)
|
#define LUB_GP __LUB_REG(LUBBOCK_FPGA_PHYS + 0x100)
|
||||||
|
|
||||||
/* Board specific IRQs */
|
/* Board specific IRQs */
|
||||||
#define LUBBOCK_IRQ(x) (IRQ_BOARD_START + (x))
|
#define LUBBOCK_NR_IRQS IRQ_BOARD_START
|
||||||
|
|
||||||
|
#define LUBBOCK_IRQ(x) (LUBBOCK_NR_IRQS + (x))
|
||||||
#define LUBBOCK_SD_IRQ LUBBOCK_IRQ(0)
|
#define LUBBOCK_SD_IRQ LUBBOCK_IRQ(0)
|
||||||
#define LUBBOCK_SA1111_IRQ LUBBOCK_IRQ(1)
|
#define LUBBOCK_SA1111_IRQ LUBBOCK_IRQ(1)
|
||||||
#define LUBBOCK_USB_IRQ LUBBOCK_IRQ(2) /* usb connect */
|
#define LUBBOCK_USB_IRQ LUBBOCK_IRQ(2) /* usb connect */
|
||||||
|
@ -47,8 +49,7 @@
|
||||||
#define LUBBOCK_USB_DISC_IRQ LUBBOCK_IRQ(6) /* usb disconnect */
|
#define LUBBOCK_USB_DISC_IRQ LUBBOCK_IRQ(6) /* usb disconnect */
|
||||||
#define LUBBOCK_LAST_IRQ LUBBOCK_IRQ(6)
|
#define LUBBOCK_LAST_IRQ LUBBOCK_IRQ(6)
|
||||||
|
|
||||||
#define LUBBOCK_SA1111_IRQ_BASE (IRQ_BOARD_START + 16)
|
#define LUBBOCK_SA1111_IRQ_BASE (LUBBOCK_NR_IRQS + 32)
|
||||||
#define LUBBOCK_NR_IRQS (IRQ_BOARD_START + 16 + 55)
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
extern void lubbock_set_misc_wr(unsigned int mask, unsigned int set);
|
extern void lubbock_set_misc_wr(unsigned int mask, unsigned int set);
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/gpio/machine.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
@ -123,84 +124,6 @@ void lubbock_set_misc_wr(unsigned int mask, unsigned int set)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(lubbock_set_misc_wr);
|
EXPORT_SYMBOL(lubbock_set_misc_wr);
|
||||||
|
|
||||||
static unsigned long lubbock_irq_enabled;
|
|
||||||
|
|
||||||
static void lubbock_mask_irq(struct irq_data *d)
|
|
||||||
{
|
|
||||||
int lubbock_irq = (d->irq - LUBBOCK_IRQ(0));
|
|
||||||
LUB_IRQ_MASK_EN = (lubbock_irq_enabled &= ~(1 << lubbock_irq));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void lubbock_unmask_irq(struct irq_data *d)
|
|
||||||
{
|
|
||||||
int lubbock_irq = (d->irq - LUBBOCK_IRQ(0));
|
|
||||||
/* the irq can be acknowledged only if deasserted, so it's done here */
|
|
||||||
LUB_IRQ_SET_CLR &= ~(1 << lubbock_irq);
|
|
||||||
LUB_IRQ_MASK_EN = (lubbock_irq_enabled |= (1 << lubbock_irq));
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct irq_chip lubbock_irq_chip = {
|
|
||||||
.name = "FPGA",
|
|
||||||
.irq_ack = lubbock_mask_irq,
|
|
||||||
.irq_mask = lubbock_mask_irq,
|
|
||||||
.irq_unmask = lubbock_unmask_irq,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void lubbock_irq_handler(unsigned int irq, struct irq_desc *desc)
|
|
||||||
{
|
|
||||||
unsigned long pending = LUB_IRQ_SET_CLR & lubbock_irq_enabled;
|
|
||||||
do {
|
|
||||||
/* clear our parent irq */
|
|
||||||
desc->irq_data.chip->irq_ack(&desc->irq_data);
|
|
||||||
if (likely(pending)) {
|
|
||||||
irq = LUBBOCK_IRQ(0) + __ffs(pending);
|
|
||||||
generic_handle_irq(irq);
|
|
||||||
}
|
|
||||||
pending = LUB_IRQ_SET_CLR & lubbock_irq_enabled;
|
|
||||||
} while (pending);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init lubbock_init_irq(void)
|
|
||||||
{
|
|
||||||
int irq;
|
|
||||||
|
|
||||||
pxa25x_init_irq();
|
|
||||||
|
|
||||||
/* setup extra lubbock irqs */
|
|
||||||
for (irq = LUBBOCK_IRQ(0); irq <= LUBBOCK_LAST_IRQ; irq++) {
|
|
||||||
irq_set_chip_and_handler(irq, &lubbock_irq_chip,
|
|
||||||
handle_level_irq);
|
|
||||||
set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
|
|
||||||
}
|
|
||||||
|
|
||||||
irq_set_chained_handler(PXA_GPIO_TO_IRQ(0), lubbock_irq_handler);
|
|
||||||
irq_set_irq_type(PXA_GPIO_TO_IRQ(0), IRQ_TYPE_EDGE_FALLING);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
|
|
||||||
static void lubbock_irq_resume(void)
|
|
||||||
{
|
|
||||||
LUB_IRQ_MASK_EN = lubbock_irq_enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct syscore_ops lubbock_irq_syscore_ops = {
|
|
||||||
.resume = lubbock_irq_resume,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int __init lubbock_irq_device_init(void)
|
|
||||||
{
|
|
||||||
if (machine_is_lubbock()) {
|
|
||||||
register_syscore_ops(&lubbock_irq_syscore_ops);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
device_initcall(lubbock_irq_device_init);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int lubbock_udc_is_connected(void)
|
static int lubbock_udc_is_connected(void)
|
||||||
{
|
{
|
||||||
return (LUB_MISC_RD & (1 << 9)) == 0;
|
return (LUB_MISC_RD & (1 << 9)) == 0;
|
||||||
|
@ -383,11 +306,38 @@ static struct platform_device lubbock_flash_device[2] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct resource lubbock_cplds_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.start = LUBBOCK_FPGA_PHYS + 0xc0,
|
||||||
|
.end = LUBBOCK_FPGA_PHYS + 0xe0 - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.start = PXA_GPIO_TO_IRQ(0),
|
||||||
|
.end = PXA_GPIO_TO_IRQ(0),
|
||||||
|
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWEDGE,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
.start = LUBBOCK_IRQ(0),
|
||||||
|
.end = LUBBOCK_IRQ(6),
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device lubbock_cplds_device = {
|
||||||
|
.name = "pxa_cplds_irqs",
|
||||||
|
.id = -1,
|
||||||
|
.resource = &lubbock_cplds_resources[0],
|
||||||
|
.num_resources = 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
static struct platform_device *devices[] __initdata = {
|
static struct platform_device *devices[] __initdata = {
|
||||||
&sa1111_device,
|
&sa1111_device,
|
||||||
&smc91x_device,
|
&smc91x_device,
|
||||||
&lubbock_flash_device[0],
|
&lubbock_flash_device[0],
|
||||||
&lubbock_flash_device[1],
|
&lubbock_flash_device[1],
|
||||||
|
&lubbock_cplds_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pxafb_mode_info sharp_lm8v31_mode = {
|
static struct pxafb_mode_info sharp_lm8v31_mode = {
|
||||||
|
@ -648,7 +598,7 @@ MACHINE_START(LUBBOCK, "Intel DBPXA250 Development Platform (aka Lubbock)")
|
||||||
/* Maintainer: MontaVista Software Inc. */
|
/* Maintainer: MontaVista Software Inc. */
|
||||||
.map_io = lubbock_map_io,
|
.map_io = lubbock_map_io,
|
||||||
.nr_irqs = LUBBOCK_NR_IRQS,
|
.nr_irqs = LUBBOCK_NR_IRQS,
|
||||||
.init_irq = lubbock_init_irq,
|
.init_irq = pxa25x_init_irq,
|
||||||
.handle_irq = pxa25x_handle_irq,
|
.handle_irq = pxa25x_handle_irq,
|
||||||
.init_time = pxa_timer_init,
|
.init_time = pxa_timer_init,
|
||||||
.init_machine = lubbock_init,
|
.init_machine = lubbock_init,
|
||||||
|
|
Loading…
Reference in New Issue