diff mbox series

[12/13] Input: adp5589-keys: make use of dev_err_probe()

Message ID 20241001-b4-dev-adp5589-fw-conversion-v1-12-fca0149dfc47@analog.com (mailing list archive)
State New
Headers show
Series Input: adp5589: refactor and platform_data removal | expand

Commit Message

Nuno Sa Oct. 1, 2024, 1:41 p.m. UTC
Simplify the probe error path by using dev_err_probe().

Signed-off-by: Nuno Sa <nuno.sa@analog.com>
---
 drivers/input/keyboard/adp5589-keys.c | 226 ++++++++++++++--------------------
 1 file changed, 94 insertions(+), 132 deletions(-)
diff mbox series

Patch

diff --git a/drivers/input/keyboard/adp5589-keys.c b/drivers/input/keyboard/adp5589-keys.c
index 8cbc2c861ffc2854b5621e515712ae107f46a73f..a3d51e36132b73ef07715f256b82e428c81bd6f6 100644
--- a/drivers/input/keyboard/adp5589-keys.c
+++ b/drivers/input/keyboard/adp5589-keys.c
@@ -676,10 +676,9 @@  static int adp5589_gpio_add(struct adp5589_kpad *kpad)
 	kpad->gc.owner = THIS_MODULE;
 
 	if (device_property_present(dev, "interrupt-controller")) {
-		if (!kpad->client->irq) {
-			dev_err(dev, "Unable to serve as interrupt controller without IRQ\n");
-			return -EINVAL;
-		}
+		if (!kpad->client->irq)
+			return dev_err_probe(dev, -EINVAL,
+					     "Unable to serve as interrupt controller without IRQ\n");
 
 		girq = &kpad->gc.irq;
 		gpio_irq_chip_set_chip(girq, &adp5589_irq_chip);
@@ -935,10 +934,8 @@  static int adp5589_setup(struct adp5589_kpad *kpad)
 
 	ret = adp5589_write(client, reg(ADP5589_INT_EN),
 			    OVRFLOW_IEN | GPI_IEN | EVENT_IEN);
-	if (ret) {
-		dev_err(&client->dev, "Write Error\n");
-		return ret;
-	}
+	if (ret)
+		return dev_err_probe(&client->dev, ret, "Write Error\n");
 
 	return 0;
 }
@@ -951,20 +948,15 @@  static int adp5589_validate_key(struct adp5589_kpad *kpad, u32 key, bool is_gpi)
 	if (is_gpi) {
 		u32 gpi = key - kpad->info->gpi_pin_base;
 
-		if (gpi == 5 && !kpad->info->support_row5) {
-			dev_err(&client->dev,
-				"Invalid unlock/reset GPI(%u) not supported\n",
-				gpi);
-			return -EINVAL;
-		}
+		if (gpi == 5 && !kpad->info->support_row5)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid unlock/reset GPI(%u) not supported\n", gpi);
 
 		/* check if it's being used in the keypad */
-		if (BIT(gpi) & kpad->keypad_en_mask) {
-			dev_err(&client->dev,
-				"Invalid unlock/reset GPI(%u) being used in the keypad(%x)\n",
-				gpi, kpad->keypad_en_mask);
-			return -EINVAL;
-		}
+		if (BIT(gpi) & kpad->keypad_en_mask)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid unlock/reset GPI(%u) being used in the keypad(%x)\n",
+					     gpi, kpad->keypad_en_mask);
 
 		return 0;
 	}
@@ -977,10 +969,9 @@  static int adp5589_validate_key(struct adp5589_kpad *kpad, u32 key, bool is_gpi)
 	    BIT(col) << kpad->info->col_shift & kpad->keypad_en_mask)
 		return 0;
 
