~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/x86/platform/geode/net5501.c

Version: ~ [ linux-5.8-rc3 ] ~ [ linux-5.7.5 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.48 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.129 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.185 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.228 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.228 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.85 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * System Specific setup for Soekris net5501
  3  * At the moment this means setup of GPIO control of LEDs and buttons
  4  * on net5501 boards.
  5  *
  6  *
  7  * Copyright (C) 2008-2009 Tower Technologies
  8  * Written by Alessandro Zummo <a.zummo@towertech.it>
  9  *
 10  * Copyright (C) 2008 Constantin Baranov <const@mimas.ru>
 11  * Copyright (C) 2011 Ed Wildgoose <kernel@wildgooses.com>
 12  *                and Philip Prindeville <philipp@redfish-solutions.com>
 13  *
 14  * This program is free software; you can redistribute it and/or modify
 15  * it under the terms of the GNU General Public License version 2
 16  * as published by the Free Software Foundation.
 17  */
 18 
 19 #include <linux/kernel.h>
 20 #include <linux/init.h>
 21 #include <linux/io.h>
 22 #include <linux/string.h>
 23 #include <linux/module.h>
 24 #include <linux/leds.h>
 25 #include <linux/platform_device.h>
 26 #include <linux/gpio.h>
 27 #include <linux/input.h>
 28 #include <linux/gpio_keys.h>
 29 
 30 #include <asm/geode.h>
 31 
 32 #define BIOS_REGION_BASE                0xffff0000
 33 #define BIOS_REGION_SIZE                0x00010000
 34 
 35 static struct gpio_keys_button net5501_gpio_buttons[] = {
 36         {
 37                 .code = KEY_RESTART,
 38                 .gpio = 24,
 39                 .active_low = 1,
 40                 .desc = "Reset button",
 41                 .type = EV_KEY,
 42                 .wakeup = 0,
 43                 .debounce_interval = 100,
 44                 .can_disable = 0,
 45         }
 46 };
 47 static struct gpio_keys_platform_data net5501_buttons_data = {
 48         .buttons = net5501_gpio_buttons,
 49         .nbuttons = ARRAY_SIZE(net5501_gpio_buttons),
 50         .poll_interval = 20,
 51 };
 52 
 53 static struct platform_device net5501_buttons_dev = {
 54         .name = "gpio-keys-polled",
 55         .id = 1,
 56         .dev = {
 57                 .platform_data = &net5501_buttons_data,
 58         }
 59 };
 60 
 61 static struct gpio_led net5501_leds[] = {
 62         {
 63                 .name = "net5501:1",
 64                 .gpio = 6,
 65                 .default_trigger = "default-on",
 66                 .active_low = 0,
 67         },
 68 };
 69 
 70 static struct gpio_led_platform_data net5501_leds_data = {
 71         .num_leds = ARRAY_SIZE(net5501_leds),
 72         .leds = net5501_leds,
 73 };
 74 
 75 static struct platform_device net5501_leds_dev = {
 76         .name = "leds-gpio",
 77         .id = -1,
 78         .dev.platform_data = &net5501_leds_data,
 79 };
 80 
 81 static struct __initdata platform_device *net5501_devs[] = {
 82         &net5501_buttons_dev,
 83         &net5501_leds_dev,
 84 };
 85 
 86 static void __init register_net5501(void)
 87 {
 88         /* Setup LED control through leds-gpio driver */
 89         platform_add_devices(net5501_devs, ARRAY_SIZE(net5501_devs));
 90 }
 91 
 92 struct net5501_board {
 93         u16     offset;
 94         u16     len;
 95         char    *sig;
 96 };
 97 
 98 static struct net5501_board __initdata boards[] = {
 99         { 0xb7b, 7, "net5501" },        /* net5501 v1.33/1.33c */
100         { 0xb1f, 7, "net5501" },        /* net5501 v1.32i */
101 };
102 
103 static bool __init net5501_present(void)
104 {
105         int i;
106         unsigned char *rombase, *bios;
107         bool found = false;
108 
109         rombase = ioremap(BIOS_REGION_BASE, BIOS_REGION_SIZE - 1);
110         if (!rombase) {
111                 printk(KERN_ERR "%s: failed to get rombase\n", KBUILD_MODNAME);
112                 return found;
113         }
114 
115         bios = rombase + 0x20;  /* null terminated */
116 
117         if (memcmp(bios, "comBIOS", 7))
118                 goto unmap;
119 
120         for (i = 0; i < ARRAY_SIZE(boards); i++) {
121                 unsigned char *model = rombase + boards[i].offset;
122 
123                 if (!memcmp(model, boards[i].sig, boards[i].len)) {
124                         printk(KERN_INFO "%s: system is recognized as \"%s\"\n",
125                                KBUILD_MODNAME, model);
126 
127                         found = true;
128                         break;
129                 }
130         }
131 
132 unmap:
133         iounmap(rombase);
134         return found;
135 }
136 
137 static int __init net5501_init(void)
138 {
139         if (!is_geode())
140                 return 0;
141 
142         if (!net5501_present())
143                 return 0;
144 
145         register_net5501();
146 
147         return 0;
148 }
149 
150 module_init(net5501_init);
151 
152 MODULE_AUTHOR("Philip Prindeville <philipp@redfish-solutions.com>");
153 MODULE_DESCRIPTION("Soekris net5501 System Setup");
154 MODULE_LICENSE("GPL");
155 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp