xref: /linux/arch/x86/platform/geode/geos.c (revision 566ab427f827b0256d3e8ce0235d088e6a9c28bd)
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/dmi.h>
20 
21 #include <asm/geode.h>
22 
23 #include "geode-common.h"
24 
25 static const struct geode_led geos_leds[] __initconst = {
26 	{ 6, true },
27 	{ 25, false },
28 	{ 27, false },
29 };
30 
31 static void __init register_geos(void)
32 {
33 	geode_create_restart_key(3);
34 	geode_create_leds("geos", geos_leds, ARRAY_SIZE(geos_leds));
35 }
36 
37 static int __init geos_init(void)
38 {
39 	const char *vendor, *product;
40 
41 	if (!is_geode())
42 		return 0;
43 
44 	vendor = dmi_get_system_info(DMI_SYS_VENDOR);
45 	if (!vendor || strcmp(vendor, "Traverse Technologies"))
46 		return 0;
47 
48 	product = dmi_get_system_info(DMI_PRODUCT_NAME);
49 	if (!product || strcmp(product, "Geos"))
50 		return 0;
51 
52 	printk(KERN_INFO "%s: system is recognized as \"%s %s\"\n",
53 	       KBUILD_MODNAME, vendor, product);
54 
55 	register_geos();
56 
57 	return 0;
58 }
59 device_initcall(geos_init);
60