1 /* 2 * linux/arch/arm/mach-omap1/devices.c 3 * 4 * OMAP1 platform device setup/initialization 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 12 #include <linux/module.h> 13 #include <linux/kernel.h> 14 #include <linux/init.h> 15 #include <linux/platform_device.h> 16 17 #include <asm/hardware.h> 18 #include <asm/io.h> 19 #include <asm/mach-types.h> 20 #include <asm/mach/map.h> 21 22 #include <asm/arch/tc.h> 23 #include <asm/arch/board.h> 24 #include <asm/arch/mux.h> 25 #include <asm/arch/gpio.h> 26 27 /*-------------------------------------------------------------------------*/ 28 29 #if defined(CONFIG_RTC_DRV_OMAP) || defined(CONFIG_RTC_DRV_OMAP_MODULE) 30 31 #define OMAP_RTC_BASE 0xfffb4800 32 33 static struct resource rtc_resources[] = { 34 { 35 .start = OMAP_RTC_BASE, 36 .end = OMAP_RTC_BASE + 0x5f, 37 .flags = IORESOURCE_MEM, 38 }, 39 { 40 .start = INT_RTC_TIMER, 41 .flags = IORESOURCE_IRQ, 42 }, 43 { 44 .start = INT_RTC_ALARM, 45 .flags = IORESOURCE_IRQ, 46 }, 47 }; 48 49 static struct platform_device omap_rtc_device = { 50 .name = "omap_rtc", 51 .id = -1, 52 .num_resources = ARRAY_SIZE(rtc_resources), 53 .resource = rtc_resources, 54 }; 55 56 static void omap_init_rtc(void) 57 { 58 (void) platform_device_register(&omap_rtc_device); 59 } 60 #else 61 static inline void omap_init_rtc(void) {} 62 #endif 63 64 #if defined(CONFIG_OMAP_DSP) || defined(CONFIG_OMAP_DSP_MODULE) 65 66 #if defined(CONFIG_ARCH_OMAP15XX) 67 # define OMAP1_MBOX_SIZE 0x23 68 # define INT_DSP_MAILBOX1 INT_1510_DSP_MAILBOX1 69 #elif defined(CONFIG_ARCH_OMAP16XX) 70 # define OMAP1_MBOX_SIZE 0x2f 71 # define INT_DSP_MAILBOX1 INT_1610_DSP_MAILBOX1 72 #endif 73 74 #define OMAP1_MBOX_BASE IO_ADDRESS(OMAP16XX_MAILBOX_BASE) 75 76 static struct resource mbox_resources[] = { 77 { 78 .start = OMAP1_MBOX_BASE, 79 .end = OMAP1_MBOX_BASE + OMAP1_MBOX_SIZE, 80 .flags = IORESOURCE_MEM, 81 }, 82 { 83 .start = INT_DSP_MAILBOX1, 84 .flags = IORESOURCE_IRQ, 85 }, 86 }; 87 88 static struct platform_device mbox_device = { 89 .name = "mailbox", 90 .id = -1, 91 .num_resources = ARRAY_SIZE(mbox_resources), 92 .resource = mbox_resources, 93 }; 94 95 static inline void omap_init_mbox(void) 96 { 97 platform_device_register(&mbox_device); 98 } 99 #else 100 static inline void omap_init_mbox(void) { } 101 #endif 102 103 #if defined(CONFIG_OMAP_STI) 104 105 #define OMAP1_STI_BASE IO_ADDRESS(0xfffea000) 106 #define OMAP1_STI_CHANNEL_BASE (OMAP1_STI_BASE + 0x400) 107 108 static struct resource sti_resources[] = { 109 { 110 .start = OMAP1_STI_BASE, 111 .end = OMAP1_STI_BASE + SZ_1K - 1, 112 .flags = IORESOURCE_MEM, 113 }, 114 { 115 .start = OMAP1_STI_CHANNEL_BASE, 116 .end = OMAP1_STI_CHANNEL_BASE + SZ_1K - 1, 117 .flags = IORESOURCE_MEM, 118 }, 119 { 120 .start = INT_1610_STI, 121 .flags = IORESOURCE_IRQ, 122 } 123 }; 124 125 static struct platform_device sti_device = { 126 .name = "sti", 127 .id = -1, 128 .num_resources = ARRAY_SIZE(sti_resources), 129 .resource = sti_resources, 130 }; 131 132 static inline void omap_init_sti(void) 133 { 134 platform_device_register(&sti_device); 135 } 136 #else 137 static inline void omap_init_sti(void) {} 138 #endif 139 140 /*-------------------------------------------------------------------------*/ 141 142 /* 143 * This gets called after board-specific INIT_MACHINE, and initializes most 144 * on-chip peripherals accessible on this board (except for few like USB): 145 * 146 * (a) Does any "standard config" pin muxing needed. Board-specific 147 * code will have muxed GPIO pins and done "nonstandard" setup; 148 * that code could live in the boot loader. 149 * (b) Populating board-specific platform_data with the data drivers 150 * rely on to handle wiring variations. 151 * (c) Creating platform devices as meaningful on this board and 152 * with this kernel configuration. 153 * 154 * Claiming GPIOs, and setting their direction and initial values, is the 155 * responsibility of the device drivers. So is responding to probe(). 156 * 157 * Board-specific knowlege like creating devices or pin setup is to be 158 * kept out of drivers as much as possible. In particular, pin setup 159 * may be handled by the boot loader, and drivers should expect it will 160 * normally have been done by the time they're probed. 161 */ 162 static int __init omap1_init_devices(void) 163 { 164 /* please keep these calls, and their implementations above, 165 * in alphabetical order so they're easier to sort through. 166 */ 167 168 omap_init_mbox(); 169 omap_init_rtc(); 170 omap_init_sti(); 171 172 return 0; 173 } 174 arch_initcall(omap1_init_devices); 175 176