-	dev_err(&client->dev, "Invalid unlock/reset key(%u) not used in the keypad(%x)\n",
-		key, kpad->keypad_en_mask);
-
-	return -EINVAL;
+	return dev_err_probe(&client->dev, -EINVAL,
+			     "Invalid unlock/reset key(%u) not used in the keypad(%x)\n",
+			     key, kpad->keypad_en_mask);
 }
 
 static int adp5589_parse_key_array(struct adp5589_kpad *kpad, const char *prop,
@@ -997,16 +988,14 @@  static int adp5589_parse_key_array(struct adp5589_kpad *kpad, const char *prop,
 
 	*n_keys = ret;
 
-	if (kpad->info->is_adp5585 && !reset_key) {
-		dev_err(&client->dev, "Unlock keys not supported for adp5585\n");
-		return -EOPNOTSUPP;
-	}
+	if (kpad->info->is_adp5585 && !reset_key)
+		return dev_err_probe(&client->dev, -EOPNOTSUPP,
+				     "Unlock keys not supported for adp5585\n");
 
-	if (*n_keys  > max_keys) {
-		dev_err(&client->dev, "Invalid number of keys(%u > %u) for %s\n",
-			*n_keys, max_keys, prop);
-		return -EINVAL;
-	}
+	if (*n_keys  > max_keys)
+		return dev_err_probe(&client->dev, -EINVAL,
+				     "Invalid number of keys(%u > %u) for %s\n",
+				     *n_keys, max_keys, prop);
 
 	ret = device_property_read_u32_array(&client->dev, prop, keys, *n_keys);
 	if (ret)
@@ -1040,10 +1029,8 @@  static int adp5589_parse_key_array(struct adp5589_kpad *kpad, const char *prop,
 		if (!reset_key && keys[key] == 127)
 			continue;
 
-		dev_err(&client->dev, "Invalid key(%u) for %s\n", keys[key],
-			prop);
-
-		return -EINVAL;
+		return dev_err_probe(&client->dev, -EINVAL,
+				     "Invalid key(%u) for %s\n", keys[key], prop);
 	}
 
 	return 0;
@@ -1066,11 +1053,10 @@  static int adp5589_unlock_parse(struct adp5589_kpad *kpad)
 	error = device_property_read_u32(&client->dev, "adi,unlock-trigger-sec",
 					 &kpad->unlock_time);
 	if (!error) {
-		if (kpad->unlock_time > ADP5589_MAX_UNLOCK_TIME_SEC) {
-			dev_err(&client->dev, "Invalid unlock time(%u > %d)\n",
-				kpad->unlock_time, ADP5589_MAX_UNLOCK_TIME_SEC);
-			return -EINVAL;
-		}
+		if (kpad->unlock_time > ADP5589_MAX_UNLOCK_TIME_SEC)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid unlock time(%u > %d)\n",
+					     kpad->unlock_time, ADP5589_MAX_UNLOCK_TIME_SEC);
 	}
 
 	return 0;
@@ -1092,10 +1078,9 @@  static int adp5589_reset_parse(struct adp5589_kpad *kpad)
 		 * Then R4 is used as reset output. Make sure it's not being used
 		 * in the keypad.
 		 */
-		if (BIT(4) & kpad->keypad_en_mask) {
-			dev_err(&client->dev, "Row4 cannot be used if reset1 is used\n");
-			return -EINVAL;
-		}
+		if (BIT(4) & kpad->keypad_en_mask)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Row4 cannot be used if reset1 is used\n");
 
 		kpad->extend_cfg = R4_EXTEND_CFG;
 	}
@@ -1110,10 +1095,9 @@  static int adp5589_reset_parse(struct adp5589_kpad *kpad)
 		 * Then C4 is used as reset output. Make sure it's not being used
 		 * in the keypad.
 		 */
-		if (BIT(kpad->info->c4_extend_cfg) & kpad->keypad_en_mask) {
-			dev_err(&client->dev, "Col4 cannot be used if reset2 is used\n");
-			return -EINVAL;
-		}
+		if (BIT(kpad->info->c4_extend_cfg) & kpad->keypad_en_mask)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Col4 cannot be used if reset2 is used\n");
 
 		kpad->extend_cfg |= C4_EXTEND_CFG;
 	}
@@ -1159,9 +1143,9 @@  static int adp5589_reset_parse(struct adp5589_kpad *kpad)
 			kpad->reset_cfg |= FIELD_PREP(RESET_TRIGGER_TIME, 7);
 			break;
 		default:
-			dev_err(&client->dev, "Invalid value(%u) for adi,reset-trigger-ms\n",
-				prop_val);
-			return -EINVAL;
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid value(%u) for adi,reset-trigger-ms\n",
+					     prop_val);
 		}
 	}
 
