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 IS_ENABLED(CONFIG_SERIAL_BFIN) 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_TX, 55 .end = IRQ_UART_TX, 56 .flags = IORESOURCE_IRQ, 57 }, 58 { 59 .start = IRQ_UART_RX, 60 .end = IRQ_UART_RX, 61 .flags = IORESOURCE_IRQ, 62 }, 63 { 64 .start = IRQ_UART_ERROR, 65 .end = IRQ_UART_ERROR, 66 .flags = IORESOURCE_IRQ, 67 }, 68 { 69 .start = CH_UART_TX, 70 .end = CH_UART_TX, 71 .flags = IORESOURCE_DMA, 72 }, 73 { 74 .start = CH_UART_RX, 75 .end = CH_UART_RX, 76 .flags = IORESOURCE_DMA, 77 }, 78}; 79 80static unsigned short bfin_uart0_peripherals[] = { 81 P_UART0_TX, P_UART0_RX, 0 82}; 83 84static struct platform_device bfin_uart0_device = { 85 .name = "bfin-uart", 86 .id = 0, 87 .num_resources = ARRAY_SIZE(bfin_uart0_resources), 88 .resource = bfin_uart0_resources, 89 .dev = { 90 .platform_data = &bfin_uart0_peripherals, /* Passed to driver */ 91 }, 92}; 93#endif 94#endif 95 96#if IS_ENABLED(CONFIG_BFIN_SIR) 97#ifdef CONFIG_BFIN_SIR0 98static struct resource bfin_sir0_resources[] = { 99 { 100 .start = 0xFFC00400, 101 .end = 0xFFC004FF, 102 .flags = IORESOURCE_MEM, 103 }, 104 { 105 .start = IRQ_UART0_RX, 106 .end = IRQ_UART0_RX+1, 107 .flags = IORESOURCE_IRQ, 108 }, 109 { 110 .start = CH_UART0_RX, 111 .end = CH_UART0_RX+1, 112 .flags = IORESOURCE_DMA, 113 }, 114}; 115 116static struct platform_device bfin_sir0_device = { 117 .name = "bfin_sir", 118 .id = 0, 119 .num_resources = ARRAY_SIZE(bfin_sir0_resources), 120 .resource = bfin_sir0_resources, 121}; 122#endif 123#endif 124 125static struct platform_device *tepla_devices[] __initdata = { 126 &smc91x_device, 127 128#if IS_ENABLED(CONFIG_SERIAL_BFIN) 129#ifdef CONFIG_SERIAL_BFIN_UART0 130 &bfin_uart0_device, 131#endif 132#endif 133 134#if IS_ENABLED(CONFIG_BFIN_SIR) 135#ifdef CONFIG_BFIN_SIR0 136 &bfin_sir0_device, 137#endif 138#endif 139}; 140 141static int __init tepla_init(void) 142{ 143 printk(KERN_INFO "%s(): registering device resources\n", __func__); 144 return platform_add_devices(tepla_devices, ARRAY_SIZE(tepla_devices)); 145} 146 147arch_initcall(tepla_init); 148 149static struct platform_device *tepla_early_devices[] __initdata = { 150#if defined(CONFIG_SERIAL_BFIN_CONSOLE) || defined(CONFIG_EARLY_PRINTK) 151#ifdef CONFIG_SERIAL_BFIN_UART0 152 &bfin_uart0_device, 153#endif 154#endif 155}; 156 157void __init native_machine_early_platform_add_devices(void) 158{ 159 printk(KERN_INFO "register early platform devices\n"); 160 early_platform_add_devices(tepla_early_devices, 161 ARRAY_SIZE(tepla_early_devices)); 162} 163