root/arch/sh/boards/mach-x3proto/setup.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. x3proto_init_irq
  2. x3proto_devices_setup
  3. x3proto_setup

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * arch/sh/boards/mach-x3proto/setup.c
   4  *
   5  * Renesas SH-X3 Prototype Board Support.
   6  *
   7  * Copyright (C) 2007 - 2010  Paul Mundt
   8  */
   9 #include <linux/init.h>
  10 #include <linux/platform_device.h>
  11 #include <linux/kernel.h>
  12 #include <linux/io.h>
  13 #include <linux/smc91x.h>
  14 #include <linux/irq.h>
  15 #include <linux/interrupt.h>
  16 #include <linux/input.h>
  17 #include <linux/usb/r8a66597.h>
  18 #include <linux/usb/m66592.h>
  19 #include <linux/gpio.h>
  20 #include <linux/gpio_keys.h>
  21 #include <mach/ilsel.h>
  22 #include <mach/hardware.h>
  23 #include <asm/smp-ops.h>
  24 
  25 static struct resource heartbeat_resources[] = {
  26         [0] = {
  27                 .start  = 0xb8140020,
  28                 .end    = 0xb8140020,
  29                 .flags  = IORESOURCE_MEM,
  30         },
  31 };
  32 
  33 static struct platform_device heartbeat_device = {
  34         .name           = "heartbeat",
  35         .id             = -1,
  36         .num_resources  = ARRAY_SIZE(heartbeat_resources),
  37         .resource       = heartbeat_resources,
  38 };
  39 
  40 static struct smc91x_platdata smc91x_info = {
  41         .flags  = SMC91X_USE_16BIT | SMC91X_NOWAIT,
  42 };
  43 
  44 static struct resource smc91x_resources[] = {
  45         [0] = {
  46                 .start          = 0x18000300,
  47                 .end            = 0x18000300 + 0x10 - 1,
  48                 .flags          = IORESOURCE_MEM,
  49         },
  50         [1] = {
  51                 /* Filled in by ilsel */
  52                 .flags          = IORESOURCE_IRQ,
  53         },
  54 };
  55 
  56 static struct platform_device smc91x_device = {
  57         .name           = "smc91x",
  58         .id             = -1,
  59         .resource       = smc91x_resources,
  60         .num_resources  = ARRAY_SIZE(smc91x_resources),
  61         .dev    = {
  62                 .platform_data = &smc91x_info,
  63         },
  64 };
  65 
  66 static struct r8a66597_platdata r8a66597_data = {
  67         .xtal = R8A66597_PLATDATA_XTAL_12MHZ,
  68         .vif = 1,
  69 };
  70 
  71 static struct resource r8a66597_usb_host_resources[] = {
  72         [0] = {
  73                 .start  = 0x18040000,
  74                 .end    = 0x18080000 - 1,
  75                 .flags  = IORESOURCE_MEM,
  76         },
  77         [1] = {
  78                 /* Filled in by ilsel */
  79                 .flags  = IORESOURCE_IRQ | IRQF_TRIGGER_LOW,
  80         },
  81 };
  82 
  83 static struct platform_device r8a66597_usb_host_device = {
  84         .name           = "r8a66597_hcd",
  85         .id             = -1,
  86         .dev = {
  87                 .dma_mask               = NULL,         /* don't use dma */
  88                 .coherent_dma_mask      = 0xffffffff,
  89                 .platform_data          = &r8a66597_data,
  90         },
  91         .num_resources  = ARRAY_SIZE(r8a66597_usb_host_resources),
  92         .resource       = r8a66597_usb_host_resources,
  93 };
  94 
  95 static struct m66592_platdata usbf_platdata = {
  96         .xtal = M66592_PLATDATA_XTAL_24MHZ,
  97         .vif = 1,
  98 };
  99 
 100 static struct resource m66592_usb_peripheral_resources[] = {
 101         [0] = {
 102                 .name   = "m66592_udc",
 103                 .start  = 0x18080000,
 104                 .end    = 0x180c0000 - 1,
 105                 .flags  = IORESOURCE_MEM,
 106         },
 107         [1] = {
 108                 .name   = "m66592_udc",
 109                 /* Filled in by ilsel */
 110                 .flags  = IORESOURCE_IRQ,
 111         },
 112 };
 113 
 114 static struct platform_device m66592_usb_peripheral_device = {
 115         .name           = "m66592_udc",
 116         .id             = -1,
 117         .dev = {
 118                 .dma_mask               = NULL,         /* don't use dma */
 119                 .coherent_dma_mask      = 0xffffffff,
 120                 .platform_data          = &usbf_platdata,
 121         },
 122         .num_resources  = ARRAY_SIZE(m66592_usb_peripheral_resources),
 123         .resource       = m66592_usb_peripheral_resources,
 124 };
 125 
 126 static struct gpio_keys_button baseboard_buttons[NR_BASEBOARD_GPIOS] = {
 127         {
 128                 .desc           = "key44",
 129                 .code           = KEY_POWER,
 130                 .active_low     = 1,
 131                 .wakeup         = 1,
 132         }, {
 133                 .desc           = "key43",
 134                 .code           = KEY_SUSPEND,
 135                 .active_low     = 1,
 136                 .wakeup         = 1,
 137         }, {
 138                 .desc           = "key42",
 139                 .code           = KEY_KATAKANAHIRAGANA,
 140                 .active_low     = 1,
 141         }, {
 142                 .desc           = "key41",
 143                 .code           = KEY_SWITCHVIDEOMODE,
 144                 .active_low     = 1,
 145         }, {
 146                 .desc           = "key34",
 147                 .code           = KEY_F12,
 148                 .active_low     = 1,
 149         }, {
 150                 .desc           = "key33",
 151                 .code           = KEY_F11,
 152                 .active_low     = 1,
 153         }, {
 154                 .desc           = "key32",
 155                 .code           = KEY_F10,
 156                 .active_low     = 1,
 157         }, {
 158                 .desc           = "key31",
 159                 .code           = KEY_F9,
 160                 .active_low     = 1,
 161         }, {
 162                 .desc           = "key24",
 163                 .code           = KEY_F8,
 164                 .active_low     = 1,
 165         }, {
 166                 .desc           = "key23",
 167                 .code           = KEY_F7,
 168                 .active_low     = 1,
 169         }, {
 170                 .desc           = "key22",
 171                 .code           = KEY_F6,
 172                 .active_low     = 1,
 173         }, {
 174                 .desc           = "key21",
 175                 .code           = KEY_F5,
 176                 .active_low     = 1,
 177         }, {
 178                 .desc           = "key14",
 179                 .code           = KEY_F4,
 180                 .active_low     = 1,
 181         }, {
 182                 .desc           = "key13",
 183                 .code           = KEY_F3,
 184                 .active_low     = 1,
 185         }, {
 186                 .desc           = "key12",
 187                 .code           = KEY_F2,
 188                 .active_low     = 1,
 189         }, {
 190                 .desc           = "key11",
 191                 .code           = KEY_F1,
 192                 .active_low     = 1,
 193         },
 194 };
 195 
 196 static struct gpio_keys_platform_data baseboard_buttons_data = {
 197         .buttons        = baseboard_buttons,
 198         .nbuttons       = ARRAY_SIZE(baseboard_buttons),
 199 };
 200 
 201 static struct platform_device baseboard_buttons_device = {
 202         .name           = "gpio-keys",
 203         .id             = -1,
 204         .dev            = {
 205                 .platform_data  = &baseboard_buttons_data,
 206         },
 207 };
 208 
 209 static struct platform_device *x3proto_devices[] __initdata = {
 210         &heartbeat_device,
 211         &smc91x_device,
 212         &r8a66597_usb_host_device,
 213         &m66592_usb_peripheral_device,
 214         &baseboard_buttons_device,
 215 };
 216 
 217 static void __init x3proto_init_irq(void)
 218 {
 219         plat_irq_setup_pins(IRQ_MODE_IRL3210);
 220 
 221         /* Set ICR0.LVLMODE */
 222         __raw_writel(__raw_readl(0xfe410000) | (1 << 21), 0xfe410000);
 223 }
 224 
 225 static int __init x3proto_devices_setup(void)
 226 {
 227         int ret, i;
 228 
 229         /*
 230          * IRLs are only needed for ILSEL mappings, so flip over the INTC
 231          * pins at a later point to enable the GPIOs to settle.
 232          */
 233         x3proto_init_irq();
 234 
 235         /*
 236          * Now that ILSELs are available, set up the baseboard GPIOs.
 237          */
 238         ret = x3proto_gpio_setup();
 239         if (unlikely(ret))
 240                 return ret;
 241 
 242         /*
 243          * Propagate dynamic GPIOs for the baseboard button device.
 244          */
 245         for (i = 0; i < ARRAY_SIZE(baseboard_buttons); i++)
 246                 baseboard_buttons[i].gpio = x3proto_gpio_chip.base + i;
 247 
 248         r8a66597_usb_host_resources[1].start =
 249                 r8a66597_usb_host_resources[1].end = ilsel_enable(ILSEL_USBH_I);
 250 
 251         m66592_usb_peripheral_resources[1].start =
 252                 m66592_usb_peripheral_resources[1].end = ilsel_enable(ILSEL_USBP_I);
 253 
 254         smc91x_resources[1].start =
 255                 smc91x_resources[1].end = ilsel_enable(ILSEL_LAN);
 256 
 257         return platform_add_devices(x3proto_devices,
 258                                     ARRAY_SIZE(x3proto_devices));
 259 }
 260 device_initcall(x3proto_devices_setup);
 261 
 262 static void __init x3proto_setup(char **cmdline_p)
 263 {
 264         register_smp_ops(&shx3_smp_ops);
 265 }
 266 
 267 static struct sh_machine_vector mv_x3proto __initmv = {
 268         .mv_name                = "x3proto",
 269         .mv_setup               = x3proto_setup,
 270 };

/* [<][>][^][v][top][bottom][index][help] */