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

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

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ 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.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-only
  2 /*
  3  * System Specific setup for Traverse Technologies GEOS.
  4  * At the moment this means setup of GPIO control of LEDs.
  5  *
  6  * Copyright (C) 2008 Constantin Baranov <const@mimas.ru>
  7  * Copyright (C) 2011 Ed Wildgoose <kernel@wildgooses.com>
  8  *                and Philip Prindeville <philipp@redfish-solutions.com>
  9  *
 10  * TODO: There are large similarities with leds-net5501.c
 11  * by Alessandro Zummo <a.zummo@towertech.it>
 12  * In the future leds-net5501.c should be migrated over to platform
 13  */
 14 
 15 #include <linux/kernel.h>
 16 #include <linux/init.h>
 17 #include <linux/io.h>
 18 #include <linux/string.h>
 19 #include <linux/leds.h>
 20 #include <linux/platform_device.h>
 21 #include <linux/input.h>
 22 #include <linux/gpio_keys.h>
 23 #include <linux/gpio/machine.h>
 24 #include <linux/dmi.h>
 25 
 26 #include <asm/geode.h>
 27 
 28 static struct gpio_keys_button geos_gpio_buttons[] = {
 29         {
 30                 .code = KEY_RESTART,
 31                 .gpio = 3,
 32                 .active_low = 1,
 33                 .desc = "Reset button",
 34                 .type = EV_KEY,
 35                 .wakeup = 0,
 36                 .debounce_interval = 100,
 37                 .can_disable = 0,
 38         }
 39 };
 40 static struct gpio_keys_platform_data geos_buttons_data = {
 41         .buttons = geos_gpio_buttons,
 42         .nbuttons = ARRAY_SIZE(geos_gpio_buttons),
 43         .poll_interval = 20,
 44 };
 45 
 46 static struct platform_device geos_buttons_dev = {
 47         .name = "gpio-keys-polled",
 48         .id = 1,
 49         .dev = {
 50                 .platform_data = &geos_buttons_data,
 51         }
 52 };
 53 
 54 static struct gpio_led geos_leds[] = {
 55         {
 56                 .name = "geos:1",
 57                 .default_trigger = "default-on",
 58         },
 59         {
 60                 .name = "geos:2",
 61                 .default_trigger = "default-off",
 62         },
 63         {
 64                 .name = "geos:3",
 65                 .default_trigger = "default-off",
 66         },
 67 };
 68 
 69 static struct gpio_led_platform_data geos_leds_data = {
 70         .num_leds = ARRAY_SIZE(geos_leds),
 71         .leds = geos_leds,
 72 };
 73 
 74 static struct gpiod_lookup_table geos_leds_gpio_table = {
 75         .dev_id = "leds-gpio",
 76         .table = {
 77                 /* The Geode GPIOs should be on the CS5535 companion chip */
 78                 GPIO_LOOKUP_IDX("cs5535-gpio", 6, NULL, 0, GPIO_ACTIVE_LOW),
 79                 GPIO_LOOKUP_IDX("cs5535-gpio", 25, NULL, 1, GPIO_ACTIVE_LOW),
 80                 GPIO_LOOKUP_IDX("cs5535-gpio", 27, NULL, 2, GPIO_ACTIVE_LOW),
 81                 { }
 82         },
 83 };
 84 
 85 static struct platform_device geos_leds_dev = {
 86         .name = "leds-gpio",
 87         .id = -1,
 88         .dev.platform_data = &geos_leds_data,
 89 };
 90 
 91 static struct platform_device *geos_devs[] __initdata = {
 92         &geos_buttons_dev,
 93         &geos_leds_dev,
 94 };
 95 
 96 static void __init register_geos(void)
 97 {
 98         /* Setup LED control through leds-gpio driver */
 99         gpiod_add_lookup_table(&geos_leds_gpio_table);
100         platform_add_devices(geos_devs, ARRAY_SIZE(geos_devs));
101 }
102 
103 static int __init geos_init(void)
104 {
105         const char *vendor, *product;
106 
107         if (!is_geode())
108                 return 0;
109 
110         vendor = dmi_get_system_info(DMI_SYS_VENDOR);
111         if (!vendor || strcmp(vendor, "Traverse Technologies"))
112                 return 0;
113 
114         product = dmi_get_system_info(DMI_PRODUCT_NAME);
115         if (!product || strcmp(product, "Geos"))
116                 return 0;
117 
118         printk(KERN_INFO "%s: system is recognized as \"%s %s\"\n",
119                KBUILD_MODNAME, vendor, product);
120 
121         register_geos();
122 
123         return 0;
124 }
125 device_initcall(geos_init);
126 

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

kernel.org | git.kernel.org | LWN.net | Project Home | 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.

sflogo.php