Blame view
arch/arm/plat-omap/devices.c
5.46 KB
1a8bfa1eb [ARM] 3142/1: OMA... |
1 2 3 4 5 6 7 8 9 10 |
/* * linux/arch/arm/plat-omap/devices.c * * Common platform device setup/initialization for OMAP1 and OMAP2 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ |
2f8163baa ARM: gpio: conver... |
11 |
#include <linux/gpio.h> |
1a8bfa1eb [ARM] 3142/1: OMA... |
12 13 14 15 |
#include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/platform_device.h> |
fced80c73 [ARM] Convert asm... |
16 |
#include <linux/io.h> |
5a0e3ad6a include cleanup: ... |
17 |
#include <linux/slab.h> |
90173882e omap: add dsp pla... |
18 |
#include <linux/memblock.h> |
1a8bfa1eb [ARM] 3142/1: OMA... |
19 |
|
a09e64fbc [ARM] Move includ... |
20 |
#include <mach/hardware.h> |
1a8bfa1eb [ARM] 3142/1: OMA... |
21 22 |
#include <asm/mach-types.h> #include <asm/mach/map.h> |
716a3dc20 ARM: Add arm_memb... |
23 |
#include <asm/memblock.h> |
1a8bfa1eb [ARM] 3142/1: OMA... |
24 |
|
ce491cf85 omap: headers: Mo... |
25 |
#include <plat/tc.h> |
ce491cf85 omap: headers: Mo... |
26 27 |
#include <plat/board.h> #include <plat/mmc.h> |
ce491cf85 omap: headers: Mo... |
28 |
#include <plat/menelaus.h> |
d6a2d9b80 OMAP4: MCPDM: Reg... |
29 |
#include <plat/omap44xx.h> |
1a8bfa1eb [ARM] 3142/1: OMA... |
30 |
|
d88746652 omap mmc: Add bet... |
31 |
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) || \ |
7736c09c6 [ARM] OMAP: Fix M... |
32 |
defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE) |
1a8bfa1eb [ARM] 3142/1: OMA... |
33 |
|
d88746652 omap mmc: Add bet... |
34 |
#define OMAP_MMC_NR_RES 2 |
7736c09c6 [ARM] OMAP: Fix M... |
35 |
|
d88746652 omap mmc: Add bet... |
36 37 38 |
/* * Register MMC devices. Called from mach-omap1 and mach-omap2 device init. */ |
0dffb5c57 ARM: OMAP: Fix hs... |
39 40 41 |
int __init omap_mmc_add(const char *name, int id, unsigned long base, unsigned long size, unsigned int irq, struct omap_mmc_platform_data *data) |
7736c09c6 [ARM] OMAP: Fix M... |
42 |
{ |
d88746652 omap mmc: Add bet... |
43 44 45 |
struct platform_device *pdev; struct resource res[OMAP_MMC_NR_RES]; int ret; |
0dffb5c57 ARM: OMAP: Fix hs... |
46 |
pdev = platform_device_alloc(name, id); |
d88746652 omap mmc: Add bet... |
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
if (!pdev) return -ENOMEM; memset(res, 0, OMAP_MMC_NR_RES * sizeof(struct resource)); res[0].start = base; res[0].end = base + size - 1; res[0].flags = IORESOURCE_MEM; res[1].start = res[1].end = irq; res[1].flags = IORESOURCE_IRQ; ret = platform_device_add_resources(pdev, res, ARRAY_SIZE(res)); if (ret == 0) ret = platform_device_add_data(pdev, data, sizeof(*data)); if (ret) goto fail; ret = platform_device_add(pdev); if (ret) goto fail; |
01971f65f ARM: OMAP3: mmc-t... |
66 67 68 |
/* return device handle to board setup code */ data->dev = &pdev->dev; |
d88746652 omap mmc: Add bet... |
69 |
return 0; |
7736c09c6 [ARM] OMAP: Fix M... |
70 |
|
d88746652 omap mmc: Add bet... |
71 72 73 |
fail: platform_device_put(pdev); return ret; |
7736c09c6 [ARM] OMAP: Fix M... |
74 |
} |
1a8bfa1eb [ARM] 3142/1: OMA... |
75 |
#endif |
9b6553cd0 [ARM] 3433/1: ARM... |
76 |
/*-------------------------------------------------------------------------*/ |
3bfe8971a omap: arch/arm/pl... |
77 |
#if defined(CONFIG_HW_RANDOM_OMAP) || defined(CONFIG_HW_RANDOM_OMAP_MODULE) |
088ef950d omap2: Convert AR... |
78 |
#ifdef CONFIG_ARCH_OMAP2 |
3bfe8971a omap: arch/arm/pl... |
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
#define OMAP_RNG_BASE 0x480A0000 #else #define OMAP_RNG_BASE 0xfffe5000 #endif static struct resource rng_resources[] = { { .start = OMAP_RNG_BASE, .end = OMAP_RNG_BASE + 0x4f, .flags = IORESOURCE_MEM, }, }; static struct platform_device omap_rng_device = { .name = "omap_rng", .id = -1, .num_resources = ARRAY_SIZE(rng_resources), .resource = rng_resources, }; static void omap_init_rng(void) { (void) platform_device_register(&omap_rng_device); } #else static inline void omap_init_rng(void) {} #endif /*-------------------------------------------------------------------------*/ |
9b6553cd0 [ARM] 3433/1: ARM... |
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
/* Numbering for the SPI-capable controllers when used for SPI: * spi = 1 * uwire = 2 * mmc1..2 = 3..4 * mcbsp1..3 = 5..7 */ #if defined(CONFIG_SPI_OMAP_UWIRE) || defined(CONFIG_SPI_OMAP_UWIRE_MODULE) #define OMAP_UWIRE_BASE 0xfffb3000 static struct resource uwire_resources[] = { { .start = OMAP_UWIRE_BASE, .end = OMAP_UWIRE_BASE + 0x20, .flags = IORESOURCE_MEM, }, }; static struct platform_device omap_uwire_device = { .name = "omap_uwire", .id = -1, |
9b6553cd0 [ARM] 3433/1: ARM... |
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
.num_resources = ARRAY_SIZE(uwire_resources), .resource = uwire_resources, }; static void omap_init_uwire(void) { /* FIXME define and use a boot tag; not all boards will be hooking * up devices to the microwire controller, and multi-board configs * mean that CONFIG_SPI_OMAP_UWIRE may be configured anyway... */ /* board-specific code must configure chipselects (only a few * are normally used) and SCLK/SDI/SDO (each has two choices). */ (void) platform_device_register(&omap_uwire_device); } #else static inline void omap_init_uwire(void) {} #endif |
90173882e omap: add dsp pla... |
149 150 151 152 153 154 155 156 157 158 159 |
#if defined(CONFIG_TIDSPBRIDGE) || defined(CONFIG_TIDSPBRIDGE_MODULE) static phys_addr_t omap_dsp_phys_mempool_base; void __init omap_dsp_reserve_sdram_memblock(void) { phys_addr_t size = CONFIG_TIDSPBRIDGE_MEMPOOL_SIZE; phys_addr_t paddr; if (!size) return; |
716a3dc20 ARM: Add arm_memb... |
160 |
paddr = arm_memblock_steal(size, SZ_1M); |
90173882e omap: add dsp pla... |
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
if (!paddr) { pr_err("%s: failed to reserve %x bytes ", __func__, size); return; } omap_dsp_phys_mempool_base = paddr; } phys_addr_t omap_dsp_get_mempool_base(void) { return omap_dsp_phys_mempool_base; } EXPORT_SYMBOL(omap_dsp_get_mempool_base); #endif |
1a8bfa1eb [ARM] 3142/1: OMA... |
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
/* * This gets called after board-specific INIT_MACHINE, and initializes most * on-chip peripherals accessible on this board (except for few like USB): * * (a) Does any "standard config" pin muxing needed. Board-specific * code will have muxed GPIO pins and done "nonstandard" setup; * that code could live in the boot loader. * (b) Populating board-specific platform_data with the data drivers * rely on to handle wiring variations. * (c) Creating platform devices as meaningful on this board and * with this kernel configuration. * * Claiming GPIOs, and setting their direction and initial values, is the * responsibility of the device drivers. So is responding to probe(). * |
25985edce Fix common misspe... |
192 |
* Board-specific knowledge like creating devices or pin setup is to be |
1a8bfa1eb [ARM] 3142/1: OMA... |
193 194 195 196 197 198 199 200 201 |
* kept out of drivers as much as possible. In particular, pin setup * may be handled by the boot loader, and drivers should expect it will * normally have been done by the time they're probed. */ static int __init omap_init_devices(void) { /* please keep these calls, and their implementations above, * in alphabetical order so they're easier to sort through. */ |
3bfe8971a omap: arch/arm/pl... |
202 |
omap_init_rng(); |
9b6553cd0 [ARM] 3433/1: ARM... |
203 |
omap_init_uwire(); |
1a8bfa1eb [ARM] 3142/1: OMA... |
204 205 206 |
return 0; } arch_initcall(omap_init_devices); |