@@ -1182,9 +1166,9 @@  static int adp5589_reset_parse(struct adp5589_kpad *kpad)
 			kpad->reset_cfg |= FIELD_PREP(RESET_PULSE_WIDTH, 3);
 			break;
 		default:
-			dev_err(&client->dev, "Invalid value(%u) for adi,reset-pulse-width-us\n",
-				prop_val);
-			return -EINVAL;
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid value(%u) for adi,reset-pulse-width-us\n",
+					     prop_val);
 		}
 	}
 
@@ -1199,51 +1183,41 @@  static int adp5589_gpio_parse(struct adp5589_kpad *kpad)
 
 	device_for_each_child_node_scoped(&client->dev, child) {
 		error = fwnode_property_read_u32(child, "reg", &reg);
-		if (error) {
-			dev_err(&client->dev, "Failed to get reg property\n");
-			return -EINVAL;
-		}
+		if (error)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Failed to get reg property\n");
 
-		if (reg >= kpad->info->maxgpio) {
-			dev_err(&client->dev, "Invalid gpio(%u > %u)\n",
-				reg, kpad->info->maxgpio);
-			return -EINVAL;
-		}
+		if (reg >= kpad->info->maxgpio)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid gpio(%u > %u)\n",
+					     reg, kpad->info->maxgpio);
 
-		if (BIT(reg) & kpad->keypad_en_mask) {
-			dev_err(&client->dev, "Invalid gpio(%u) used in keypad\n",
-				reg);
-			return -EINVAL;
-		}
+		if (BIT(reg) & kpad->keypad_en_mask)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid gpio(%u) used in keypad\n", reg);
 
-		if (reg == 5 && !kpad->info->support_row5) {
-			dev_err(&client->dev, "Invalid gpio(%u) not supported\n",
-				reg);
-			return -EINVAL;
-		}
+		if (reg == 5 && !kpad->info->support_row5)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid gpio(%u) not supported\n",
+					     reg);
 
 		/* Check if it's gpio4 and R4 is being used as reset */
-		if (kpad->extend_cfg & R4_EXTEND_CFG && reg == 4) {
-			dev_err(&client->dev, "Invalid gpio(%u) used as reset1\n",
-				reg);
-			return -EINVAL;
-		}
+		if (kpad->extend_cfg & R4_EXTEND_CFG && reg == 4)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid gpio(%u) used as reset1\n", reg);
 
 		/* Check if the gpio is being used as reset2 */
