ARM: sa11x0: neponset: add driver .owner initializer
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-sa1100 / neponset.c
index b4fa53a1427e437a8592c9d4f8f947ba32742ad2..1beaa0e5bf3f3bd39f656003c4bb8ea6b36680c7 100644 (file)
@@ -2,24 +2,91 @@
  * linux/arch/arm/mach-sa1100/neponset.c
  *
  */
-#include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/tty.h>
 #include <linux/ioport.h>
-#include <linux/serial_core.h>
+#include <linux/kernel.h>
 #include <linux/platform_device.h>
+#include <linux/serial_core.h>
 
-#include <mach/hardware.h>
 #include <asm/mach-types.h>
 #include <asm/irq.h>
 #include <asm/mach/map.h>
 #include <asm/mach/irq.h>
 #include <asm/mach/serial_sa1100.h>
-#include <mach/assabet.h>
-#include <mach/neponset.h>
 #include <asm/hardware/sa1111.h>
 #include <asm/sizes.h>
 
+#include <mach/hardware.h>
+#include <mach/assabet.h>
+#include <mach/neponset.h>
+
+void neponset_ncr_frob(unsigned int mask, unsigned int val)
+{
+       unsigned long flags;
+
+       local_irq_save(flags);
+       NCR_0 = (NCR_0 & ~mask) | val;
+       local_irq_restore(flags);
+}
+
+static void neponset_set_mctrl(struct uart_port *port, u_int mctrl)
+{
+       u_int mdm_ctl0 = MDM_CTL_0;
+
+       if (port->mapbase == _Ser1UTCR0) {
+               if (mctrl & TIOCM_RTS)
+                       mdm_ctl0 &= ~MDM_CTL0_RTS2;
+               else
+                       mdm_ctl0 |= MDM_CTL0_RTS2;
+
+               if (mctrl & TIOCM_DTR)
+                       mdm_ctl0 &= ~MDM_CTL0_DTR2;
+               else
+                       mdm_ctl0 |= MDM_CTL0_DTR2;
+       } else if (port->mapbase == _Ser3UTCR0) {
+               if (mctrl & TIOCM_RTS)
+                       mdm_ctl0 &= ~MDM_CTL0_RTS1;
+               else
+                       mdm_ctl0 |= MDM_CTL0_RTS1;
+
+               if (mctrl & TIOCM_DTR)
+                       mdm_ctl0 &= ~MDM_CTL0_DTR1;
+               else
+                       mdm_ctl0 |= MDM_CTL0_DTR1;
+       }
+
+       MDM_CTL_0 = mdm_ctl0;
+}
+
+static u_int neponset_get_mctrl(struct uart_port *port)
+{
+       u_int ret = TIOCM_CD | TIOCM_CTS | TIOCM_DSR;
+       u_int mdm_ctl1 = MDM_CTL_1;
+
+       if (port->mapbase == _Ser1UTCR0) {
+               if (mdm_ctl1 & MDM_CTL1_DCD2)
+                       ret &= ~TIOCM_CD;
+               if (mdm_ctl1 & MDM_CTL1_CTS2)
+                       ret &= ~TIOCM_CTS;
+               if (mdm_ctl1 & MDM_CTL1_DSR2)
+                       ret &= ~TIOCM_DSR;
+       } else if (port->mapbase == _Ser3UTCR0) {
+               if (mdm_ctl1 & MDM_CTL1_DCD1)
+                       ret &= ~TIOCM_CD;
+               if (mdm_ctl1 & MDM_CTL1_CTS1)
+                       ret &= ~TIOCM_CTS;
+               if (mdm_ctl1 & MDM_CTL1_DSR1)
+                       ret &= ~TIOCM_DSR;
+       }
+
+       return ret;
+}
+
+static struct sa1100_port_fns neponset_port_fns __devinitdata = {
+       .set_mctrl      = neponset_set_mctrl,
+       .get_mctrl      = neponset_get_mctrl,
+};
+
 /*
  * Install handler for Neponset IRQ.  Note that we have to loop here
  * since the ETHERNET and USAR IRQs are level based, and we need to
@@ -80,62 +147,55 @@ neponset_irq_handler(unsigned int irq, struct irq_desc *desc)
        }
 }
 
-static void neponset_set_mctrl(struct uart_port *port, u_int mctrl)
+/*
+ * Yes, we really do not have any kind of masking or unmasking
+ */
+static void nochip_noop(struct irq_data *irq)
 {
-       u_int mdm_ctl0 = MDM_CTL_0;
-
-       if (port->mapbase == _Ser1UTCR0) {
-               if (mctrl & TIOCM_RTS)
-                       mdm_ctl0 &= ~MDM_CTL0_RTS2;
-               else
-                       mdm_ctl0 |= MDM_CTL0_RTS2;
+}
 
-               if (mctrl & TIOCM_DTR)
-                       mdm_ctl0 &= ~MDM_CTL0_DTR2;
-               else
-                       mdm_ctl0 |= MDM_CTL0_DTR2;
-       } else if (port->mapbase == _Ser3UTCR0) {
-               if (mctrl & TIOCM_RTS)
-                       mdm_ctl0 &= ~MDM_CTL0_RTS1;
-               else
-                       mdm_ctl0 |= MDM_CTL0_RTS1;
+static struct irq_chip nochip = {
+       .name = "neponset",
+       .irq_ack = nochip_noop,
+       .irq_mask = nochip_noop,
+       .irq_unmask = nochip_noop,
+};
 
-               if (mctrl & TIOCM_DTR)
-                       mdm_ctl0 &= ~MDM_CTL0_DTR1;
-               else
-                       mdm_ctl0 |= MDM_CTL0_DTR1;
-       }
+static struct resource sa1111_resources[] = {
+       [0] = DEFINE_RES_MEM(0x40000000, SZ_8K),
+       [1] = DEFINE_RES_IRQ(IRQ_NEPONSET_SA1111),
+};
 
