Merge branches 'armv7', 'at91', 'misc' and 'omap' into devel
[linux-2.6] / arch / sh / boards / lboxre2 / setup.c
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/pata_platform.h>
17 #include <asm/machvec.h>
18 #include <asm/addrspace.h>
19 #include <asm/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)p3_ioremap(paddrbase, psize, prot.pgprot);
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 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 ALIAS_MV(lboxre2)