1 /* 2 * linux/arch/sh/boards/lbox/setup.c 3 * 4 * Copyright (C) 2007 Nobuhiro Iwamatsu 5 * 6 * NTT COMWARE L-BOX RE2 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 14 #include <linux/init.h> 15 #include <linux/platform_device.h> 16 #include <linux/ata_platform.h> 17 #include <asm/machvec.h> 18 #include <asm/addrspace.h> 19 #include <mach/lboxre2.h> 20 #include <asm/io.h> 21 22 static struct resource cf_ide_resources[] = { 23 [0] = { 24 .start = 0x1f0, 25 .end = 0x1f0 + 8 , 26 .flags = IORESOURCE_IO, 27 }, 28 [1] = { 29 .start = 0x1f0 + 0x206, 30 .end = 0x1f0 +8 + 0x206 + 8, 31 .flags = IORESOURCE_IO, 32 }, 33 [2] = { 34 .start = IRQ_CF0, 35 .flags = IORESOURCE_IRQ, 36 }, 37 }; 38 39 static struct platform_device cf_ide_device = { 40 .name = "pata_platform", 41 .id = -1, 42 .num_resources = ARRAY_SIZE(cf_ide_resources), 43 .resource = cf_ide_resources, 44 }; 45 46 static struct platform_device *lboxre2_devices[] __initdata = { 47 &cf_ide_device, 48 }; 49 50 static int __init lboxre2_devices_setup(void) 51 { 52 u32 cf0_io_base; /* Boot CF base address */ 53 pgprot_t prot; 54 unsigned long paddrbase, psize; 55 56 /* open I/O area window */ 57 paddrbase = virt_to_phys((void*)PA_AREA5_IO); 58 psize = PAGE_SIZE; 59 prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16); 60 cf0_io_base = (u32)ioremap_prot(paddrbase, psize, pgprot_val(prot)); 61 if (!cf0_io_base) { 62 printk(KERN_ERR "%s : can't open CF I/O window!\n" , __func__ ); 63 return -ENOMEM; 64 } 65 66 cf_ide_resources[0].start += cf0_io_base ; 67 cf_ide_resources[0].end += cf0_io_base ; 68 cf_ide_resources[1].start += cf0_io_base ; 69 cf_ide_resources[1].end += cf0_io_base ; 70 71 return platform_add_devices(lboxre2_devices, 72 ARRAY_SIZE(lboxre2_devices)); 73 74 } 75 device_initcall(lboxre2_devices_setup); 76 77 /* 78 * The Machine Vector 79 */ 80 static struct sh_machine_vector mv_lboxre2 __initmv = { 81 .mv_name = "L-BOX RE2", 82 .mv_nr_irqs = 72, 83 .mv_init_irq = init_lboxre2_IRQ, 84 }; 85