Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
setup.c
Go to the documentation of this file.
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;
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_init_irq = init_lboxre2_IRQ,
83 };