-       MDM_CTL_0 = mdm_ctl0;
-}
+static struct sa1111_platform_data sa1111_info = {
+       .irq_base       = IRQ_BOARD_END,
+};
 
-static u_int neponset_get_mctrl(struct uart_port *port)
-{
-       u_int ret = TIOCM_CD | TIOCM_CTS | TIOCM_DSR;
-       u_int mdm_ctl1 = MDM_CTL_1;
+static u64 sa1111_dmamask = 0xffffffffUL;
 
-       if (port->mapbase == _Ser1UTCR0) {
-               if (mdm_ctl1 & MDM_CTL1_DCD2)
-                       ret &= ~TIOCM_CD;
-               if (mdm_ctl1 & MDM_CTL1_CTS2)
-                       ret &= ~TIOCM_CTS;
-               if (mdm_ctl1 & MDM_CTL1_DSR2)
-                       ret &= ~TIOCM_DSR;
-       } else if (port->mapbase == _Ser3UTCR0) {
-               if (mdm_ctl1 & MDM_CTL1_DCD1)
-                       ret &= ~TIOCM_CD;
-               if (mdm_ctl1 & MDM_CTL1_CTS1)
-                       ret &= ~TIOCM_CTS;
-               if (mdm_ctl1 & MDM_CTL1_DSR1)
-                       ret &= ~TIOCM_DSR;
-       }
+static struct platform_device sa1111_device = {
+       .name           = "sa1111",
+       .id             = 0,
+       .dev            = {
+               .dma_mask = &sa1111_dmamask,
+               .coherent_dma_mask = 0xffffffff,
+               .platform_data = &sa1111_info,
+       },
+       .num_resources  = ARRAY_SIZE(sa1111_resources),
+       .resource       = sa1111_resources,
+};
 
-       return ret;
-}
+static struct resource smc91x_resources[] = {
+       [0] = DEFINE_RES_MEM_NAMED(SA1100_CS3_PHYS, 0x02000000, "smc91x-regs"),
+       [1] = DEFINE_RES_IRQ(IRQ_NEPONSET_SMC9196),
+       [2] = DEFINE_RES_MEM_NAMED(SA1100_CS3_PHYS + 0x02000000,
+                       0x02000000, "smc91x-attrib"),
+};
 
