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 33static 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 49static 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 56static void omap_init_rtc(void) 57{ 58 (void) platform_device_register(&omap_rtc_device); 59} 60#else 61static 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 76static 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 88static struct platform_device mbox_device = { 89 .name = "mailbox", 90 .id = -1, 91 .num_resources = ARRAY_SIZE(mbox_resources), 92 .resource = mbox_resources, 93}; 94 95static inline void omap_init_mbox(void) 96{ 97 platform_device_register(&mbox_device); 98} 99#else 100static 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 108static 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 125static struct platform_device sti_device = { 126 .name = "sti", 127 .id = -1, 128 .num_resources = ARRAY_SIZE(sti_resources), 129 .resource = sti_resources, 130}; 131 132static inline void omap_init_sti(void) 133{ 134 platform_device_register(&sti_device); 135} 136#else 137static 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 */ 162static 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} 174arch_initcall(omap1_init_devices); 175