Merge tag 'platform-drivers-x86-v5.3-1' of git://git.infradead.org/linux-platform...
[linux-2.6-microblaze.git] / arch / x86 / platform / olpc / olpc.c
index c85d485..ee2beda 100644 (file)
@@ -26,9 +26,6 @@
 struct olpc_platform_t olpc_platform_info;
 EXPORT_SYMBOL_GPL(olpc_platform_info);
 
-/* EC event mask to be applied during suspend (defining wakeup sources). */
-static u16 ec_wakeup_mask;
-
 /* what the timeout *should* be (in ms) */
 #define EC_BASE_TIMEOUT 20
 
@@ -182,83 +179,6 @@ err:
        return ret;
 }
 
-void olpc_ec_wakeup_set(u16 value)
-{
-       ec_wakeup_mask |= value;
-}
-EXPORT_SYMBOL_GPL(olpc_ec_wakeup_set);
-
-void olpc_ec_wakeup_clear(u16 value)
-{
-       ec_wakeup_mask &= ~value;
-}
-EXPORT_SYMBOL_GPL(olpc_ec_wakeup_clear);
-
-/*
- * Returns true if the compile and runtime configurations allow for EC events
- * to wake the system.
- */
-bool olpc_ec_wakeup_available(void)
-{
-       if (!machine_is_olpc())
-               return false;
-
-       /*
-        * XO-1 EC wakeups are available when olpc-xo1-sci driver is
-        * compiled in
-        */
-#ifdef CONFIG_OLPC_XO1_SCI
-       if (olpc_platform_info.boardrev < olpc_board_pre(0xd0)) /* XO-1 */
-               return true;
-#endif
-
-       /*
-        * XO-1.5 EC wakeups are available when olpc-xo15-sci driver is
-        * compiled in
-        */
-#ifdef CONFIG_OLPC_XO15_SCI
-       if (olpc_platform_info.boardrev >= olpc_board_pre(0xd0)) /* XO-1.5 */
-               return true;
-#endif
-
-       return false;
-}
-EXPORT_SYMBOL_GPL(olpc_ec_wakeup_available);
-
-int olpc_ec_mask_write(u16 bits)
-{
-       if (olpc_platform_info.flags & OLPC_F_EC_WIDE_SCI) {
-               __be16 ec_word = cpu_to_be16(bits);
-               return olpc_ec_cmd(EC_WRITE_EXT_SCI_MASK, (void *) &ec_word, 2,
-                                  NULL, 0);
-       } else {
-               unsigned char ec_byte = bits & 0xff;
-               return olpc_ec_cmd(EC_WRITE_SCI_MASK, &ec_byte, 1, NULL, 0);
-       }
-}
-EXPORT_SYMBOL_GPL(olpc_ec_mask_write);
-
-int olpc_ec_sci_query(u16 *sci_value)
-{
-       int ret;
-
-       if (olpc_platform_info.flags & OLPC_F_EC_WIDE_SCI) {
-               __be16 ec_word;
-               ret = olpc_ec_cmd(EC_EXT_SCI_QUERY,
-                       NULL, 0, (void *) &ec_word, 2);
-               if (ret == 0)
-                       *sci_value = be16_to_cpu(ec_word);
-       } else {
-               unsigned char ec_byte;
-               ret = olpc_ec_cmd(EC_SCI_QUERY, NULL, 0, &ec_byte, 1);
-               if (ret == 0)
-                       *sci_value = ec_byte;
-       }
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(olpc_ec_sci_query);
-
 static bool __init check_ofw_architecture(struct device_node *root)
 {
        const char *olpc_arch;
@@ -292,6 +212,10 @@ static bool __init platform_detect(void)
        if (success) {
                olpc_platform_info.boardrev = get_board_revision(root);
                olpc_platform_info.flags |= OLPC_F_PRESENT;
+
+               pr_info("OLPC board revision %s%X\n",
+                       ((olpc_platform_info.boardrev & 0xf) < 8) ? "pre" : "",
+                       olpc_platform_info.boardrev >> 4);
        }
 
        of_node_put(root);
@@ -311,27 +235,8 @@ static int __init add_xo1_platform_devices(void)
        return PTR_ERR_OR_ZERO(pdev);
 }
 
-static int olpc_xo1_ec_probe(struct platform_device *pdev)
-{
-       /* get the EC revision */
-       olpc_ec_cmd(EC_FIRMWARE_REV, NULL, 0,
-                       (unsigned char *) &olpc_platform_info.ecver, 1);
-
-       /* EC version 0x5f adds support for wide SCI mask */
-       if (olpc_platform_info.ecver >= 0x5f)
-               olpc_platform_info.flags |= OLPC_F_EC_WIDE_SCI;
-
-       pr_info("OLPC board revision %s%X (EC=%x)\n",
-                       ((olpc_platform_info.boardrev & 0xf) < 8) ? "pre" : "",
-                       olpc_platform_info.boardrev >> 4,
-                       olpc_platform_info.ecver);
-
-       return 0;
-}
 static int olpc_xo1_ec_suspend(struct platform_device *pdev)
 {
-       olpc_ec_mask_write(ec_wakeup_mask);
-
        /*
         * Squelch SCIs while suspended.  This is a fix for
         * <http://dev.laptop.org/ticket/1835>.
@@ -355,15 +260,27 @@ static int olpc_xo1_ec_resume(struct platform_device *pdev)
 }
 
 static struct olpc_ec_driver ec_xo1_driver = {
-       .probe = olpc_xo1_ec_probe,
        .suspend = olpc_xo1_ec_suspend,
        .resume = olpc_xo1_ec_resume,
        .ec_cmd = olpc_xo1_ec_cmd,
+#ifdef CONFIG_OLPC_XO1_SCI
+       /*
+        * XO-1 EC wakeups are available when olpc-xo1-sci driver is
+        * compiled in
+        */
+       .wakeup_available = true,
+#endif
 };
 
 static struct olpc_ec_driver ec_xo1_5_driver = {
-       .probe = olpc_xo1_ec_probe,
        .ec_cmd = olpc_xo1_ec_cmd,
+#ifdef CONFIG_OLPC_XO1_5_SCI
+       /*
+        * XO-1.5 EC wakeups are available when olpc-xo15-sci driver is
+        * compiled in
+        */
+       .wakeup_available = true,
+#endif
 };
 
 static int __init olpc_init(void)