On Sat, 14 Jan 2012 01:45:39 -0700 Philip Prindeville <philipp@xxxxxxxxxxxxxxxxxxxxx> wrote: > From: "Philip A. Prindeville" <philipp@xxxxxxxxxxxxxxxxxxxxx> > > Trivial platform driver for Traverse Technologies Geos and Geos2 > single-board computers. Uses SMBIOS to identify platform. > Based on progressive revisions of the leds-net5501 driver that > was rewritten by Ed Wildgoose as a platform driver. > > Supports GPIO-based LEDs (3) and 1 polled button which is > typically used for a soft reset. > > Signed-off-by: Philip Prindeville <philipp@xxxxxxxxxxxxxxxxxxxxx> > Reviewed-by: Ed Wildgoose <ed@xxxxxxxxxxxxxx> > Acked-by: Andres Salomon <dilinger@xxxxxxxxxx> Again, I hadn't Acked this.. However, it does look fine, so: Acked-by: Andres Salomon <dilinger@xxxxxxxxxx> > Cc: Richard Purdie <rpurdie@xxxxxxxxx> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > --- > arch/x86/Kconfig | 7 ++ > arch/x86/platform/geode/Makefile | 1 + > arch/x86/platform/geode/geos.c | 128 > ++++++++++++++++++++++++++++++++++++++ 3 files changed, 136 > insertions(+), 0 deletions(-) create mode 100644 > arch/x86/platform/geode/geos.c > > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig > index 07c3f15..4ee921b 100644 > --- a/arch/x86/Kconfig > +++ b/arch/x86/Kconfig > @@ -2168,6 +2168,13 @@ config ALIX > > Note: You have to set alix.force=1 for boards with Award > BIOS. > +config GEOS > + bool "Traverse Technologies GEOS System Support (LEDS, GPIO, > etc)" > + select GPIOLIB > + depends on DMI > + ---help--- > + This option enables system support for the Traverse > Technologies GEOS. + > endif # X86_32 > > config AMD_NB > diff --git a/arch/x86/platform/geode/Makefile > b/arch/x86/platform/geode/Makefile index 07c9cd0..d8ba564 100644 > --- a/arch/x86/platform/geode/Makefile > +++ b/arch/x86/platform/geode/Makefile > @@ -1 +1,2 @@ > obj-$(CONFIG_ALIX) += alix.o > +obj-$(CONFIG_GEOS) += geos.o > diff --git a/arch/x86/platform/geode/geos.c > b/arch/x86/platform/geode/geos.c new file mode 100644 > index 0000000..c2e6d53 > --- /dev/null > +++ b/arch/x86/platform/geode/geos.c > @@ -0,0 +1,128 @@ > +/* > + * System Specific setup for Traverse Technologies GEOS. > + * At the moment this means setup of GPIO control of LEDs. > + * > + * Copyright (C) 2008 Constantin Baranov <const@xxxxxxxx> > + * Copyright (C) 2011 Ed Wildgoose <kernel@xxxxxxxxxxxxxx> > + * and Philip Prindeville > <philipp@xxxxxxxxxxxxxxxxxxxxx> > + * > + * TODO: There are large similarities with leds-net5501.c > + * by Alessandro Zummo <a.zummo@xxxxxxxxxxxx> > + * In the future leds-net5501.c should be migrated over to platform > + * > + * This program is free software; you can redistribute it and/or > modify > + * it under the terms of the GNU General Public License version 2 > + * as published by the Free Software Foundation. > + */ > + > +#include <linux/kernel.h> > +#include <linux/init.h> > +#include <linux/io.h> > +#include <linux/string.h> > +#include <linux/module.h> > +#include <linux/leds.h> > +#include <linux/platform_device.h> > +#include <linux/gpio.h> > +#include <linux/input.h> > +#include <linux/gpio_keys.h> > +#include <linux/dmi.h> > + > +#include <asm/geode.h> > + > +static struct gpio_keys_button geos_gpio_buttons[] = { > + { > + .code = KEY_RESTART, > + .gpio = 3, > + .active_low = 1, > + .desc = "Reset button", > + .type = EV_KEY, > + .wakeup = 0, > + .debounce_interval = 100, > + .can_disable = 0, > + } > +}; > +static struct gpio_keys_platform_data geos_buttons_data = { > + .buttons = geos_gpio_buttons, > + .nbuttons = ARRAY_SIZE(geos_gpio_buttons), > + .poll_interval = 20, > +}; > + > +static struct platform_device geos_buttons_dev = { > + .name = "gpio-keys-polled", > + .id = 1, > + .dev = { > + .platform_data = &geos_buttons_data, > + } > +}; > + > +static struct gpio_led geos_leds[] = { > + { > + .name = "geos:1", > + .gpio = 6, > + .default_trigger = "default-on", > + .active_low = 1, > + }, > + { > + .name = "geos:2", > + .gpio = 25, > + .default_trigger = "default-off", > + .active_low = 1, > + }, > + { > + .name = "geos:3", > + .gpio = 27, > + .default_trigger = "default-off", > + .active_low = 1, > + }, > +}; > + > +static struct gpio_led_platform_data geos_leds_data = { > + .num_leds = ARRAY_SIZE(geos_leds), > + .leds = geos_leds, > +}; > + > +static struct platform_device geos_leds_dev = { > + .name = "leds-gpio", > + .id = -1, > + .dev.platform_data = &geos_leds_data, > +}; > + > +static struct __initdata platform_device *geos_devs[] = { > + &geos_buttons_dev, > + &geos_leds_dev, > +}; > + > +static void __init register_geos(void) > +{ > + /* Setup LED control through leds-gpio driver */ > + platform_add_devices(geos_devs, ARRAY_SIZE(geos_devs)); > +} > + > +static int __init geos_init(void) > +{ > + const char *vendor, *product; > + > + if (!is_geode()) > + return 0; > + > + vendor = dmi_get_system_info(DMI_SYS_VENDOR); > + if (!vendor || strcmp(vendor, "Traverse Technologies")) > + return 0; > + > + product = dmi_get_system_info(DMI_PRODUCT_NAME); > + if (!product || strcmp(product, "Geos")) > + return 0; > + > + printk(KERN_INFO "%s: system is recognized as \"%s %s\"\n", > + KBUILD_MODNAME, vendor, product); > + > + register_geos(); > + > + return 0; > +} > + > +module_init(geos_init); > + > +MODULE_AUTHOR("Philip Prindeville <philipp@xxxxxxxxxxxxxxxxxxxxx>"); > +MODULE_DESCRIPTION("Traverse Technologies Geos System Setup"); > +MODULE_LICENSE("GPL"); -- To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html