Thread (14 messages) 14 messages, 2 authors, 2015-06-25

[PATCH-v3 1/3] mfd: 88pm800: Add device tree support

From: Krzysztof Kozlowski <hidden>
Date: 2015-06-24 23:58:08
Also in: linux-devicetree, lkml

2015-06-24 18:21 GMT+09:00 Vaibhav Hiremath [off-list ref]:
quoted hunk ↗ jump to hunk
Add DT support to the 88pm800 driver, along with compatible
field for it's sub-devices (rtc, onkey and regulator)

Signed-off-by: Chao Xie <redacted>
Signed-off-by: Vaibhav Hiremath <redacted>
---
 drivers/mfd/88pm800.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)
diff --git a/drivers/mfd/88pm800.c b/drivers/mfd/88pm800.c
index 841717a..059f01a 100644
--- a/drivers/mfd/88pm800.c
+++ b/drivers/mfd/88pm800.c
@@ -27,6 +27,7 @@
 #include <linux/mfd/core.h>
 #include <linux/mfd/88pm80x.h>
 #include <linux/slab.h>
+#include <linux/of_device.h>

 /* Interrupt Registers */
 #define PM800_INT_STATUS1              (0x05)
@@ -121,6 +122,11 @@ static const struct i2c_device_id pm80x_id_table[] = {
 };
 MODULE_DEVICE_TABLE(i2c, pm80x_id_table);

+static const struct of_device_id pm80x_of_match_table[] = {
+       { .compatible = "marvell,88pm800", },
+       {},
+};
+
 static struct resource rtc_resources[] = {
        {
         .name = "88pm80x-rtc",
@@ -133,6 +139,7 @@ static struct resource rtc_resources[] = {
 static struct mfd_cell rtc_devs[] = {
        {
         .name = "88pm80x-rtc",
+        .of_compatible = "marvell,88pm80x-rtc",
         .num_resources = ARRAY_SIZE(rtc_resources),
         .resources = &rtc_resources[0],
         .id = -1,
@@ -151,6 +158,7 @@ static struct resource onkey_resources[] = {
 static const struct mfd_cell onkey_devs[] = {
        {
         .name = "88pm80x-onkey",
+        .of_compatible = "marvell,88pm80x-onkey",
         .num_resources = 1,
         .resources = &onkey_resources[0],
         .id = -1,
@@ -160,6 +168,7 @@ static const struct mfd_cell onkey_devs[] = {
 static const struct mfd_cell regulator_devs[] = {
        {
         .name = "88pm80x-regulator",
+        .of_compatible = "marvell,88pm80x-regulator",
         .id = -1,
        },
 };
@@ -544,8 +553,23 @@ static int pm800_probe(struct i2c_client *client,
        int ret = 0;
        struct pm80x_chip *chip;
        struct pm80x_platform_data *pdata = dev_get_platdata(&client->dev);
+       struct device_node *np = client->dev.of_node;
        struct pm80x_subchip *subchip;

+       if (!pdata && !np) {
+               dev_err(&client->dev,
+                       "pm80x requires platform data or of_node\n");
+               return -EINVAL;
+       }
+
+       if (!pdata) {
+               pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
+               if (!pdata) {
+                       dev_err(&client->dev, "failed to allocaate memory\n");
Generic error message for ENOMEM is not needed. Just return ENOMEM and
the core code will print the error.

Rest looks fine,
Best regards,
Krzysztof
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help