board-sh2007.c (3268B)
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};