* [PATCH v3 1/2][RESEND] input: adp5589: Add default platform data
@ 2020-02-05 14:22 Alexandru Ardelean
2020-02-05 14:22 ` [PATCH v3 2/2] input: adp5589: Add basic devicetree support Alexandru Ardelean
0 siblings, 1 reply; 6+ messages in thread
From: Alexandru Ardelean @ 2020-02-05 14:22 UTC (permalink / raw)
To: linux-input, linux-kernel
Cc: dmitry.torokhov, Lars-Peter Clausen, Alexandru Ardelean
From: Lars-Peter Clausen <lars@metafoo.de>
If no platform data is supplied use a dummy platform data that configures
the device in GPIO only mode. This change adds a adp5589_kpad_pdata_get()
helper that returns the default platform-data. This can be later extended
to load configuration from device-trees or ACPI.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
---
Changelog v2 -> v3:
* fix `-Wpointer-to-int-cast` warnings for patch `input: adp5589: Add basic
devicetree support` ; warnings shows up on 64 bit ARCHs
Changelog v1 -> v2:
* adjusted patch `input: adp5589: Add default platform data` by
introducting a `adp5589_kpad_pdata_get()` helper, which returns the
platform-data; the previos patch was based on an older version of the
kernel from the ADI kernel-tree; the driver was sync-ed with the upstream
version
drivers/input/keyboard/adp5589-keys.c | 36 +++++++++++++++++++--------
1 file changed, 26 insertions(+), 10 deletions(-)
diff --git a/drivers/input/keyboard/adp5589-keys.c b/drivers/input/keyboard/adp5589-keys.c
index e7d58e7f0257..c6a801bcdf90 100644
--- a/drivers/input/keyboard/adp5589-keys.c
+++ b/drivers/input/keyboard/adp5589-keys.c
@@ -369,6 +369,25 @@ static const struct adp_constants const_adp5585 = {
.reg = adp5585_reg,
};
+static const struct adp5589_gpio_platform_data adp5589_default_gpio_pdata = {
+ .gpio_start = -1,
+};
+
+static const struct adp5589_kpad_platform_data adp5589_default_pdata = {
+ .gpio_data = &adp5589_default_gpio_pdata,
+};
+
+static const struct adp5589_kpad_platform_data *adp5589_kpad_pdata_get(
+ struct device *dev)
+{
+ const struct adp5589_kpad_platform_data *pdata = dev_get_platdata(dev);
+
+ if (!pdata)
+ pdata = &adp5589_default_pdata;
+
+ return pdata;
+}
+
static int adp5589_read(struct i2c_client *client, u8 reg)
{
int ret = i2c_smbus_read_byte_data(client, reg);
@@ -498,7 +517,8 @@ static int adp5589_build_gpiomap(struct adp5589_kpad *kpad,
static int adp5589_gpio_add(struct adp5589_kpad *kpad)
{
struct device *dev = &kpad->client->dev;
- const struct adp5589_kpad_platform_data *pdata = dev_get_platdata(dev);
+ const struct adp5589_kpad_platform_data *pdata =
+ adp5589_kpad_pdata_get(dev);
const struct adp5589_gpio_platform_data *gpio_data = pdata->gpio_data;
int i, error;
@@ -553,7 +573,8 @@ static int adp5589_gpio_add(struct adp5589_kpad *kpad)
static void adp5589_gpio_remove(struct adp5589_kpad *kpad)
{
struct device *dev = &kpad->client->dev;
- const struct adp5589_kpad_platform_data *pdata = dev_get_platdata(dev);
+ const struct adp5589_kpad_platform_data *pdata =
+ adp5589_kpad_pdata_get(dev);
const struct adp5589_gpio_platform_data *gpio_data = pdata->gpio_data;
int error;
@@ -656,7 +677,7 @@ static int adp5589_setup(struct adp5589_kpad *kpad)
{
struct i2c_client *client = kpad->client;
const struct adp5589_kpad_platform_data *pdata =
- dev_get_platdata(&client->dev);
+ adp5589_kpad_pdata_get(&client->dev);
u8 (*reg) (u8) = kpad->var->reg;
unsigned char evt_mode1 = 0, evt_mode2 = 0, evt_mode3 = 0;
unsigned char pull_mask = 0;
@@ -861,7 +882,7 @@ static int adp5589_keypad_add(struct adp5589_kpad *kpad, unsigned int revid)
{
struct i2c_client *client = kpad->client;
const struct adp5589_kpad_platform_data *pdata =
- dev_get_platdata(&client->dev);
+ adp5589_kpad_pdata_get(&client->dev);
struct input_dev *input;
unsigned int i;
int error;
@@ -992,7 +1013,7 @@ static int adp5589_probe(struct i2c_client *client,
{
struct adp5589_kpad *kpad;
const struct adp5589_kpad_platform_data *pdata =
- dev_get_platdata(&client->dev);
+ adp5589_kpad_pdata_get(&client->dev);
unsigned int revid;
int error, ret;
@@ -1002,11 +1023,6 @@ static int adp5589_probe(struct i2c_client *client,
return -EIO;
}
- if (!pdata) {
- dev_err(&client->dev, "no platform data?\n");
- return -EINVAL;
- }
-
kpad = kzalloc(sizeof(*kpad), GFP_KERNEL);
if (!kpad)
return -ENOMEM;
--
2.20.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 2/2] input: adp5589: Add basic devicetree support
2020-02-05 14:22 [PATCH v3 1/2][RESEND] input: adp5589: Add default platform data Alexandru Ardelean
@ 2020-02-05 14:22 ` Alexandru Ardelean
2020-02-13 6:52 ` Dan Carpenter
0 siblings, 1 reply; 6+ messages in thread
From: Alexandru Ardelean @ 2020-02-05 14:22 UTC (permalink / raw)
To: linux-input, linux-kernel
Cc: dmitry.torokhov, Lars-Peter Clausen, Alexandru Ardelean
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 c6a801bcdf90..56f4ff7fa9c3 100644
--- a/drivers/input/keyboard/adp5589-keys.c
+++ b/drivers/input/keyboard/adp5589-keys.c
@@ -1008,6 +1008,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 (uintptr_t)match->data;
+
+ return -ENODEV;
+}
+
static int adp5589_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
@@ -1029,7 +1048,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 */
@@ -1129,6 +1152,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},
@@ -1142,6 +1172,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
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 2/2] input: adp5589: Add basic devicetree support
2020-02-05 14:22 ` [PATCH v3 2/2] input: adp5589: Add basic devicetree support Alexandru Ardelean
2020-02-13 6:52 ` Dan Carpenter
@ 2020-02-13 6:52 ` Dan Carpenter
0 siblings, 0 replies; 6+ messages in thread
From: Dan Carpenter @ 2020-02-13 6:52 UTC (permalink / raw)
To: kbuild, Alexandru Ardelean
Cc: kbuild-all, linux-input, linux-kernel, dmitry.torokhov,
Lars-Peter Clausen, Alexandru Ardelean
Hi Alexandru,
url: https://urldefense.com/v3/__https://github.com/0day-ci/linux/commits/Alexandru-Ardelean/input-adp5589-Add-default-platform-data/20200206-073944__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunDQ5YstlQ$
base: https://urldefense.com/v3/__https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunDPI_jD3g$ next
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/input/keyboard/adp5589-keys.c:1053 adp5589_probe() warn: possible memory leak of 'kpad'
Old smatch warnings:
drivers/input/keyboard/adp5589-keys.c:913 adp5589_keypad_add() error: we previously assumed 'pdata->gpimap' could be null (see line 902)
# https://urldefense.com/v3/__https://github.com/0day-ci/linux/commit/e537dc5175805cf765da36bdd9cafe98b0a191d9__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunBH8qj3xg$
git remote add linux-review https://urldefense.com/v3/__https://github.com/0day-ci/linux__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunDP90BKkw$
git remote update linux-review
git checkout e537dc5175805cf765da36bdd9cafe98b0a191d9
vim +/kpad +1053 drivers/input/keyboard/adp5589-keys.c
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1030 static int adp5589_probe(struct i2c_client *client,
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1031 const struct i2c_device_id *id)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1032 {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1033 struct adp5589_kpad *kpad;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1034 const struct adp5589_kpad_platform_data *pdata =
ba322093a2bfbb Lars-Peter Clausen 2020-02-05 1035 adp5589_kpad_pdata_get(&client->dev);
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1036 unsigned int revid;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1037 int error, ret;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1038
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1039 if (!i2c_check_functionality(client->adapter,
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1040 I2C_FUNC_SMBUS_BYTE_DATA)) {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1041 dev_err(&client->dev, "SMBUS Byte Data not Supported\n");
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1042 return -EIO;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1043 }
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1044
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1045 kpad = kzalloc(sizeof(*kpad), GFP_KERNEL);
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1046 if (!kpad)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1047 return -ENOMEM;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1048
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1049 kpad->client = client;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1050
e537dc5175805c Lars-Peter Clausen 2020-02-05 1051 ret = adp5589_i2c_get_driver_data(client, id);
e537dc5175805c Lars-Peter Clausen 2020-02-05 1052 if (ret < 0)
e537dc5175805c Lars-Peter Clausen 2020-02-05 @1053 return ret;
error = ret;
goto err_free_mem;
Better to just delete the "error" variable though and make everything
ret.
e537dc5175805c Lars-Peter Clausen 2020-02-05 1054
e537dc5175805c Lars-Peter Clausen 2020-02-05 1055 switch (ret) {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1056 case ADP5585_02:
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1057 kpad->support_row5 = true;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1058 /* fall through */
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1059 case ADP5585_01:
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1060 kpad->is_adp5585 = true;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1061 kpad->var = &const_adp5585;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1062 break;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1063 case ADP5589:
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1064 kpad->support_row5 = true;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1065 kpad->var = &const_adp5589;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1066 break;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1067 }
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1068
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1069 ret = adp5589_read(client, ADP5589_5_ID);
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1070 if (ret < 0) {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1071 error = ret;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1072 goto err_free_mem;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1073 }
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1074
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1075 revid = (u8) ret & ADP5589_5_DEVICE_ID_MASK;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1076
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1077 if (pdata->keymapsize) {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1078 error = adp5589_keypad_add(kpad, revid);
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1079 if (error)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1080 goto err_free_mem;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1081 }
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1082
9d2e173644bb5c Michael Hennerich 2011-05-19 1083 error = adp5589_setup(kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1084 if (error)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1085 goto err_keypad_remove;
9d2e173644bb5c Michael Hennerich 2011-05-19 1086
9d2e173644bb5c Michael Hennerich 2011-05-19 1087 if (kpad->gpimapsize)
9d2e173644bb5c Michael Hennerich 2011-05-19 1088 adp5589_report_switch_state(kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1089
9d2e173644bb5c Michael Hennerich 2011-05-19 1090 error = adp5589_gpio_add(kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1091 if (error)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1092 goto err_keypad_remove;
9d2e173644bb5c Michael Hennerich 2011-05-19 1093
9d2e173644bb5c Michael Hennerich 2011-05-19 1094 i2c_set_clientdata(client, kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1095
9d2e173644bb5c Michael Hennerich 2011-05-19 1096 dev_info(&client->dev, "Rev.%d keypad, irq %d\n", revid, client->irq);
9d2e173644bb5c Michael Hennerich 2011-05-19 1097 return 0;
9d2e173644bb5c Michael Hennerich 2011-05-19 1098
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1099 err_keypad_remove:
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1100 adp5589_keypad_remove(kpad);
3f48e735435851 Michael Hennerich 2011-10-18 1101 err_free_mem:
9d2e173644bb5c Michael Hennerich 2011-05-19 1102 kfree(kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1103
9d2e173644bb5c Michael Hennerich 2011-05-19 1104 return error;
9d2e173644bb5c Michael Hennerich 2011-05-19 1105 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://urldefense.com/v3/__https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunCDo3i4pw$
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 2/2] input: adp5589: Add basic devicetree support
@ 2020-02-13 6:52 ` Dan Carpenter
0 siblings, 0 replies; 6+ messages in thread
From: Dan Carpenter @ 2020-02-13 6:52 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 7297 bytes --]
Hi Alexandru,
url: https://urldefense.com/v3/__https://github.com/0day-ci/linux/commits/Alexandru-Ardelean/input-adp5589-Add-default-platform-data/20200206-073944__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunDQ5YstlQ$
base: https://urldefense.com/v3/__https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunDPI_jD3g$ next
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/input/keyboard/adp5589-keys.c:1053 adp5589_probe() warn: possible memory leak of 'kpad'
Old smatch warnings:
drivers/input/keyboard/adp5589-keys.c:913 adp5589_keypad_add() error: we previously assumed 'pdata->gpimap' could be null (see line 902)
# https://urldefense.com/v3/__https://github.com/0day-ci/linux/commit/e537dc5175805cf765da36bdd9cafe98b0a191d9__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunBH8qj3xg$
git remote add linux-review https://urldefense.com/v3/__https://github.com/0day-ci/linux__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunDP90BKkw$
git remote update linux-review
git checkout e537dc5175805cf765da36bdd9cafe98b0a191d9
vim +/kpad +1053 drivers/input/keyboard/adp5589-keys.c
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1030 static int adp5589_probe(struct i2c_client *client,
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1031 const struct i2c_device_id *id)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1032 {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1033 struct adp5589_kpad *kpad;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1034 const struct adp5589_kpad_platform_data *pdata =
ba322093a2bfbb Lars-Peter Clausen 2020-02-05 1035 adp5589_kpad_pdata_get(&client->dev);
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1036 unsigned int revid;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1037 int error, ret;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1038
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1039 if (!i2c_check_functionality(client->adapter,
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1040 I2C_FUNC_SMBUS_BYTE_DATA)) {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1041 dev_err(&client->dev, "SMBUS Byte Data not Supported\n");
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1042 return -EIO;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1043 }
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1044
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1045 kpad = kzalloc(sizeof(*kpad), GFP_KERNEL);
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1046 if (!kpad)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1047 return -ENOMEM;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1048
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1049 kpad->client = client;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1050
e537dc5175805c Lars-Peter Clausen 2020-02-05 1051 ret = adp5589_i2c_get_driver_data(client, id);
e537dc5175805c Lars-Peter Clausen 2020-02-05 1052 if (ret < 0)
e537dc5175805c Lars-Peter Clausen 2020-02-05 @1053 return ret;
error = ret;
goto err_free_mem;
Better to just delete the "error" variable though and make everything
ret.
e537dc5175805c Lars-Peter Clausen 2020-02-05 1054
e537dc5175805c Lars-Peter Clausen 2020-02-05 1055 switch (ret) {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1056 case ADP5585_02:
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1057 kpad->support_row5 = true;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1058 /* fall through */
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1059 case ADP5585_01:
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1060 kpad->is_adp5585 = true;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1061 kpad->var = &const_adp5585;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1062 break;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1063 case ADP5589:
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1064 kpad->support_row5 = true;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1065 kpad->var = &const_adp5589;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1066 break;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1067 }
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1068
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1069 ret = adp5589_read(client, ADP5589_5_ID);
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1070 if (ret < 0) {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1071 error = ret;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1072 goto err_free_mem;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1073 }
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1074
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1075 revid = (u8) ret & ADP5589_5_DEVICE_ID_MASK;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1076
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1077 if (pdata->keymapsize) {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1078 error = adp5589_keypad_add(kpad, revid);
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1079 if (error)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1080 goto err_free_mem;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1081 }
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1082
9d2e173644bb5c Michael Hennerich 2011-05-19 1083 error = adp5589_setup(kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1084 if (error)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1085 goto err_keypad_remove;
9d2e173644bb5c Michael Hennerich 2011-05-19 1086
9d2e173644bb5c Michael Hennerich 2011-05-19 1087 if (kpad->gpimapsize)
9d2e173644bb5c Michael Hennerich 2011-05-19 1088 adp5589_report_switch_state(kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1089
9d2e173644bb5c Michael Hennerich 2011-05-19 1090 error = adp5589_gpio_add(kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1091 if (error)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1092 goto err_keypad_remove;
9d2e173644bb5c Michael Hennerich 2011-05-19 1093
9d2e173644bb5c Michael Hennerich 2011-05-19 1094 i2c_set_clientdata(client, kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1095
9d2e173644bb5c Michael Hennerich 2011-05-19 1096 dev_info(&client->dev, "Rev.%d keypad, irq %d\n", revid, client->irq);
9d2e173644bb5c Michael Hennerich 2011-05-19 1097 return 0;
9d2e173644bb5c Michael Hennerich 2011-05-19 1098
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1099 err_keypad_remove:
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1100 adp5589_keypad_remove(kpad);
3f48e735435851 Michael Hennerich 2011-10-18 1101 err_free_mem:
9d2e173644bb5c Michael Hennerich 2011-05-19 1102 kfree(kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1103
9d2e173644bb5c Michael Hennerich 2011-05-19 1104 return error;
9d2e173644bb5c Michael Hennerich 2011-05-19 1105 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://urldefense.com/v3/__https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunCDo3i4pw$
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 2/2] input: adp5589: Add basic devicetree support
@ 2020-02-13 6:52 ` Dan Carpenter
0 siblings, 0 replies; 6+ messages in thread
From: Dan Carpenter @ 2020-02-13 6:52 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 7297 bytes --]
Hi Alexandru,
url: https://urldefense.com/v3/__https://github.com/0day-ci/linux/commits/Alexandru-Ardelean/input-adp5589-Add-default-platform-data/20200206-073944__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunDQ5YstlQ$
base: https://urldefense.com/v3/__https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunDPI_jD3g$ next
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/input/keyboard/adp5589-keys.c:1053 adp5589_probe() warn: possible memory leak of 'kpad'
Old smatch warnings:
drivers/input/keyboard/adp5589-keys.c:913 adp5589_keypad_add() error: we previously assumed 'pdata->gpimap' could be null (see line 902)
# https://urldefense.com/v3/__https://github.com/0day-ci/linux/commit/e537dc5175805cf765da36bdd9cafe98b0a191d9__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunBH8qj3xg$
git remote add linux-review https://urldefense.com/v3/__https://github.com/0day-ci/linux__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunDP90BKkw$
git remote update linux-review
git checkout e537dc5175805cf765da36bdd9cafe98b0a191d9
vim +/kpad +1053 drivers/input/keyboard/adp5589-keys.c
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1030 static int adp5589_probe(struct i2c_client *client,
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1031 const struct i2c_device_id *id)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1032 {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1033 struct adp5589_kpad *kpad;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1034 const struct adp5589_kpad_platform_data *pdata =
ba322093a2bfbb Lars-Peter Clausen 2020-02-05 1035 adp5589_kpad_pdata_get(&client->dev);
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1036 unsigned int revid;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1037 int error, ret;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1038
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1039 if (!i2c_check_functionality(client->adapter,
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1040 I2C_FUNC_SMBUS_BYTE_DATA)) {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1041 dev_err(&client->dev, "SMBUS Byte Data not Supported\n");
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1042 return -EIO;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1043 }
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1044
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1045 kpad = kzalloc(sizeof(*kpad), GFP_KERNEL);
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1046 if (!kpad)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1047 return -ENOMEM;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1048
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1049 kpad->client = client;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1050
e537dc5175805c Lars-Peter Clausen 2020-02-05 1051 ret = adp5589_i2c_get_driver_data(client, id);
e537dc5175805c Lars-Peter Clausen 2020-02-05 1052 if (ret < 0)
e537dc5175805c Lars-Peter Clausen 2020-02-05 @1053 return ret;
error = ret;
goto err_free_mem;
Better to just delete the "error" variable though and make everything
ret.
e537dc5175805c Lars-Peter Clausen 2020-02-05 1054
e537dc5175805c Lars-Peter Clausen 2020-02-05 1055 switch (ret) {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1056 case ADP5585_02:
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1057 kpad->support_row5 = true;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1058 /* fall through */
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1059 case ADP5585_01:
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1060 kpad->is_adp5585 = true;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1061 kpad->var = &const_adp5585;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1062 break;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1063 case ADP5589:
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1064 kpad->support_row5 = true;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1065 kpad->var = &const_adp5589;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1066 break;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1067 }
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1068
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1069 ret = adp5589_read(client, ADP5589_5_ID);
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1070 if (ret < 0) {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1071 error = ret;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1072 goto err_free_mem;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1073 }
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1074
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1075 revid = (u8) ret & ADP5589_5_DEVICE_ID_MASK;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1076
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1077 if (pdata->keymapsize) {
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1078 error = adp5589_keypad_add(kpad, revid);
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1079 if (error)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1080 goto err_free_mem;
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1081 }
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1082
9d2e173644bb5c Michael Hennerich 2011-05-19 1083 error = adp5589_setup(kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1084 if (error)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1085 goto err_keypad_remove;
9d2e173644bb5c Michael Hennerich 2011-05-19 1086
9d2e173644bb5c Michael Hennerich 2011-05-19 1087 if (kpad->gpimapsize)
9d2e173644bb5c Michael Hennerich 2011-05-19 1088 adp5589_report_switch_state(kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1089
9d2e173644bb5c Michael Hennerich 2011-05-19 1090 error = adp5589_gpio_add(kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1091 if (error)
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1092 goto err_keypad_remove;
9d2e173644bb5c Michael Hennerich 2011-05-19 1093
9d2e173644bb5c Michael Hennerich 2011-05-19 1094 i2c_set_clientdata(client, kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1095
9d2e173644bb5c Michael Hennerich 2011-05-19 1096 dev_info(&client->dev, "Rev.%d keypad, irq %d\n", revid, client->irq);
9d2e173644bb5c Michael Hennerich 2011-05-19 1097 return 0;
9d2e173644bb5c Michael Hennerich 2011-05-19 1098
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1099 err_keypad_remove:
cb3efd5a38855e Lars-Peter Clausen 2019-10-23 1100 adp5589_keypad_remove(kpad);
3f48e735435851 Michael Hennerich 2011-10-18 1101 err_free_mem:
9d2e173644bb5c Michael Hennerich 2011-05-19 1102 kfree(kpad);
9d2e173644bb5c Michael Hennerich 2011-05-19 1103
9d2e173644bb5c Michael Hennerich 2011-05-19 1104 return error;
9d2e173644bb5c Michael Hennerich 2011-05-19 1105 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://urldefense.com/v3/__https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org__;!!GqivPVa7Brio!MY2_vTOsanTGzkj1sG9gmxs-c72f_T0MK8vYxgXFLKcqgchKaYGVs4ZRunCDo3i4pw$
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 2/2] input: adp5589: Add basic devicetree support
2019-10-31 9:03 [PATCH v3 1/2] input: adp5589: Add default platform data Alexandru Ardelean
@ 2019-10-31 9:03 ` Alexandru Ardelean
0 siblings, 0 replies; 6+ messages in thread
From: Alexandru Ardelean @ 2019-10-31 9:03 UTC (permalink / raw)
To: linux-input, linux-kernel; +Cc: dmitry.torokhov, lars, Alexandru Ardelean
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>
---
Changelog v2 -> v3:
* fix `-Wpointer-to-int-cast` warnings for patch `input: adp5589: Add basic
devicetree support` ; warnings shows up on 64 bit ARCHs
Changelog v1 -> v2:
* adjusted patch `input: adp5589: Add default platform data` by
introducting a `adp5589_kpad_pdata_get()` helper, which returns the
platform-data; the previos patch was based on an older version of the
kernel from the ADI kernel-tree; the driver was sync-ed with the upstream
version
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 c6a801bcdf90..56f4ff7fa9c3 100644
--- a/drivers/input/keyboard/adp5589-keys.c
+++ b/drivers/input/keyboard/adp5589-keys.c
@@ -1008,6 +1008,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 (uintptr_t)match->data;
+
+ return -ENODEV;
+}
+
static int adp5589_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
@@ -1029,7 +1048,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 */
@@ -1129,6 +1152,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},
@@ -1142,6 +1172,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
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-02-13 6:53 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-05 14:22 [PATCH v3 1/2][RESEND] input: adp5589: Add default platform data Alexandru Ardelean
2020-02-05 14:22 ` [PATCH v3 2/2] input: adp5589: Add basic devicetree support Alexandru Ardelean
2020-02-13 6:52 ` Dan Carpenter
2020-02-13 6:52 ` Dan Carpenter
2020-02-13 6:52 ` Dan Carpenter
-- strict thread matches above, loose matches on Subject: below --
2019-10-31 9:03 [PATCH v3 1/2] input: adp5589: Add default platform data Alexandru Ardelean
2019-10-31 9:03 ` [PATCH v3 2/2] input: adp5589: Add basic devicetree support Alexandru Ardelean
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.