lkml.org 
[lkml]   [2015]   [Sep]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.4 072/146] ARM: pxa: lubbock: use new pxa_cplds driver
    Date
    From: Robert Jarzmik <robert.jarzmik@free.fr>

    3.4.109-rc1 review patch. If anyone has any objections, please let me know.

    ------------------


    commit fc9e38c0f4d38bfc68b405cf48365d65f7b6319e upstream.

    As the interrupt handling was transferred to the pxa_cplds driver,
    make the switch in lubbock platform code.

    Fixes: 157d2644cb0c ("ARM: pxa: change gpio to platform device")
    Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
    Acked-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Zefan Li <lizefan@huawei.com>
    ---
    arch/arm/mach-pxa/include/mach/lubbock.h | 7 +-
    arch/arm/mach-pxa/lubbock.c | 108 +++++++++----------------------
    2 files changed, 33 insertions(+), 82 deletions(-)

    diff --git a/arch/arm/mach-pxa/include/mach/lubbock.h b/arch/arm/mach-pxa/include/mach/lubbock.h
    index 2a086e8..b20b97e 100644
    --- a/arch/arm/mach-pxa/include/mach/lubbock.h
    +++ b/arch/arm/mach-pxa/include/mach/lubbock.h
    @@ -35,7 +35,9 @@
    #define LUB_GP __LUB_REG(LUBBOCK_FPGA_PHYS + 0x100)

    /* 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_SA1111_IRQ LUBBOCK_IRQ(1)
    #define LUBBOCK_USB_IRQ LUBBOCK_IRQ(2) /* usb connect */
    @@ -45,8 +47,7 @@
    #define LUBBOCK_USB_DISC_IRQ LUBBOCK_IRQ(6) /* usb disconnect */
    #define LUBBOCK_LAST_IRQ LUBBOCK_IRQ(6)

    -#define LUBBOCK_SA1111_IRQ_BASE (IRQ_BOARD_START + 16)
    -#define LUBBOCK_NR_IRQS (IRQ_BOARD_START + 16 + 55)
    +#define LUBBOCK_SA1111_IRQ_BASE (LUBBOCK_NR_IRQS + 32)

    #ifndef __ASSEMBLY__
    extern void lubbock_set_misc_wr(unsigned int mask, unsigned int set);
    diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c
    index 6bb3f47..799f31f 100644
    --- a/arch/arm/mach-pxa/lubbock.c
    +++ b/arch/arm/mach-pxa/lubbock.c
    @@ -12,6 +12,7 @@
    * published by the Free Software Foundation.
    */
    #include <linux/gpio.h>
    +#include <linux/gpio/machine.h>
    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/init.h>
    @@ -120,84 +121,6 @@ void lubbock_set_misc_wr(unsigned int mask, unsigned int set)
    }
    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)
    {
    return (LUB_MISC_RD & (1 << 9)) == 0;
    @@ -380,11 +303,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 = {
    &sa1111_device,
    &smc91x_device,
    &lubbock_flash_device[0],
    &lubbock_flash_device[1],
    + &lubbock_cplds_device,
    };

    static struct pxafb_mode_info sharp_lm8v31_mode = {
    @@ -553,7 +503,7 @@ MACHINE_START(LUBBOCK, "Intel DBPXA250 Development Platform (aka Lubbock)")
    /* Maintainer: MontaVista Software Inc. */
    .map_io = lubbock_map_io,
    .nr_irqs = LUBBOCK_NR_IRQS,
    - .init_irq = lubbock_init_irq,
    + .init_irq = pxa25x_init_irq,
    .handle_irq = pxa25x_handle_irq,
    .timer = &pxa_timer,
    .init_machine = lubbock_init,
    --
    1.9.1


    \
     
     \ /
      Last update: 2015-09-15 12:01    [W:4.106 / U:0.580 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site