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