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