]> nv-tegra.nvidia Code Review - linux-2.6.git/blob - drivers/leds/leds-net5501.c
hid: egalax: Correct for device resolution report error
[linux-2.6.git] / drivers / leds / leds-net5501.c
1 /*
2  * Soekris board support code
3  *
4  * Copyright (C) 2008-2009 Tower Technologies
5  * Written by Alessandro Zummo <a.zummo@towertech.it>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2
9  * as published by the Free Software Foundation.
10  */
11
12 #include <linux/kernel.h>
13 #include <linux/init.h>
14 #include <linux/io.h>
15 #include <linux/string.h>
16 #include <linux/leds.h>
17 #include <linux/platform_device.h>
18 #include <linux/gpio.h>
19
20 #include <asm/geode.h>
21
22 static struct gpio_led net5501_leds[] = {
23         {
24                 .name = "error",
25                 .gpio = 6,
26                 .default_trigger = "default-on",
27         },
28 };
29
30 static struct gpio_led_platform_data net5501_leds_data = {
31         .num_leds = ARRAY_SIZE(net5501_leds),
32         .leds = net5501_leds,
33 };
34
35 static struct platform_device net5501_leds_dev = {
36         .name = "leds-gpio",
37         .id = -1,
38         .dev.platform_data = &net5501_leds_data,
39 };
40
41 static void __init init_net5501(void)
42 {
43         platform_device_register(&net5501_leds_dev);
44 }
45
46 struct soekris_board {
47         u16     offset;
48         char    *sig;
49         u8      len;
50         void    (*init)(void);
51 };
52
53 static struct soekris_board __initdata boards[] = {
54         { 0xb7b, "net5501", 7, init_net5501 },  /* net5501 v1.33/1.33c */
55         { 0xb1f, "net5501", 7, init_net5501 },  /* net5501 v1.32i */
56 };
57
58 static int __init soekris_init(void)
59 {
60         int i;
61         unsigned char *rombase, *bios;
62
63         if (!is_geode())
64                 return 0;
65
66         rombase = ioremap(0xffff0000, 0xffff);
67         if (!rombase) {
68                 printk(KERN_INFO "Soekris net5501 LED driver failed to get rombase");
69                 return 0;
70         }
71
72         bios = rombase + 0x20;  /* null terminated */
73
74         if (strncmp(bios, "comBIOS", 7))
75                 goto unmap;
76
77         for (i = 0; i < ARRAY_SIZE(boards); i++) {
78                 unsigned char *model = rombase + boards[i].offset;
79
80                 if (strncmp(model, boards[i].sig, boards[i].len) == 0) {
81                         printk(KERN_INFO "Soekris %s: %s\n", model, bios);
82
83                         if (boards[i].init)
84                                 boards[i].init();
85                         break;
86                 }
87         }
88
89 unmap:
90         iounmap(rombase);
91         return 0;
92 }
93
94 arch_initcall(soekris_init);