linux/arch/blackfin/mach-bf561/boards/tepla.c
<<
>>
Prefs
   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