lkml.org 
[lkml]   [2019]   [Oct]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 2/2] input: adp5589: Add basic devicetree support
Date
From: Lars-Peter Clausen <lars@metafoo.de>

Add very basic devicetree suppport to the adp5589 allowing the device to be
registered from devicetree.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
---
drivers/input/keyboard/adp5589-keys.c | 33 ++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/drivers/input/keyboard/adp5589-keys.c b/drivers/input/keyboard/adp5589-keys.c
index ed2c13bef1b7..61d1e2f748f3 100644
--- a/drivers/input/keyboard/adp5589-keys.c
+++ b/drivers/input/keyboard/adp5589-keys.c
@@ -987,6 +987,25 @@ static void adp5589_keypad_remove(struct adp5589_kpad *kpad)
}
}

+static int adp5589_i2c_get_driver_data(struct i2c_client *i2c,
+ const struct i2c_device_id *id)
+{
+ const struct of_device_id *match;
+
+ if (id)
+ return id->driver_data;
+
+ if (!IS_ENABLED(CONFIG_OF) || !i2c->dev.of_node)
+ return -ENODEV;
+
+ match = of_match_node(i2c->dev.driver->of_match_table,
+ i2c->dev.of_node);
+ if (match)
+ return (int)match->data;
+
+ return -ENODEV;
+}
+
static const struct adp5589_gpio_platform_data adp5589_default_gpio_pdata = {
.gpio_start = -1,
};
@@ -1019,7 +1038,11 @@ static int adp5589_probe(struct i2c_client *client,

kpad->client = client;

- switch (id->driver_data) {
+ ret = adp5589_i2c_get_driver_data(client, id);
+ if (ret < 0)
+ return ret;
+
+ switch (ret) {
case ADP5585_02:
kpad->support_row5 = true;
/* fall through */
@@ -1119,6 +1142,13 @@ static int adp5589_resume(struct device *dev)

static SIMPLE_DEV_PM_OPS(adp5589_dev_pm_ops, adp5589_suspend, adp5589_resume);

+static const struct of_device_id adp5589_of_match[] = {
+ { .compatible = "adi,adp5585", .data = (void *)ADP5585_01 },
+ { .compatible = "adi,adp5585-02", .data = (void *)ADP5585_02 },
+ { .compatible = "adi,adp5589", .data = (void *)ADP5589 },
+ {}
+};
+
static const struct i2c_device_id adp5589_id[] = {
{"adp5589-keys", ADP5589},
{"adp5585-keys", ADP5585_01},
@@ -1132,6 +1162,7 @@ static struct i2c_driver adp5589_driver = {
.driver = {
.name = KBUILD_MODNAME,
.pm = &adp5589_dev_pm_ops,
+ .of_match_table = adp5589_of_match,
},
.probe = adp5589_probe,
.remove = adp5589_remove,
--
2.20.1
\
 
 \ /
  Last update: 2019-10-29 12:29    [W:0.075 / U:0.120 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site