Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.1-rc8 96 lines 2.0 kB view raw
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 22static const struct gpio_led net5501_leds[] = { 23 { 24 .name = "error", 25 .gpio = 6, 26 .default_trigger = "default-on", 27 }, 28}; 29 30static struct gpio_led_platform_data net5501_leds_data = { 31 .num_leds = ARRAY_SIZE(net5501_leds), 32 .leds = net5501_leds, 33}; 34 35static struct platform_device net5501_leds_dev = { 36 .name = "leds-gpio", 37 .id = -1, 38 .dev.platform_data = &net5501_leds_data, 39}; 40 41static void __init init_net5501(void) 42{ 43 platform_device_register(&net5501_leds_dev); 44} 45 46struct soekris_board { 47 u16 offset; 48 char *sig; 49 u8 len; 50 void (*init)(void); 51}; 52 53static 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 58static 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 89unmap: 90 iounmap(rombase); 91 return 0; 92} 93 94arch_initcall(soekris_init); 95 96MODULE_LICENSE("GPL");