1/* 2 * Copyright 2004-2007 Analog Devices Inc. 3 * 2005 National ICT Australia (NICTA) 4 * Aidan Williams <aidan@nicta.com.au> 5 * 6 * Thanks to Jamey Hicks. 7 * 8 * Only SMSC91C1111 was registered, may do more later. 9 * 10 * Licensed under the GPL-2 11 */ 12 13#include <linux/device.h> 14#include <linux/platform_device.h> 15#include <linux/irq.h> 16 17const char bfin_board_name[] = "Tepla-BF561"; 18 19/* 20 * Driver needs to know address, irq and flag pin. 21 */ 22static struct resource smc91x_resources[] = { 23 { 24 .start = 0x2C000300, 25 .end = 0x2C000320, 26 .flags = IORESOURCE_MEM, 27 }, { 28 .start = IRQ_PROG_INTB, 29 .end = IRQ_PROG_INTB, 30 .flags = IORESOURCE_IRQ|IORESOURCE_IRQ_HIGHLEVEL, 31 }, { 32 .start = IRQ_PF7, 33 .end = IRQ_PF7, 34 .flags = IORESOURCE_IRQ|IORESOURCE_IRQ_HIGHLEVEL, 35 }, 36}; 37 38static struct platform_device smc91x_device = { 39 .name = "smc91x", 40 .id = 0, 41 .num_resources = ARRAY_SIZE(smc91x_resources), 42 .resource = smc91x_resources, 43}; 44 45#if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) 46#ifdef CONFIG_SERIAL_BFIN_UART0 47static struct resource bfin_uart0_resources[] = { 48 { 49 .start = BFIN_UART_THR, 50 .end = BFIN_UART_GCTL+2, 51 .flags = IORESOURCE_MEM, 52 }, 53 { 54 .start = IRQ_UART_RX, 55 .end = IRQ_UART_RX+1, 56 .flags = IORESOURCE_IRQ, 57 }, 58 { 59 .start = IRQ_UART_ERROR, 60 .end = IRQ_UART_ERROR, 61 .flags = IORESOURCE_IRQ, 62 }, 63 { 64 .start = CH_UART_TX, 65 .end = CH_UART_TX, 66 .flags = IORESOURCE_DMA, 67 }, 68 { 69 .start = CH_UART_RX, 70 .end = CH_UART_RX, 71 .flags = IORESOURCE_DMA, 72 }, 73}; 74 75unsigned short bfin_uart0_peripherals[] = { 76 P_UART0_TX, P_UART0_RX, 0 77}; 78 79static struct platform_device bfin_uart0_device = { 80 .name = "bfin-uart", 81 .id = 0, 82 .num_resources = ARRAY_SIZE(bfin_uart0_resources), 83 .resource = bfin_uart0_resources, 84 .dev = { 85 .platform_data = &bfin_uart0_peripherals, /* Passed to driver */ 86 }, 87}; 88#endif 89#endif 90 91#if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE) 92#ifdef CONFIG_BFIN_SIR0 93static struct resource bfin_sir0_resources[] = { 94 { 95 .start = 0xFFC00400, 96 .end = 0xFFC004FF, 97 .flags = IORESOURCE_MEM, 98 }, 99 { 100 .start = IRQ_UART0_RX, 101 .end = IRQ_UART0_RX+1, 102 .flags = IORESOURCE_IRQ, 103 }, 104 { 105 .start = CH_UART0_RX, 106 .end = CH_UART0_RX+1, 107 .flags = IORESOURCE_DMA, 108 }, 109}; 110 111static struct platform_device bfin_sir0_device = { 112 .name = "bfin_sir", 113 .id = 0, 114 .num_resources = ARRAY_SIZE(bfin_sir0_resources), 115 .resource = bfin_sir0_resources, 116}; 117#endif 118#endif 119 120static struct platform_device *tepla_devices[] __initdata = { 121 &smc91x_device, 122 123#if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) 124#ifdef CONFIG_SERIAL_BFIN_UART0 125 &bfin_uart0_device, 126#endif 127#endif 128 129#if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE) 130#ifdef CONFIG_BFIN_SIR0 131 &bfin_sir0_device, 132#endif 133#endif 134}; 135 136static int __init tepla_init(void) 137{ 138 printk(KERN_INFO "%s(): registering device resources\n", __func__); 139 return platform_add_devices(tepla_devices, ARRAY_SIZE(tepla_devices)); 140} 141 142arch_initcall(tepla_init); 143 144static struct platform_device *tepla_early_devices[] __initdata = { 145#if defined(CONFIG_SERIAL_BFIN_CONSOLE) || defined(CONFIG_EARLY_PRINTK) 146#ifdef CONFIG_SERIAL_BFIN_UART0 147 &bfin_uart0_device, 148#endif 149#endif 150}; 151 152void __init native_machine_early_platform_add_devices(void) 153{ 154 printk(KERN_INFO "register early platform devices\n"); 155 early_platform_add_devices(tepla_early_devices, 156 ARRAY_SIZE(tepla_early_devices)); 157} 158