linux/arch/sh/boards/board-sh2007.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * SH-2007 board support.
   4 *
   5 * Copyright (C) 2003, 2004  SUGIOKA Toshinobu
   6 * Copyright (C) 2010  Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
   7 */
   8#include <linux/init.h>
   9#include <linux/irq.h>
  10#include <linux/regulator/fixed.h>
  11#include <linux/regulator/machine.h>
  12#include <linux/smsc911x.h>
  13#include <linux/platform_device.h>
  14#include <linux/ata_platform.h>
  15#include <linux/io.h>
  16#include <asm/machvec.h>
  17#include <mach/sh2007.h>
  18
  19/* Dummy supplies, where voltage doesn't matter */
  20static struct regulator_consumer_supply dummy_supplies[] = {
  21        REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
  22        REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
  23        REGULATOR_SUPPLY("vddvario", "smsc911x.1"),
  24        REGULATOR_SUPPLY("vdd33a", "smsc911x.1"),
  25};
  26
  27struct smsc911x_platform_config smc911x_info = {
  28        .flags          = SMSC911X_USE_32BIT,
  29        .irq_polarity   = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
  30        .irq_type       = SMSC911X_IRQ_TYPE_PUSH_PULL,
  31};
  32
  33static struct resource smsc9118_0_resources[] = {
  34        [0] = {
  35                .start  = SMC0_BASE,
  36                .end    = SMC0_BASE + 0xff,
  37                .flags  = IORESOURCE_MEM,
  38        },
  39        [1] = {
  40                .start  = evt2irq(0x240),
  41                .end    = evt2irq(0x240),
  42                .flags  = IORESOURCE_IRQ,
  43        }
  44};
  45
  46static struct resource smsc9118_1_resources[] = {
  47        [0] = {
  48                .start  = SMC1_BASE,
  49                .end    = SMC1_BASE + 0xff,
  50                .flags  = IORESOURCE_MEM,
  51        },
  52        [1] = {
  53                .start  = evt2irq(0x280),
  54                .end    = evt2irq(0x280),
  55                .flags  = IORESOURCE_IRQ,
  56        }
  57};
  58
  59static struct platform_device smsc9118_0_device = {
  60        .name           = "smsc911x",
  61        .id             = 0,
  62        .num_resources  = ARRAY_SIZE(smsc9118_0_resources),
  63        .resource       = smsc9118_0_resources,
  64        .dev = {
  65                .platform_data = &smc911x_info,
  66        },
  67};
  68
  69static struct platform_device smsc9118_1_device = {
  70        .name           = "smsc911x",
  71        .id             = 1,
  72        .num_resources  = ARRAY_SIZE(smsc9118_1_resources),
  73        .resource       = smsc9118_1_resources,
  74        .dev = {
  75                .platform_data = &smc911x_info,
  76        },
  77};
  78
  79static struct resource cf_resources[] = {
  80        [0] = {
  81                .start  = CF_BASE + CF_OFFSET,
  82                .end    = CF_BASE + CF_OFFSET + 0x0f,
  83                .flags  = IORESOURCE_MEM,
  84        },
  85        [1] = {
  86                .start  = CF_BASE + CF_OFFSET + 0x206,
  87                .end    = CF_BASE + CF_OFFSET + 0x20f,
  88                .flags  = IORESOURCE_MEM,
  89        },
  90        [2] = {
  91                .start  = evt2irq(0x2c0),
  92                .end    = evt2irq(0x2c0),
  93                .flags  = IORESOURCE_IRQ,
  94        },
  95};
  96
  97static struct platform_device cf_device  = {
  98        .name           = "pata_platform",
  99        .id             = 0,
 100        .num_resources  = ARRAY_SIZE(cf_resources),
 101        .resource       = cf_resources,
 102};
 103
 104static struct platform_device *sh2007_devices[] __initdata = {
 105        &smsc9118_0_device,
 106        &smsc9118_1_device,
 107        &cf_device,
 108};
 109
 110static int __init sh2007_io_init(void)
 111{
 112        regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
 113
 114        platform_add_devices(sh2007_devices, ARRAY_SIZE(sh2007_devices));
 115        return 0;
 116}
 117subsys_initcall(sh2007_io_init);
 118
 119static void __init sh2007_init_irq(void)
 120{
 121        plat_irq_setup_pins(IRQ_MODE_IRQ);
 122}
 123
 124/*
 125 * Initialize the board
 126 */
 127static void __init sh2007_setup(char **cmdline_p)
 128{
 129        pr_info("SH-2007 Setup...");
 130
 131        /* setup wait control registers for area 5 */
 132        __raw_writel(CS5BCR_D, CS5BCR);
 133        __raw_writel(CS5WCR_D, CS5WCR);
 134        __raw_writel(CS5PCR_D, CS5PCR);
 135
 136        pr_cont(" done.\n");
 137}
 138
 139/*
 140 * The Machine Vector
 141 */
 142struct sh_machine_vector mv_sh2007 __initmv = {
 143        .mv_setup               = sh2007_setup,
 144        .mv_name                = "sh2007",
 145        .mv_init_irq            = sh2007_init_irq,
 146};
 147