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
  31static struct gpio_keys_button mtx1_gpio_button[] = {
  32        {
  33                .gpio = 207,
  34                .code = BTN_0,
  35                .desc = "System button",
  36        }
  37};
  38
  39static struct gpio_keys_platform_data mtx1_buttons_data = {
  40        .buttons = mtx1_gpio_button,
  41        .nbuttons = ARRAY_SIZE(mtx1_gpio_button),
  42};
  43
  44static struct platform_device mtx1_button = {
  45        .name = "gpio-keys",
  46        .id = -1,
  47        .dev = {
  48                .platform_data = &mtx1_buttons_data,
  49        }
  50};
  51
  52static struct resource mtx1_wdt_res[] = {
  53        [0] = {
  54                .start  = 15,
  55                .end    = 15,
  56                .name   = "mtx1-wdt-gpio",
  57                .flags  = IORESOURCE_IRQ,
  58        }
  59};
  60
  61static struct platform_device mtx1_wdt = {
  62        .name = "mtx1-wdt",
  63        .id = 0,
  64        .num_resources = ARRAY_SIZE(mtx1_wdt_res),
  65        .resource = mtx1_wdt_res,
  66};
  67
  68static struct gpio_led default_leds[] = {
  69        {
  70                .name   = "mtx1:green",
  71                .gpio = 211,
  72        }, {
  73                .name = "mtx1:red",
  74                .gpio = 212,
  75        },
  76};
  77
  78static struct gpio_led_platform_data mtx1_led_data = {
  79        .num_leds = ARRAY_SIZE(default_leds),
  80        .leds = default_leds,
  81};
  82
  83static struct platform_device mtx1_gpio_leds = {
  84        .name = "leds-gpio",
  85        .id = -1,
  86        .dev = {
  87                .platform_data = &mtx1_led_data,
  88        }
  89};
  90
  91static struct mtd_partition mtx1_mtd_partitions[] = {
  92        {
  93                .name   = "filesystem",
  94                .size   = 0x01C00000,
  95                .offset = 0,
  96        },
  97        {
  98                .name   = "yamon",
  99                .size   = 0x00100000,
 100                .offset = MTDPART_OFS_APPEND,
 101                .mask_flags = MTD_WRITEABLE,
 102        },
 103        {
 104                .name   = "kernel",
 105                .size   = 0x002c0000,
 106                .offset = MTDPART_OFS_APPEND,
 107        },
 108        {
 109                .name   = "yamon env",
 110                .size   = 0x00040000,
 111                .offset = MTDPART_OFS_APPEND,
 112        },
 113};
 114
 115static struct physmap_flash_data mtx1_flash_data = {
 116        .width          = 4,
 117        .nr_parts       = 4,
 118        .parts          = mtx1_mtd_partitions,
 119};
 120
 121static struct resource mtx1_mtd_resource = {
 122        .start  = 0x1e000000,
 123        .end    = 0x1fffffff,
 124        .flags  = IORESOURCE_MEM,
 125};
 126
 127static struct platform_device mtx1_mtd = {
 128        .name           = "physmap-flash",
 129        .dev            = {
 130                .platform_data  = &mtx1_flash_data,
 131        },
 132        .num_resources  = 1,
 133        .resource       = &mtx1_mtd_resource,
 134};
 135
 136static struct __initdata platform_device * mtx1_devs[] = {
 137        &mtx1_gpio_leds,
 138        &mtx1_wdt,
 139        &mtx1_button,
 140        &mtx1_mtd,
 141};
 142
 143static int __init mtx1_register_devices(void)
 144{
 145        int rc;
 146
 147        rc = gpio_request(mtx1_gpio_button[0].gpio,
 148                                        mtx1_gpio_button[0].desc);
 149        if (rc < 0) {
 150                printk(KERN_INFO "mtx1: failed to request %d\n",
 151                                        mtx1_gpio_button[0].gpio);
 152                goto out;
 153        }
 154        gpio_direction_input(mtx1_gpio_button[0].gpio);
 155out:
 156        return platform_add_devices(mtx1_devs, ARRAY_SIZE(mtx1_devs));
 157}
 158
 159arch_initcall(mtx1_register_devices);
 160