sh: landisk updates.

Updates for the landisk board:

	- The push_switch framework was used.
	- landisk_pwb.c was divided into psw.c and gio.c.
	- pata_platform was supported in USL-5P.
	- irq.c was rewritten.
	- io.c was replaced with generic I/O routines.

Signed-off-by: kogiidena <kogiidena@eggplant.ddo.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
diff --git a/arch/sh/boards/landisk/irq.c b/arch/sh/boards/landisk/irq.c
index 3eba6d0..2586494 100644
--- a/arch/sh/boards/landisk/irq.c
+++ b/arch/sh/boards/landisk/irq.c
@@ -1,18 +1,16 @@
 /*
  * arch/sh/boards/landisk/irq.c
  *
+ * I-O DATA Device, Inc. LANDISK Support
+ *
+ * Copyright (C) 2005-2007 kogiidena
+ *
  * Copyright (C) 2001  Ian da Silva, Jeremy Siegel
  * Based largely on io_se.c.
  *
- * I/O routine for I-O Data Device, Inc. LANDISK.
- *
- * Initial version only to support LAN access; some
- * placeholder code from io_landisk.c left in with the
- * expectation of later SuperIO and PCMCIA access.
- */
-/*
- * modified by kogiidena
- * 2005.03.03
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
  */
 #include <linux/init.h>
 #include <linux/irq.h>
@@ -20,71 +18,27 @@
 #include <linux/io.h>
 #include <asm/landisk/iodata_landisk.h>
 
-static void enable_landisk_irq(unsigned int irq);
-static void disable_landisk_irq(unsigned int irq);
-
-/* shutdown is same as "disable" */
-#define shutdown_landisk_irq disable_landisk_irq
-
-static void ack_landisk_irq(unsigned int irq);
-static void end_landisk_irq(unsigned int irq);
-
-static unsigned int startup_landisk_irq(unsigned int irq)
-{
-	enable_landisk_irq(irq);
-	return 0;		/* never anything pending */
-}
-
 static void disable_landisk_irq(unsigned int irq)
 {
-	unsigned char val;
 	unsigned char mask = 0xff ^ (0x01 << (irq - 5));
 
-	/* Set the priority in IPR to 0 */
-	val = ctrl_inb(PA_IMASK);
-	val &= mask;
-	ctrl_outb(val, PA_IMASK);
+	ctrl_outb(ctrl_inb(PA_IMASK) & mask, PA_IMASK);
 }
 
 static void enable_landisk_irq(unsigned int irq)
 {
-	unsigned char val;
 	unsigned char value = (0x01 << (irq - 5));
 
-	/* Set priority in IPR back to original value */
-	val = ctrl_inb(PA_IMASK);
-	val |= value;
-	ctrl_outb(val, PA_IMASK);
+	ctrl_outb(ctrl_inb(PA_IMASK) | value, PA_IMASK);
 }
 
-static void ack_landisk_irq(unsigned int irq)
-{
-	disable_landisk_irq(irq);
-}
-
-static void end_landisk_irq(unsigned int irq)
-{
-	if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
-		enable_landisk_irq(irq);
-}
-
-static struct hw_interrupt_type landisk_irq_type = {
-	.typename = "LANDISK IRQ",
-	.startup = startup_landisk_irq,
-	.shutdown = shutdown_landisk_irq,
-	.enable = enable_landisk_irq,
-	.disable = disable_landisk_irq,
-	.ack = ack_landisk_irq,
-	.end = end_landisk_irq
+static struct irq_chip landisk_irq_chip __read_mostly = {
+	.name		= "LANDISK",
+	.mask		= disable_landisk_irq,
+	.unmask		= enable_landisk_irq,
+	.mask_ack	= disable_landisk_irq,
 };
 
-static void make_landisk_irq(unsigned int irq)
-{
-	disable_irq_nosync(irq);
-	irq_desc[irq].chip = &landisk_irq_type;
-	disable_landisk_irq(irq);
-}
-
 /*
  * Initialize IRQ setting
  */
@@ -92,6 +46,11 @@
 {
 	int i;
 
-	for (i = 5; i < 14; i++)
-		make_landisk_irq(i);
+	for (i = 5; i < 14; i++) {
+		disable_irq_nosync(i);
+		set_irq_chip_and_handler_name(i, &landisk_irq_chip,
+					      handle_level_irq, "level");
+		enable_landisk_irq(i);
+	}
+	ctrl_outb(0x00, PA_PWRINT_CLR);
 }