1/* 2 * linux/arch/sh/boards/se/7722/setup.c 3 * 4 * Copyright (C) 2007 Nobuhiro Iwamatsu 5 * 6 * Hitachi UL SolutionEngine 7722 Support. 7 * 8 * This file is subject to the terms and conditions of the GNU General Public 9 * License. See the file "COPYING" in the main directory of this archive 10 * for more details. 11 * 12 */ 13#include <linux/init.h> 14#include <linux/platform_device.h> 15#include <linux/pata_platform.h> 16#include <asm/machvec.h> 17#include <asm/se7722.h> 18#include <asm/io.h> 19 20/* Heartbeat */ 21static unsigned char heartbeat_bit_pos[] = { 0, 1, 2, 3, 4, 5, 6, 7 }; 22 23static struct resource heartbeat_resources[] = { 24 [0] = { 25 .start = PA_LED, 26 .end = PA_LED + ARRAY_SIZE(heartbeat_bit_pos) - 1, 27 .flags = IORESOURCE_MEM, 28 }, 29}; 30 31static struct platform_device heartbeat_device = { 32 .name = "heartbeat", 33 .id = -1, 34 .dev = { 35 .platform_data = heartbeat_bit_pos, 36 }, 37 .num_resources = ARRAY_SIZE(heartbeat_resources), 38 .resource = heartbeat_resources, 39}; 40 41/* SMC91x */ 42static struct resource smc91x_eth_resources[] = { 43 [0] = { 44 .name = "smc91x-regs" , 45 .start = PA_LAN + 0x300, 46 .end = PA_LAN + 0x300 + 0x10 , 47 .flags = IORESOURCE_MEM, 48 }, 49 [1] = { 50 .start = SMC_IRQ, 51 .end = SMC_IRQ, 52 .flags = IORESOURCE_IRQ, 53 }, 54}; 55 56static struct platform_device smc91x_eth_device = { 57 .name = "smc91x", 58 .id = 0, 59 .dev = { 60 .dma_mask = NULL, /* don't use dma */ 61 .coherent_dma_mask = 0xffffffff, 62 }, 63 .num_resources = ARRAY_SIZE(smc91x_eth_resources), 64 .resource = smc91x_eth_resources, 65}; 66 67static struct resource cf_ide_resources[] = { 68 [0] = { 69 .start = PA_MRSHPC_IO + 0x1f0, 70 .end = PA_MRSHPC_IO + 0x1f0 + 8 , 71 .flags = IORESOURCE_IO, 72 }, 73 [1] = { 74 .start = PA_MRSHPC_IO + 0x1f0 + 0x206, 75 .end = PA_MRSHPC_IO + 0x1f0 +8 + 0x206 + 8, 76 .flags = IORESOURCE_IO, 77 }, 78 [2] = { 79 .start = MRSHPC_IRQ0, 80 .flags = IORESOURCE_IRQ, 81 }, 82}; 83 84static struct platform_device cf_ide_device = { 85 .name = "pata_platform", 86 .id = -1, 87 .num_resources = ARRAY_SIZE(cf_ide_resources), 88 .resource = cf_ide_resources, 89}; 90 91static struct platform_device *se7722_devices[] __initdata = { 92 &heartbeat_device, 93 &smc91x_eth_device, 94 &cf_ide_device, 95}; 96 97static int __init se7722_devices_setup(void) 98{ 99 return platform_add_devices(se7722_devices, 100 ARRAY_SIZE(se7722_devices)); 101} 102device_initcall(se7722_devices_setup); 103 104static void __init se7722_setup(char **cmdline_p) 105{ 106 ctrl_outw(0x010D, FPGA_OUT); /* FPGA */ 107 108 ctrl_outl(0x00051001, MSTPCR0); 109 ctrl_outl(0x00000000, MSTPCR1); 110 /* KEYSC, VOU, BEU, CEU, VEU, VPU, LCDC */ 111 ctrl_outl(0xffffbfC0, MSTPCR2); 112 113 ctrl_outw(0x0000, PORT_PECR); /* PORT E 1 = IRQ5 ,E 0 = BS */ 114 ctrl_outw(0x1000, PORT_PJCR); /* PORT J 1 = IRQ1,J 0 =IRQ0 */ 115 116 /* LCDC I/O */ 117 ctrl_outw(0x0020, PORT_PSELD); 118 119 /* SIOF1*/ 120 ctrl_outw(0x0003, PORT_PSELB); 121 ctrl_outw(0xe000, PORT_PSELC); 122 ctrl_outw(0x0000, PORT_PKCR); 123 124 /* LCDC */ 125 ctrl_outw(0x4020, PORT_PHCR); 126 ctrl_outw(0x0000, PORT_PLCR); 127 ctrl_outw(0x0000, PORT_PMCR); 128 ctrl_outw(0x0002, PORT_PRCR); 129 ctrl_outw(0x0000, PORT_PXCR); /* LCDC,CS6A */ 130 131 /* KEYSC */ 132 ctrl_outw(0x0A10, PORT_PSELA); /* BS,SHHID2 */ 133 ctrl_outw(0x0000, PORT_PYCR); 134 ctrl_outw(0x0000, PORT_PZCR); 135} 136 137/* 138 * The Machine Vector 139 */ 140struct sh_machine_vector mv_se7722 __initmv = { 141 .mv_name = "Solution Engine 7722" , 142 .mv_setup = se7722_setup , 143 .mv_nr_irqs = 109 , 144 .mv_init_irq = init_se7722_IRQ, 145 .mv_irq_demux = se7722_irq_demux, 146 147}; 148ALIAS_MV(se7722) 149