-static struct sa1100_port_fns neponset_port_fns __devinitdata = {
-       .set_mctrl      = neponset_set_mctrl,
-       .get_mctrl      = neponset_get_mctrl,
+static struct platform_device smc91x_device = {
+       .name           = "smc91x",
+       .id             = 0,
+       .num_resources  = ARRAY_SIZE(smc91x_resources),
+       .resource       = smc91x_resources,
 };
 
 static int __devinit neponset_probe(struct platform_device *dev)
@@ -161,10 +221,13 @@ static int __devinit neponset_probe(struct platform_device *dev)
         * Setup other Neponset IRQs.  SA1111 will be done by the
         * generic SA1111 code.
         */
-       irq_set_handler(IRQ_NEPONSET_SMC9196, handle_simple_irq);
+       irq_set_chip_and_handler(IRQ_NEPONSET_SMC9196, &nochip,
+               handle_simple_irq);
        set_irq_flags(IRQ_NEPONSET_SMC9196, IRQF_VALID | IRQF_PROBE);
-       irq_set_handler(IRQ_NEPONSET_USAR, handle_simple_irq);
+       irq_set_chip_and_handler(IRQ_NEPONSET_USAR, &nochip,
+               handle_simple_irq);
        set_irq_flags(IRQ_NEPONSET_USAR, IRQF_VALID | IRQF_PROBE);
+       irq_set_chip(IRQ_NEPONSET_SA1111, &nochip);
 
        /*
         * Disable GPIO 0/1 drivers so the buttons work on the module.
@@ -209,15 +272,12 @@ static struct platform_driver neponset_device_driver = {
        .resume         = neponset_resume,
        .driver         = {
                .name   = "neponset",
+               .owner  = THIS_MODULE,
        },
 };
 
 static struct resource neponset_resources[] = {
-       [0] = {
-               .start  = 0x10000000,
-               .end    = 0x17ffffff,
-               .flags  = IORESOURCE_MEM,
-       },
+       [0] = DEFINE_RES_MEM(0x10000000, 0x08000000),
 };
 
 static struct platform_device neponset_device = {
@@ -227,64 +287,6 @@ static struct platform_device neponset_device = {
        .resource       = neponset_resources,
 };
 
-static struct resource sa1111_resources[] = {
-       [0] = {
-               .start  = 0x40000000,
-               .end    = 0x40001fff,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = IRQ_NEPONSET_SA1111,
-               .end    = IRQ_NEPONSET_SA1111,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct sa1111_platform_data sa1111_info = {
-       .irq_base       = IRQ_BOARD_END,
-};
-
-static u64 sa1111_dmamask = 0xffffffffUL;
-
-static struct platform_device sa1111_device = {
-       .name           = "sa1111",
-       .id             = 0,
-       .dev            = {
-               .dma_mask = &sa1111_dmamask,
-               .coherent_dma_mask = 0xffffffff,
-               .platform_data = &sa1111_info,
-       },
-       .num_resources  = ARRAY_SIZE(sa1111_resources),
-       .resource       = sa1111_resources,
-};
-
-static struct resource smc91x_resources[] = {
-       [0] = {
-               .name   = "smc91x-regs",
-               .start  = SA1100_CS3_PHYS,
-               .end    = SA1100_CS3_PHYS + 0x01ffffff,
-               .flags  = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start  = IRQ_NEPONSET_SMC9196,
-               .end    = IRQ_NEPONSET_SMC9196,
-               .flags  = IORESOURCE_IRQ,
-       },
-       [2] = {
-               .name   = "smc91x-attrib",
-               .start  = SA1100_CS3_PHYS + 0x02000000,
-               .end    = SA1100_CS3_PHYS + 0x03ffffff,
-               .flags  = IORESOURCE_MEM,
-       },
-};
-
-static struct platform_device smc91x_device = {
-       .name           = "smc91x",
-       .id             = 0,
-       .num_resources  = ARRAY_SIZE(smc91x_resources),
-       .resource       = smc91x_resources,
-};
-
 static struct platform_device *devices[] __initdata = {
        &neponset_device,
        &sa1111_device,