-		if (kpad->extend_cfg & C4_EXTEND_CFG && reg == kpad->info->c4_extend_cfg) {
-			dev_err(&client->dev, "Invalid gpio(%u) used as reset2\n",
-				reg);
-			return -EINVAL;
-		}
+		if (kpad->extend_cfg & C4_EXTEND_CFG && reg == kpad->info->c4_extend_cfg)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid gpio(%u) used as reset2\n", reg);
 
 		error = fwnode_property_read_u32(child, "adi,pull-up-ohms",
 						 &pullup);
 		if (!error) {
-			if (pullup != 100 * KILO && pullup != 300 * KILO) {
-				dev_err(&client->dev, "Invalid pullup resistor val(%u)",
-					pullup);
-				return -EINVAL;
-			}
+			if (pullup != 100 * KILO && pullup != 300 * KILO)
+				return dev_err_probe(&client->dev, -EINVAL,
+						     "Invalid pullup resistor val(%u)",
+						     pullup);
 
 			if (pullup == 100 * KILO)
 				__set_bit(reg, &kpad->pull_up_100k_map);
@@ -1262,11 +1236,9 @@  static int adp5589_parse_fw(struct adp5589_kpad *kpad)
 	error = device_property_read_u32(&client->dev, "adi,cols-mask",
 					 &prop_val);
 	if (!error) {
-		if (prop_val > GENMASK(kpad->info->max_col_num, 0)) {
-			dev_err(&client->dev, "Invalid column mask(%x)\n",
-				prop_val);
-			return -EINVAL;
-		}
+		if (prop_val > GENMASK(kpad->info->max_col_num, 0))
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid column mask(%x)\n", prop_val);
 
 		kpad->keypad_en_mask = prop_val << kpad->info->col_shift;
 		/*
@@ -1282,37 +1254,30 @@  static int adp5589_parse_fw(struct adp5589_kpad *kpad)
 	error = device_property_read_u32(&client->dev, "adi,rows-mask",
 					 &prop_val);
 	if (!error) {
-		if (prop_val > GENMASK(kpad->info->max_row_num, 0)) {
-			dev_err(&client->dev, "Invalid row mask(%x)\n",
-				prop_val);
-			return -EINVAL;
-		}
+		if (prop_val > GENMASK(kpad->info->max_row_num, 0))
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid row mask(%x)\n", prop_val);
 
-		if (prop_val & BIT(5) && !kpad->info->support_row5) {
-			dev_err(&client->dev, "Row5 not supported!\n");
-			return -EINVAL;
-		}
+		if (prop_val & BIT(5) && !kpad->info->support_row5)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Row5 not supported!\n");
 
 		kpad->keypad_en_mask |= prop_val;
 		rows = fls(prop_val);
 	}
 
-	if (cols && !rows) {
-		dev_err(&client->dev, "Cannot have columns with no rows!\n");
-		return -EINVAL;
-	}
+	if (cols && !rows)
+		return dev_err_probe(&client->dev, -EINVAL,
+				     "Cannot have columns with no rows!\n");
 
-	if (rows && !cols) {
-		dev_err(&client->dev, "Cannot have rows with no columns!\n");
-		return -EINVAL;
-	}
+	if (rows && !cols)
+		dev_err_probe(&client->dev, -EINVAL,
+			      "Cannot have rows with no columns!\n");
 
 	if (rows && cols) {
-		if (!client->irq) {
-			dev_err(&client->dev,
-				"Keymaps won't work without interrupts\n");
-			return -EINVAL;
-		}
+		if (!client->irq)
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Keymaps won't work without interrupts\n");
 
 		error = matrix_keypad_build_keymap(NULL, NULL, rows, cols,
 						   kpad->keycode, kpad->input);
@@ -1339,9 +1304,9 @@  static int adp5589_parse_fw(struct adp5589_kpad *kpad)
 			kpad->key_poll_time = prop_val / 10 - 1;
 			break;
 		default:
-			dev_err(&client->dev, "Invalid value(%u) for adi,key-poll-ms\n",
-				prop_val);
-			return -EINVAL;
+			return dev_err_probe(&client->dev, -EINVAL,
+					     "Invalid value(%u) for adi,key-poll-ms\n",
+					     prop_val);
 		}
 	}
 
@@ -1384,10 +1349,9 @@  static int adp5589_keypad_add(struct adp5589_kpad *kpad, unsigned int revid)
 		return error;
 
 	error = input_register_device(input);
-	if (error) {
-		dev_err(&client->dev, "unable to register input device\n");
-		return error;
-	}
+	if (error)
+		return dev_err_probe(&client->dev, error,
+				     "unable to register input device\n");
 
 	if (!client->irq)
 		return 0;
@@ -1396,10 +1360,9 @@  static int adp5589_keypad_add(struct adp5589_kpad *kpad, unsigned int revid)
 					  NULL, adp5589_irq,
 					  IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
 					  client->dev.driver->name, kpad);
-	if (error) {
-		dev_err(&client->dev, "unable to request irq %d\n", client->irq);
-		return error;
-	}
+	if (error)
+		return dev_err_probe(&client->dev, error,
+				     "unable to request irq %d\n", client->irq);
 
 	return 0;
 }
@@ -1468,10 +1431,9 @@  static int adp5589_probe(struct i2c_client *client)
 	u8 id;
 
 	if (!i2c_check_functionality(client->adapter,
-				     I2C_FUNC_SMBUS_BYTE_DATA)) {
-		dev_err(&client->dev, "SMBUS Byte Data not Supported\n");
-		return -EIO;
-	}
+				     I2C_FUNC_SMBUS_BYTE_DATA))
+		return dev_err_probe(&client->dev, -EIO,
+				     "SMBUS Byte Data not Supported\n");
 
 	kpad = devm_kzalloc(&client->dev, sizeof(*kpad), GFP_KERNEL);
 	if (!kpad)