]> git.karo-electronics.de Git - karo-tx-linux.git/blob - arch/arm/plat-omap/devices.c
Merge branch 'fixes-for-v3.6' of git://git.infradead.org/users/jcooper/linux into...
[karo-tx-linux.git] / arch / arm / plat-omap / devices.c
1 /*
2  * linux/arch/arm/plat-omap/devices.c
3  *
4  * Common platform device setup/initialization for OMAP1 and OMAP2
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 as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  */
11 #include <linux/gpio.h>
12 #include <linux/module.h>
13 #include <linux/kernel.h>
14 #include <linux/init.h>
15 #include <linux/platform_device.h>
16 #include <linux/io.h>
17 #include <linux/slab.h>
18 #include <linux/memblock.h>
19
20 #include <mach/hardware.h>
21 #include <asm/mach-types.h>
22 #include <asm/mach/map.h>
23 #include <asm/memblock.h>
24
25 #include <plat/tc.h>
26 #include <plat/board.h>
27 #include <plat/mmc.h>
28 #include <plat/menelaus.h>
29 #include <plat/omap44xx.h>
30
31 /*-------------------------------------------------------------------------*/
32
33 #if defined(CONFIG_HW_RANDOM_OMAP) || defined(CONFIG_HW_RANDOM_OMAP_MODULE)
34
35 #ifdef CONFIG_ARCH_OMAP2
36 #define OMAP_RNG_BASE           0x480A0000
37 #else
38 #define OMAP_RNG_BASE           0xfffe5000
39 #endif
40
41 static struct resource rng_resources[] = {
42         {
43                 .start          = OMAP_RNG_BASE,
44                 .end            = OMAP_RNG_BASE + 0x4f,
45                 .flags          = IORESOURCE_MEM,
46         },
47 };
48
49 static struct platform_device omap_rng_device = {
50         .name           = "omap_rng",
51         .id             = -1,
52         .num_resources  = ARRAY_SIZE(rng_resources),
53         .resource       = rng_resources,
54 };
55
56 static void omap_init_rng(void)
57 {
58         (void) platform_device_register(&omap_rng_device);
59 }
60 #else
61 static inline void omap_init_rng(void) {}
62 #endif
63
64 /*
65  * This gets called after board-specific INIT_MACHINE, and initializes most
66  * on-chip peripherals accessible on this board (except for few like USB):
67  *
68  *  (a) Does any "standard config" pin muxing needed.  Board-specific
69  *      code will have muxed GPIO pins and done "nonstandard" setup;
70  *      that code could live in the boot loader.
71  *  (b) Populating board-specific platform_data with the data drivers
72  *      rely on to handle wiring variations.
73  *  (c) Creating platform devices as meaningful on this board and
74  *      with this kernel configuration.
75  *
76  * Claiming GPIOs, and setting their direction and initial values, is the
77  * responsibility of the device drivers.  So is responding to probe().
78  *
79  * Board-specific knowledge like creating devices or pin setup is to be
80  * kept out of drivers as much as possible.  In particular, pin setup
81  * may be handled by the boot loader, and drivers should expect it will
82  * normally have been done by the time they're probed.
83  */
84 static int __init omap_init_devices(void)
85 {
86         /* please keep these calls, and their implementations above,
87          * in alphabetical order so they're easier to sort through.
88          */
89         omap_init_rng();
90         return 0;
91 }
92 arch_initcall(omap_init_devices);