Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / m32r / kernel / setup_opsput.c
index 84315e3..548e8fc 100644 (file)
@@ -3,7 +3,7 @@
  *
  *  Setup routines for Renesas OPSPUT Board
  *
- *  Copyright (c) 2002-2004
+ *  Copyright (c) 2002-2005
  *     Hiroyuki Kondo, Hirokazu Takata,
  *      Hitoshi Yamamoto, Takeo Takahashi, Mamoru Sakugawa
  *
@@ -16,7 +16,7 @@
 #include <linux/irq.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 #include <asm/system.h>
 #include <asm/m32r.h>
  */
 #define irq2port(x) (M32R_ICU_CR1_PORTL + ((x - 1) * sizeof(unsigned long)))
 
-#ifndef CONFIG_SMP
-typedef struct {
-       unsigned long icucr;  /* ICU Control Register */
-} icu_data_t;
-#endif /* CONFIG_SMP */
-
-static icu_data_t icu_data[OPSPUT_NUM_CPU_IRQ];
+icu_data_t icu_data[OPSPUT_NUM_CPU_IRQ];
 
 static void disable_opsput_irq(unsigned int irq)
 {
@@ -79,13 +73,13 @@ static void shutdown_opsput_irq(unsigned int irq)
 
 static struct hw_interrupt_type opsput_irq_type =
 {
-       "OPSPUT-IRQ",
-       startup_opsput_irq,
-       shutdown_opsput_irq,
-       enable_opsput_irq,
-       disable_opsput_irq,
-       mask_and_ack_opsput,
-       end_opsput_irq
+       .typename = "OPSPUT-IRQ",
+       .startup = startup_opsput_irq,
+       .shutdown = shutdown_opsput_irq,
+       .enable = enable_opsput_irq,
+       .disable = disable_opsput_irq,
+       .ack = mask_and_ack_opsput,
+       .end = end_opsput_irq
 };
 
 /*
@@ -156,13 +150,13 @@ static void shutdown_opsput_pld_irq(unsigned int irq)
 
 static struct hw_interrupt_type opsput_pld_irq_type =
 {
-       "OPSPUT-PLD-IRQ",
-       startup_opsput_pld_irq,
-       shutdown_opsput_pld_irq,
-       enable_opsput_pld_irq,
-       disable_opsput_pld_irq,
-       mask_and_ack_opsput_pld,
-       end_opsput_pld_irq
+       .typename = "OPSPUT-PLD-IRQ",
+       .startup = startup_opsput_pld_irq,
+       .shutdown = shutdown_opsput_pld_irq,
+       .enable = enable_opsput_pld_irq,
+       .disable = disable_opsput_pld_irq,
+       .ack = mask_and_ack_opsput_pld,
+       .end = end_opsput_pld_irq
 };
 
 /*
@@ -439,7 +433,7 @@ void __init init_IRQ(void)
        icu_data[M32R_IRQ_INT2].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD01;
        enable_opsput_irq(M32R_IRQ_INT2);
 
-//#if defined(CONFIG_VIDEO_M32R_AR)
+#if defined(CONFIG_VIDEO_M32R_AR)
        /*
         * INT3# is used for AR
         */
@@ -449,9 +443,11 @@ void __init init_IRQ(void)
        irq_desc[M32R_IRQ_INT3].depth = 1;
        icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10;
        disable_opsput_irq(M32R_IRQ_INT3);
-//#endif       /* CONFIG_VIDEO_M32R_AR */
+#endif /* CONFIG_VIDEO_M32R_AR */
 }
 
+#if defined(CONFIG_SMC91X)
+
 #define LAN_IOSTART     0x300
 #define LAN_IOEND       0x320
 static struct resource smc91x_resources[] = {
@@ -473,10 +469,55 @@ static struct platform_device smc91x_device = {
        .num_resources  = ARRAY_SIZE(smc91x_resources),
        .resource       = smc91x_resources,
 };
+#endif
+
+#if defined(CONFIG_FB_S1D13XXX)
+
+#include <video/s1d13xxxfb.h>
+#include <asm/s1d13806.h>
+
+static struct s1d13xxxfb_pdata s1d13xxxfb_data = {
+       .initregs               = s1d13xxxfb_initregs,
+       .initregssize           = ARRAY_SIZE(s1d13xxxfb_initregs),
+       .platform_init_video    = NULL,
+#ifdef CONFIG_PM
+       .platform_suspend_video = NULL,
+       .platform_resume_video  = NULL,
+#endif
+};
+
+static struct resource s1d13xxxfb_resources[] = {
+       [0] = {
+               .start  = 0x10600000UL,
+               .end    = 0x1073FFFFUL,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = 0x10400000UL,
+               .end    = 0x104001FFUL,
+               .flags  = IORESOURCE_MEM,
+       }
+};
+
+static struct platform_device s1d13xxxfb_device = {
+       .name           = S1D_DEVICENAME,
+       .id             = 0,
+       .dev            = {
+               .platform_data  = &s1d13xxxfb_data,
+       },
+       .num_resources  = ARRAY_SIZE(s1d13xxxfb_resources),
+       .resource       = s1d13xxxfb_resources,
+};
+#endif
 
 static int __init platform_init(void)
 {
+#if defined(CONFIG_SMC91X)
        platform_device_register(&smc91x_device);
+#endif
+#if defined(CONFIG_FB_S1D13XXX)
+       platform_device_register(&s1d13xxxfb_device);
+#endif
        return 0;
 }
 arch_initcall(platform_init);