linux/arch/arm/mach-ks8695/board-dsm320.c
<<
>>
Prefs
   1/*
   2 * arch/arm/mach-ks8695/board-dsm320.c
   3 *
   4 * DSM-320 D-Link Wireless Media Player, board support.
   5 *
   6 * Copyright 2008 Simtec Electronics
   7 *                Daniel Silverstone <dsilvers@simtec.co.uk>
   8 *
   9 * This program is free software; you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License version 2 as
  11 * published by the Free Software Foundation.
  12 */
  13#include <linux/gpio.h>
  14#include <linux/kernel.h>
  15#include <linux/types.h>
  16#include <linux/interrupt.h>
  17#include <linux/init.h>
  18#include <linux/platform_device.h>
  19
  20#include <linux/mtd/mtd.h>
  21#include <linux/mtd/map.h>
  22#include <linux/mtd/physmap.h>
  23#include <linux/mtd/partitions.h>
  24
  25#include <asm/mach-types.h>
  26
  27#include <asm/mach/arch.h>
  28#include <asm/mach/map.h>
  29#include <asm/mach/irq.h>
  30
  31#include <mach/devices.h>
  32#include <mach/gpio-ks8695.h>
  33
  34#include "generic.h"
  35
  36#ifdef CONFIG_PCI
  37static int dsm320_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
  38{
  39        switch (slot) {
  40        case 0:
  41                /* PCI-AHB bridge? */
  42                return KS8695_IRQ_EXTERN0;
  43        case 18:
  44                /* Mini PCI slot */
  45                return KS8695_IRQ_EXTERN2;
  46        case 20:
  47                /* RealMAGIC chip */
  48                return KS8695_IRQ_EXTERN0;
  49        }
  50        BUG();
  51}
  52
  53static struct ks8695_pci_cfg __initdata dsm320_pci = {
  54        .mode           = KS8695_MODE_MINIPCI,
  55        .map_irq        = dsm320_pci_map_irq,
  56};
  57
  58static void __init dsm320_register_pci(void)
  59{
  60        /* Initialise the GPIO lines for interrupt mode */
  61        /* RealMAGIC */
  62        ks8695_gpio_interrupt(KS8695_GPIO_0, IRQ_TYPE_LEVEL_LOW);
  63        /* MiniPCI Slot */
  64        ks8695_gpio_interrupt(KS8695_GPIO_2, IRQ_TYPE_LEVEL_LOW);
  65
  66        ks8695_init_pci(&dsm320_pci);
  67}
  68
  69#else
  70static inline void __init dsm320_register_pci(void) { }
  71#endif
  72
  73static struct physmap_flash_data dsm320_nor_pdata = {
  74        .width          = 4,
  75        .nr_parts       = 0,
  76};
  77
  78static struct resource dsm320_nor_resource[] = {
  79        [0] = {
  80                .start = SZ_32M, /* We expect the bootloader to map
  81                                  * the flash here.
  82                                  */
  83                .end   = SZ_32M + SZ_4M - 1,
  84                .flags = IORESOURCE_MEM,
  85        }
  86};
  87
  88static struct platform_device dsm320_device_nor = {
  89        .name           = "physmap-flash",
  90        .id             = -1,
  91        .num_resources  = ARRAY_SIZE(dsm320_nor_resource),
  92        .resource       = dsm320_nor_resource,
  93        .dev            = {
  94                .platform_data = &dsm320_nor_pdata,
  95        },
  96};
  97
  98void __init dsm320_register_nor(void)
  99{
 100        int ret;
 101
 102        ret = platform_device_register(&dsm320_device_nor);
 103        if (ret < 0)
 104                printk(KERN_ERR "failed to register physmap-flash device\n");
 105}
 106
 107static void __init dsm320_init(void)
 108{
 109        /* GPIO registration */
 110        ks8695_register_gpios();
 111
 112        /* PCI registration */
 113        dsm320_register_pci();
 114
 115        /* Network device */
 116        ks8695_add_device_lan();        /* eth0 = LAN */
 117
 118        /* NOR devices */
 119        dsm320_register_nor();
 120}
 121
 122MACHINE_START(DSM320, "D-Link DSM-320 Wireless Media Player")
 123        /* Maintainer: Simtec Electronics. */
 124        .atag_offset    = 0x100,
 125        .map_io         = ks8695_map_io,
 126        .init_irq       = ks8695_init_irq,
 127        .init_machine   = dsm320_init,
 128        .init_time      = ks8695_timer_init,
 129        .restart        = ks8695_restart,
 130MACHINE_END
 131