Platform: OLPC: add a stub to drivers/platform/ for the OLPC EC driver
authorAndres Salomon <dilinger@queued.net>
Wed, 11 Jul 2012 02:31:51 +0000 (19:31 -0700)
committerAndres Salomon <dilinger@queued.net>
Wed, 1 Aug 2012 03:27:29 +0000 (23:27 -0400)
The OLPC EC driver has outgrown arch/x86/platform/.  It's time to both
share common code amongst different architectures, as well as move it out
of arch/x86/.  The XO-1.75 is ARM-based, and the EC driver shares a lot of
code with the x86 code.

Signed-off-by: Andres Salomon <dilinger@queued.net>
Acked-by: Paul Fox <pgf@laptop.org>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/include/asm/olpc.h
arch/x86/platform/olpc/olpc.c
drivers/platform/Makefile
drivers/platform/olpc/Makefile [new file with mode: 0644]
drivers/platform/olpc/olpc-ec.c [new file with mode: 0644]
include/linux/olpc-ec.h [new file with mode: 0644]

index 87bdbca72f94854fd1bba2031b4ec007cd3fff72..513e9992771d3bd5f94f230d61f19101ab506eee 100644 (file)
@@ -4,6 +4,7 @@
 #define _ASM_X86_OLPC_H
 
 #include <asm/geode.h>
+#include <linux/olpc-ec.h>
 
 struct olpc_platform_t {
        int flags;
@@ -102,22 +103,8 @@ extern int pci_olpc_init(void);
 
 /* EC related functions */
 
-extern int olpc_ec_cmd(unsigned char cmd, unsigned char *inbuf, size_t inlen,
-               unsigned char *outbuf, size_t outlen);
-
-/* EC commands */
-
-#define EC_FIRMWARE_REV                        0x08
-#define EC_WRITE_SCI_MASK              0x1b
-#define EC_WAKE_UP_WLAN                        0x24
-#define EC_WLAN_LEAVE_RESET            0x25
-#define EC_READ_EB_MODE                        0x2a
-#define EC_SET_SCI_INHIBIT             0x32
-#define EC_SET_SCI_INHIBIT_RELEASE     0x34
-#define EC_WLAN_ENTER_RESET            0x35
-#define EC_WRITE_EXT_SCI_MASK          0x38
-#define EC_SCI_QUERY                   0x84
-#define EC_EXT_SCI_QUERY               0x85
+extern int olpc_ec_cmd_x86(unsigned char cmd, unsigned char *inbuf,
+               size_t inlen, unsigned char *outbuf, size_t outlen);
 
 /* SCI source values */
 
index a4bee53c2e549a5ff28f6ccd8a85c3abce696ec4..796e199ac77ad216d11ac16a0acb90e8e52976b9 100644 (file)
@@ -125,7 +125,7 @@ static int __wait_on_obf(unsigned int line, unsigned int port, int desired)
  * <http://wiki.laptop.org/go/Ec_specification>.  Unfortunately, while
  * OpenFirmware's source is available, the EC's is not.
  */
-int olpc_ec_cmd(unsigned char cmd, unsigned char *inbuf, size_t inlen,
+int olpc_ec_cmd_x86(unsigned char cmd, unsigned char *inbuf, size_t inlen,
                unsigned char *outbuf,  size_t outlen)
 {
        unsigned long flags;
@@ -201,7 +201,7 @@ err:
        spin_unlock_irqrestore(&ec_lock, flags);
        return ret;
 }
-EXPORT_SYMBOL_GPL(olpc_ec_cmd);
+EXPORT_SYMBOL_GPL(olpc_ec_cmd_x86);
 
 void olpc_ec_wakeup_set(u16 value)
 {
index 782953ae4c03789450050ad748d207a58550a900..b17c16ce54adabc1160474b9aaf3fc2342804308 100644 (file)
@@ -3,3 +3,4 @@
 #
 
 obj-$(CONFIG_X86)              += x86/
+obj-$(CONFIG_OLPC)             += olpc/
diff --git a/drivers/platform/olpc/Makefile b/drivers/platform/olpc/Makefile
new file mode 100644 (file)
index 0000000..dc8b26b
--- /dev/null
@@ -0,0 +1,4 @@
+#
+# OLPC XO platform-specific drivers
+#
+obj-$(CONFIG_OLPC)             += olpc-ec.o
diff --git a/drivers/platform/olpc/olpc-ec.c b/drivers/platform/olpc/olpc-ec.c
new file mode 100644 (file)
index 0000000..4202603
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Generic driver for the OLPC Embedded Controller.
+ *
+ * Copyright (C) 2011-2012 One Laptop per Child Foundation.
+ *
+ * Licensed under the GPL v2 or later.
+ */
+#include <linux/module.h>
+#include <asm/olpc.h>
+
+int olpc_ec_cmd(u8 cmd, u8 *inbuf, size_t inlen, u8 *outbuf, size_t outlen)
+{
+       /* Currently a stub; this will be expanded upon later. */
+       return olpc_ec_cmd_x86(cmd, inbuf, inlen, outbuf, outlen);
+}
+EXPORT_SYMBOL_GPL(olpc_ec_cmd);
diff --git a/include/linux/olpc-ec.h b/include/linux/olpc-ec.h
new file mode 100644 (file)
index 0000000..6d4e426
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef _LINUX_OLPC_EC_H
+#define _LINUX_OLPC_EC_H
+
+/* XO-1 EC commands */
+#define EC_FIRMWARE_REV                        0x08
+#define EC_WRITE_SCI_MASK              0x1b
+#define EC_WAKE_UP_WLAN                        0x24
+#define EC_WLAN_LEAVE_RESET            0x25
+#define EC_READ_EB_MODE                        0x2a
+#define EC_SET_SCI_INHIBIT             0x32
+#define EC_SET_SCI_INHIBIT_RELEASE     0x34
+#define EC_WLAN_ENTER_RESET            0x35
+#define EC_WRITE_EXT_SCI_MASK          0x38
+#define EC_SCI_QUERY                   0x84
+#define EC_EXT_SCI_QUERY               0x85
+
+#ifdef CONFIG_OLPC
+
+extern int olpc_ec_cmd(u8 cmd, u8 *inbuf, size_t inlen, u8 *outbuf,
+               size_t outlen);
+
+#else
+
+static inline int olpc_ec_cmd(u8 cmd, u8 *inbuf, size_t inlen, u8 *outbuf,
+               size_t outlen) { return -ENODEV; }
+
+#endif /* CONFIG_OLPC */
+
+#endif /* _LINUX_OLPC_EC_H */