All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.