Skip to content

Commit

Permalink
adp5588: use dev_err_probe()
Browse files Browse the repository at this point in the history
Signed-off-by: Nuno Sa <[email protected]>
  • Loading branch information
nunojsa committed Sep 18, 2024
1 parent 574187d commit 0f1f066
Showing 1 changed file with 70 additions and 93 deletions.
163 changes: 70 additions & 93 deletions drivers/input/keyboard/adp5589-keys.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
* Copyright (C) 2010-2011 Analog Devices Inc.
*/

#include "linux/dev_printk.h"
#include <linux/bitfield.h>
#include <linux/cleanup.h>
#include <linux/bitops.h>
Expand Down Expand Up @@ -661,10 +662,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);
Expand Down Expand Up @@ -890,10 +890,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;
}
Expand All @@ -907,12 +905,10 @@ static int adp5589_validate_key(struct adp5589_kpad *kpad, u32 key, bool is_gpi)
u32 gpi = key - kpad->info->gpi_pin_base;

/* 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;
}
Expand All @@ -924,10 +920,9 @@ static int adp5589_validate_key(struct adp5589_kpad *kpad, u32 key, bool is_gpi)
if (BIT(row) & kpad->keypad_en_mask && BIT(col) & 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,
Expand All @@ -944,16 +939,14 @@ static int adp5589_parse_key_array(struct adp5589_kpad *kpad, const char *prop,
return 0;
}

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(%d > %zu) 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(%d > %zu) for %s\n",
*n_keys, max_keys, prop);

error = device_property_read_u32_array(&client->dev, prop, keys,
*n_keys);
Expand Down Expand Up @@ -988,10 +981,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;
Expand All @@ -1014,11 +1005,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;
Expand All @@ -1040,10 +1030,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;
}
Expand All @@ -1058,10 +1047,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(12) & kpad->keypad_en_mask) {
dev_err(&client->dev, "Col4 cannot be used if reset2 is used\n");
return -EINVAL;
}
if (BIT(12) & 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;
}
Expand Down Expand Up @@ -1107,9 +1095,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);
}
}

Expand All @@ -1130,9 +1118,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);
}
}

Expand All @@ -1147,25 +1135,22 @@ 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);

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);
Expand All @@ -1184,11 +1169,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);

keypad_en_mask = prop_val << kpad->info->col_shift;
/*
Expand All @@ -1204,16 +1187,13 @@ 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 (!cols) {
dev_err(&client->dev, "Cannot have columns with no rows!\n");
return -EINVAL;
}
if (!cols)
return dev_err_probe(&client->dev, -EINVAL,
"Cannot have columns with no rows!\n");

keypad_en_mask |= prop_val;
rows = fls(prop_val);
Expand Down Expand Up @@ -1245,9 +1225,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);
}
}

Expand Down Expand Up @@ -1290,19 +1270,17 @@ 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");

error = devm_request_threaded_irq(&client->dev, client->irq,
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;
}
Expand Down Expand Up @@ -1365,10 +1343,9 @@ static int adp5589_probe(struct i2c_client *client)
int error, ret;

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)
Expand Down

0 comments on commit 0f1f066

Please sign in to comment.