x86, olpc: Register XO-1 platform devices
authorDaniel Drake <dsd@laptop.org>
Wed, 13 Oct 2010 18:10:42 +0000 (19:10 +0100)
committerH. Peter Anvin <hpa@linux.intel.com>
Wed, 13 Oct 2010 18:51:25 +0000 (11:51 -0700)
The upcoming XO-1 rfkill driver (for drivers/platform/x86) will register
itself with the name "xo1-rfkill", and the already-merged XO-1 poweroff
code uses name "olpc-xo1"

Add the necessary mechanics so that these devices are properly
initialized on XO-1 laptops.

Signed-off-by: Daniel Drake <dsd@laptop.org>
LKML-Reference: <20101013181042.90C8F9D401B@zog.reactivated.net>
Cc: Matthew Garrett <mjg@redhat.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
arch/x86/kernel/olpc.c

index 7472613025983f362efd81c2556ff7d8476cad8d..edaf3fe8dc5e4b0326c0280042b868cd3400bf4c 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/spinlock.h>
 #include <linux/io.h>
 #include <linux/string.h>
+#include <linux/platform_device.h>
 
 #include <asm/geode.h>
 #include <asm/setup.h>
@@ -223,8 +224,25 @@ static bool __init platform_detect(void)
        return true;
 }
 
+static int __init add_xo1_platform_devices(void)
+{
+       struct platform_device *pdev;
+
+       pdev = platform_device_register_simple("xo1-rfkill", -1, NULL, 0);
+       if (IS_ERR(pdev))
+               return PTR_ERR(pdev);
+
+       pdev = platform_device_register_simple("olpc-xo1", -1, NULL, 0);
+       if (IS_ERR(pdev))
+               return PTR_ERR(pdev);
+
+       return 0;
+}
+
 static int __init olpc_init(void)
 {
+       int r = 0;
+
        if (!olpc_ofw_present() || !platform_detect())
                return 0;
 
@@ -251,6 +269,12 @@ static int __init olpc_init(void)
                        olpc_platform_info.boardrev >> 4,
                        olpc_platform_info.ecver);
 
+       if (olpc_platform_info.boardrev < olpc_board_pre(0xd0)) { /* XO-1 */
+               r = add_xo1_platform_devices();
+               if (r)
+                       return r;
+       }
+
        return 0;
 }