From: lee.jones@linaro.org (Lee Jones)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 05/10] mfd: Enable the STMPE MFD for Device Tree
Date: Fri, 5 Oct 2012 16:31:41 +0100 [thread overview]
Message-ID: <1349451107-8009-6-git-send-email-lee.jones@linaro.org> (raw)
In-Reply-To: <1349451107-8009-1-git-send-email-lee.jones@linaro.org>
This patch allows the STMPE Multi-Functional Device to be correctly
initialised when booting with Device Tree support enabled. Its
children are specified by the addition of subordinate devices to the
STMPE node in the Device Tree file.
Cc: Samuel Ortiz <sameo@linux.intel.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
drivers/mfd/stmpe.c | 48 ++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 42 insertions(+), 6 deletions(-)
diff --git a/drivers/mfd/stmpe.c b/drivers/mfd/stmpe.c
index e50ebdf..ba157d4 100644
--- a/drivers/mfd/stmpe.c
+++ b/drivers/mfd/stmpe.c
@@ -885,18 +885,19 @@ static struct irq_domain_ops stmpe_irq_ops = {
.xlate = irq_domain_xlate_twocell,
};
-static int __devinit stmpe_irq_init(struct stmpe *stmpe)
+static int __devinit stmpe_irq_init(struct stmpe *stmpe,
+ struct device_node *np)
{
int base = stmpe->irq_base;
int num_irqs = stmpe->variant->num_irqs;
if (base) {
stmpe->domain = irq_domain_add_legacy(
- NULL, num_irqs, base, 0, &stmpe_irq_ops, stmpe);
+ np, num_irqs, base, 0, &stmpe_irq_ops, stmpe);
}
else {
stmpe->domain = irq_domain_add_linear(
- NULL, num_irqs, &stmpe_irq_ops, stmpe);
+ np, num_irqs, &stmpe_irq_ops, stmpe);
}
if (!stmpe->domain) {
@@ -1016,15 +1017,50 @@ static int __devinit stmpe_devices_init(struct stmpe *stmpe)
return ret;
}
+void __devinit stmpe_of_probe(struct stmpe_platform_data *pdata,
+ struct device_node *np)
+{
+ struct device_node *child;
+
+ of_property_read_u32(np, "st,autosleep-timeout",
+ &pdata->autosleep_timeout);
+
+ pdata->autosleep = (pdata->autosleep_timeout) ? true : false;
+
+ for_each_child_of_node(np, child) {
+ if (!strcmp(child->name, "stmpe_gpio")) {
+ pdata->blocks |= STMPE_BLOCK_GPIO;
+ }
+ if (!strcmp(child->name, "stmpe_keypad")) {
+ pdata->blocks |= STMPE_BLOCK_KEYPAD;
+ }
+ if (!strcmp(child->name, "stmpe_touchscreen")) {
+ pdata->blocks |= STMPE_BLOCK_TOUCHSCREEN;
+ }
+ if (!strcmp(child->name, "stmpe_adc")) {
+ pdata->blocks |= STMPE_BLOCK_ADC;
+ }
+ }
+}
+
/* Called from client specific probe routines */
int __devinit stmpe_probe(struct stmpe_client_info *ci, int partnum)
{
struct stmpe_platform_data *pdata = dev_get_platdata(ci->dev);
+ struct device_node *np = ci->dev->of_node;
struct stmpe *stmpe;
int ret;
- if (!pdata)
- return -EINVAL;
+ if (!pdata) {
+ if (np) {
+ pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+ if (!pdata)
+ return -ENOMEM;
+
+ stmpe_of_probe(pdata, np);
+ } else
+ return -EINVAL;
+ }
stmpe = kzalloc(sizeof(struct stmpe), GFP_KERNEL);
if (!stmpe)
@@ -1080,7 +1116,7 @@ int __devinit stmpe_probe(struct stmpe_client_info *ci, int partnum)
goto free_gpio;
if (stmpe->irq >= 0) {
- ret = stmpe_irq_init(stmpe);
+ ret = stmpe_irq_init(stmpe, np);
if (ret)
goto free_gpio;
--
1.7.9.5
next prev parent reply other threads:[~2012-10-05 15:31 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-05 15:31 [PATCH 00/10] Platform data clean-up and UIB device enablement Lee Jones
2012-10-05 15:31 ` [PATCH 01/10] mfd: Prevent STMPE from abusing mfd_add_devices' irq_base parameter Lee Jones
2012-10-05 15:31 ` [PATCH 02/10] mfd: Provide the STMPE driver with its own IRQ domain Lee Jones
2012-10-05 15:31 ` [PATCH 03/10] mfd: Correct copy and paste mistake in stmpe Lee Jones
2012-10-05 15:31 ` [PATCH 04/10] of/i2c: Add support for I2C_CLIENT_WAKE when booting with Device Tree Lee Jones
2012-10-05 18:13 ` Rob Herring
2012-10-08 7:32 ` Lee Jones
2012-10-05 18:56 ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-05 15:31 ` Lee Jones [this message]
2012-10-05 15:31 ` [PATCH 06/10] Documentation: Describe bindings for STMPE Multi-Functional Device driver Lee Jones
2012-10-05 15:31 ` [PATCH 07/10] input: Enable STMPE keypad driver for Device Tree Lee Jones
2012-10-10 16:50 ` Dmitry Torokhov
2012-10-11 8:10 ` Lee Jones
2012-10-05 15:31 ` [PATCH 08/10] Documentation: Describe bindings for STMPE Keypad driver Lee Jones
2012-10-05 15:31 ` [PATCH 09/10] ARM: ux500: Apply a Device Tree node for the STMPE MFD Lee Jones
2012-10-05 15:31 ` [PATCH 10/10] ARM: ux500: Supply the STMPE keypad Device Tree node to the STUIB DT Lee Jones
2012-10-05 19:53 ` [PATCH 00/10] Platform data clean-up and UIB device enablement Arnd Bergmann
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=1349451107-8009-6-git-send-email-lee.jones@linaro.org \
--to=lee.jones@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).