Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
devices.c
Go to the documentation of this file.
1 /*
2  * Common devices definition for Gemini
3  *
4  * Copyright (C) 2008-2009 Paulius Zaleckas <[email protected]>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10 #include <linux/kernel.h>
11 #include <linux/init.h>
12 #include <linux/io.h>
13 #include <linux/platform_device.h>
14 #include <linux/serial_8250.h>
15 #include <linux/mtd/physmap.h>
16 
17 #include <mach/irqs.h>
18 #include <mach/hardware.h>
19 #include <mach/global_reg.h>
20 
21 static struct plat_serial8250_port serial_platform_data[] = {
22  {
23  .membase = (void *)IO_ADDRESS(GEMINI_UART_BASE),
24  .mapbase = GEMINI_UART_BASE,
25  .irq = IRQ_UART,
26  .uartclk = UART_CLK,
27  .regshift = 2,
28  .iotype = UPIO_MEM,
29  .type = PORT_16550A,
31  },
32  {},
33 };
34 
35 static struct platform_device serial_device = {
36  .name = "serial8250",
38  .dev = {
39  .platform_data = serial_platform_data,
40  },
41 };
42 
44 {
45  return platform_device_register(&serial_device);
46 }
47 
48 static struct resource flash_resource = {
49  .start = GEMINI_FLASH_BASE,
50  .flags = IORESOURCE_MEM,
51 };
52 
53 static struct physmap_flash_data pflash_platform_data = {};
54 
55 static struct platform_device pflash_device = {
56  .name = "physmap-flash",
57  .id = 0,
58  .dev = {
59  .platform_data = &pflash_platform_data,
60  },
61  .resource = &flash_resource,
62  .num_resources = 1,
63 };
64 
65 int platform_register_pflash(unsigned int size, struct mtd_partition *parts,
66  unsigned int nr_parts)
67 {
68  unsigned int reg;
69 
71 
72  if ((reg & FLASH_TYPE_MASK) != FLASH_TYPE_PARALLEL)
73  return -ENXIO;
74 
75  if (reg & FLASH_WIDTH_16BIT)
76  pflash_platform_data.width = 2;
77  else
78  pflash_platform_data.width = 1;
79 
80  /* enable parallel flash pins and disable others */
82  reg &= ~PFLASH_PADS_DISABLE;
85 
86  flash_resource.end = flash_resource.start + size - 1;
87 
88  pflash_platform_data.parts = parts;
89  pflash_platform_data.nr_parts = nr_parts;
90 
91  return platform_device_register(&pflash_device);
92 }
93 
94 static struct resource gemini_rtc_resources[] = {
95  [0] = {
96  .start = GEMINI_RTC_BASE,
97  .end = GEMINI_RTC_BASE + 0x24,
98  .flags = IORESOURCE_MEM,
99  },
100  [1] = {
101  .start = IRQ_RTC,
102  .end = IRQ_RTC,
103  .flags = IORESOURCE_IRQ,
104  },
105 };
106 
107 static struct platform_device gemini_rtc_device = {
108  .name = "rtc-gemini",
109  .id = 0,
110  .num_resources = ARRAY_SIZE(gemini_rtc_resources),
111  .resource = gemini_rtc_resources,
112 };
113 
115 {
116  return platform_device_register(&gemini_rtc_device);
117 }
118