From: Roman Volkov <v1ron@v1ros.org>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Rob Herring <robh+dt@kernel.org>, Pawel Moll <pawel.moll@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
Kumar Gala <galak@codeaurora.org>,
Grant Likely <grant.likely@linaro.org>
Cc: Hans de Goede <hdegoede@redhat.com>,
Jiri Kosina <jkosina@suse.cz>, Wolfram Sang <wsa@the-dreams.de>,
linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org, Roman Volkov <v1ron@mail.ru>,
Roman Volkov <v1ron@v1ros.org>,
Tony Prisk <linux@prisktech.co.nz>
Subject: [PATCH 4/5] i8042: Prepare i8042 driver for DT support
Date: Tue, 3 Feb 2015 00:48:49 +0300 [thread overview]
Message-ID: <1422913730-12663-4-git-send-email-v1ron@v1ros.org> (raw)
In-Reply-To: <1422913730-12663-1-git-send-email-v1ron@v1ros.org>
Use platform_device_probe() instead of platform_create_bundle() when
compiled with DT support, since the latter function is not suitable for
handling the OF device tree.
The order of initialization is changed, since i8042_platform_init() for DT
requires initialized platform_device structure. To avoid searching of the
compatible node twice, the platform_device structure pointer must be passed
to the i8042_platform_init() function right after initialization by
platform_device_probe().
Signed-off-by: Tony Prisk <linux@prisktech.co.nz>
Signed-off-by: Roman Volkov <v1ron@v1ros.org>
---
Yes, many of these ifdefs look ugly. Suggestions on how to avoid this are
welcome (except using of_find_compatible_node() for searching the node twice
before calling the probe function).
The problem is that platform_device_add() causes parent drivers to be probed
while the i8042 is not ready yet (register addresses point to the sky).
I would suggest to do something like deferred probing of the parent drivers,
but this would be a part of another investigation and patchset.
Regards,
Roman.
drivers/input/serio/i8042.c | 33 ++++++++++++++++++++++++++++++---
1 file changed, 30 insertions(+), 3 deletions(-)
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index c53323e..2978b0e 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
@@ -1407,16 +1407,32 @@ static int __init i8042_probe(struct platform_device *dev)
int error;
i8042_platform_device = dev;
+#ifdef SERIO_I8042_DT
+ error = i8042_platform_init(dev);
+ if (error)
+ return error;
+ error = i8042_controller_check();
+ if (error)
+ goto out_platform_exit;
+#endif
if (i8042_reset) {
error = i8042_controller_selftest();
if (error)
+#ifdef SERIO_I8042_DT
+ goto out_platform_exit;
+#else
return error;
+#endif
}
error = i8042_controller_init();
if (error)
+#ifdef SERIO_I8042_DT
+ goto out_platform_exit;
+#else
return error;
+#endif
#ifdef CONFIG_X86
if (i8042_dritek)
@@ -1446,7 +1462,10 @@ static int __init i8042_probe(struct platform_device *dev)
i8042_free_irqs();
i8042_controller_reset(false);
i8042_platform_device = NULL;
-
+#ifdef SERIO_I8042_DT
+ out_platform_exit:
+ i8042_platform_exit();
+#endif
return error;
}
@@ -1483,11 +1502,18 @@ static struct platform_driver i8042_driver = {
static int __init i8042_init(void)
{
+#ifndef SERIO_I8042_DT
struct platform_device *pdev;
+#endif
int err;
dbg_init();
+#ifdef SERIO_I8042_DT
+ err = platform_driver_probe(&i8042_driver, i8042_probe);
+ if (err)
+ return err;
+#else
err = i8042_platform_init();
if (err)
return err;
@@ -1501,14 +1527,15 @@ static int __init i8042_init(void)
err = PTR_ERR(pdev);
goto err_platform_exit;
}
-
+#endif
panic_blink = i8042_panic_blink;
return 0;
-
+#ifndef SERIO_I8042_DT
err_platform_exit:
i8042_platform_exit();
return err;
+#endif
}
static void __exit i8042_exit(void)
--
2.2.2
next prev parent reply other threads:[~2015-02-02 21:48 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-02 21:48 [PATCH 1/5] i8042: intel-8042 DT documentation Roman Volkov
2015-02-02 21:48 ` [PATCH 2/5] i8042: Kernel configuration handling for DT support Roman Volkov
2015-02-02 21:48 ` [PATCH 3/5] i8042: Add OF match table Roman Volkov
2015-02-02 21:48 ` Roman Volkov [this message]
2015-02-03 19:38 ` [PATCH 4/5] i8042: Prepare i8042 driver for DT support Dmitry Torokhov
2015-02-04 9:30 ` Roman Volkov
2015-02-02 21:48 ` [PATCH 5/5] i8042: Add i8042_dt.h glue " Roman Volkov
[not found] ` <1422913730-12663-5-git-send-email-v1ron-oLhuKTjYqW/YtjvyW6yDsg@public.gmane.org>
2015-02-03 11:52 ` Mark Rutland
2015-02-03 19:14 ` Roman Volkov
2015-02-03 19:26 ` Dmitry Torokhov
2015-02-02 22:10 ` [PATCH 1/5] i8042: intel-8042 DT documentation Roman Volkov
2015-02-13 19:52 ` [PATCH v2 0/5] Device Tree support for i8042 driver Roman Volkov
[not found] ` <1423857173-16432-1-git-send-email-v1ron-oLhuKTjYqW/YtjvyW6yDsg@public.gmane.org>
2015-02-13 19:52 ` [PATCH v2 1/5] i8042: intel-8042 DT documentation Roman Volkov
2015-02-13 19:52 ` [PATCH v2 2/5] i8042: Kernel configuration handling for DT support Roman Volkov
2015-02-13 19:52 ` [PATCH v2 3/5] i8042: Add OF match table Roman Volkov
2015-02-13 19:52 ` [PATCH v2 4/5] i8042: Prepare i8042 driver for DT support Roman Volkov
2015-02-13 19:52 ` [PATCH v2 5/5] i8042: Add i8042_dt.h glue " Roman Volkov
2015-02-15 21:11 ` [PATCH v3 0/5] Device Tree support for i8042 driver Roman Volkov
2015-02-15 21:11 ` [PATCH v3 1/5] i8042: intel-8042 DT documentation Roman Volkov
[not found] ` <1424034707-15723-2-git-send-email-v1ron-oLhuKTjYqW/YtjvyW6yDsg@public.gmane.org>
2015-03-15 3:20 ` Dmitry Torokhov
2015-02-15 21:11 ` [PATCH v3 2/5] i8042: Kernel configuration handling for DT support Roman Volkov
2015-02-15 21:11 ` [PATCH v3 3/5] i8042: Add OF match table Roman Volkov
2015-02-15 21:11 ` [PATCH v3 4/5] i8042: Prepare i8042 driver for DT support Roman Volkov
2015-02-15 21:11 ` [PATCH v3 5/5] i8042: Add i8042_dt.h glue " Roman Volkov
2015-06-13 17:57 ` Roman Volkov
2015-02-03 11:38 ` [PATCH 1/5] i8042: intel-8042 DT documentation Mark Rutland
2015-02-03 19:32 ` Dmitry Torokhov
2015-02-10 21:01 ` Roman Volkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1422913730-12663-4-git-send-email-v1ron@v1ros.org \
--to=v1ron@v1ros.org \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=galak@codeaurora.org \
--cc=grant.likely@linaro.org \
--cc=hdegoede@redhat.com \
--cc=ijc+devicetree@hellion.org.uk \
--cc=jkosina@suse.cz \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@prisktech.co.nz \
--cc=mark.rutland@arm.com \
--cc=pawel.moll@arm.com \
--cc=robh+dt@kernel.org \
--cc=v1ron@mail.ru \
--cc=wsa@the-dreams.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.