linux/arch/mips/alchemy/mtx-1/platform.c
<<
>>
Prefs
   1/*
   2 * MTX-1 platform devices registration
   3 *
   4 * Copyright (C) 2007-2009, Florian Fainelli <florian@openwrt.org>
   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 * This program is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 * GNU General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * along with this program; if not, write to the Free Software
  18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  19 */
  20
  21#include <linux/init.h>
  22#include <linux/platform_device.h>
  23#include <linux/leds.h>
  24#include <linux/gpio.h>
  25#include <linux/gpio_keys.h>
  26#include <linux/input.h>
  27#include <linux/mtd/partitions.h>
  28#include <linux/mtd/physmap.h>
  29#include <mtd/mtd-abi.h>
  30
  31#include <asm/mach-au1x00/au1xxx_eth.h>
  32
  33static struct gpio_keys_button mtx1_gpio_button[] = {
  34        {
  35                .gpio = 207,
  36                .code = BTN_0,
  37                .desc = "System button",
  38        }
  39};
  40
  41static struct gpio_keys_platform_data mtx1_buttons_data = {
  42        .buttons = mtx1_gpio_button,
  43        .nbuttons = ARRAY_SIZE(mtx1_gpio_button),
  44};
  45
  46static struct platform_device mtx1_button = {
  47        .name = "gpio-keys",
  48        .id = -1,
  49        .dev = {
  50                .platform_data = &mtx1_buttons_data,
  51        }
  52};
  53
  54static struct resource mtx1_wdt_res[] = {
  55        [0] = {
  56                .start  = 15,
  57                .end    = 15,
  58                .name   = "mtx1-wdt-gpio",
  59                .flags  = IORESOURCE_IRQ,
  60        }
  61};
  62
  63static struct platform_device mtx1_wdt = {
  64        .name = "mtx1-wdt",
  65        .id = 0,
  66        .num_resources = ARRAY_SIZE(mtx1_wdt_res),
  67        .resource = mtx1_wdt_res,
  68};
  69
  70static struct gpio_led default_leds[] = {
  71        {
  72                .name   = "mtx1:green",
  73                .gpio = 211,
  74        }, {
  75                .name = "mtx1:red",
  76                .gpio = 212,
  77        },
  78};
  79
  80static struct gpio_led_platform_data mtx1_led_data = {
  81        .num_leds = ARRAY_SIZE(default_leds),
  82        .leds = default_leds,
  83};
  84
  85static struct platform_device mtx1_gpio_leds = {
  86        .name = "leds-gpio",
  87        .id = -1,
  88        .dev = {
  89                .platform_data = &mtx1_led_data,
  90        }
  91};
  92
  93static struct mtd_partition mtx1_mtd_partitions[] = {
  94        {
  95                .name   = "filesystem",
  96                .size   = 0x01C00000,
  97                .offset = 0,
  98        },
  99        {
 100                .name   = "yamon",
 101                .size   = 0x00100000,
 102                .offset = MTDPART_OFS_APPEND,
 103                .mask_flags = MTD_WRITEABLE,
 104        },
 105        {
 106                .name   = "kernel",
 107                .size   = 0x002c0000,
 108                .offset = MTDPART_OFS_APPEND,
 109        },
 110        {
 111                .name   = "yamon env",
 112                .size   = 0x00040000,
 113                .offset = MTDPART_OFS_APPEND,
 114        },
 115};
 116
 117static struct physmap_flash_data mtx1_flash_data = {
 118        .width          = 4,
 119        .nr_parts       = 4,
 120        .parts          = mtx1_mtd_partitions,
 121};
 122
 123static struct resource mtx1_mtd_resource = {
 124        .start  = 0x1e000000,
 125        .end    = 0x1fffffff,
 126        .flags  = IORESOURCE_MEM,
 127};
 128
 129static struct platform_device mtx1_mtd = {
 130        .name           = "physmap-flash",
 131        .dev            = {
 132                .platform_data  = &mtx1_flash_data,
 133        },
 134        .num_resources  = 1,
 135        .resource       = &mtx1_mtd_resource,
 136};
 137
 138static struct __initdata platform_device * mtx1_devs[] = {
 139        &mtx1_gpio_leds,
 140        &mtx1_wdt,
 141        &mtx1_button,
 142        &mtx1_mtd,
 143};
 144
 145static struct au1000_eth_platform_data mtx1_au1000_eth0_pdata = {
 146        .phy_search_highest_addr        = 1,
 147        .phy1_search_mac0               = 1,
 148};
 149
 150static int __init mtx1_register_devices(void)
 151{
 152        int rc;
 153
 154        au1xxx_override_eth_cfg(0, &mtx1_au1000_eth0_pdata);
 155
 156        rc = gpio_request(mtx1_gpio_button[0].gpio,
 157                                        mtx1_gpio_button[0].desc);
 158        if (rc < 0) {
 159                printk(KERN_INFO "mtx1: failed to request %d\n",
 160                                        mtx1_gpio_button[0].gpio);
 161                goto out;
 162        }
 163        gpio_direction_input(mtx1_gpio_button[0].gpio);
 164out:
 165        return platform_add_devices(mtx1_devs, ARRAY_SIZE(mtx1_devs));
 166}
 167
 168arch_initcall(mtx1_register_devices);
 169