From patchwork Wed Oct 2 10:51:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuno Sa via B4 Relay X-Patchwork-Id: 13819593 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 769991E766B for ; Wed, 2 Oct 2024 10:51:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727866312; cv=none; b=jiZ5QuFBr+CEDhACkdaL7Yqq3ntADQnRVdwBEWnKhAZh5pGxKt8ePqExxP2lhO9jBbcSlzWbWZEm+VgRWB0AT84YSZLBEZ2i7sPCPoF3vTrkSK8gs8yibvsuqCNLwsf1R8bKTHSKhel7q3u4BpSYPP1BDpn6Ybnf5amnFgX4FiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727866312; c=relaxed/simple; bh=pJPrbC14shf1WTb0cyWwI1A8LE5gcJao3AirjxVPZG4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=q9qifI2/3vVazF8gDWUOY2eUmHvdjzdO19gIJ+Q0WsoMJkQNV3B1afGGPhFvxTI/i0jZUbVGpj7vP0pr53MgTiyVdl5STj/5JGpjz3uNSPwE1UL0o1RTN/52hvEFb0SgSEs7kU6Zo2wsqp5Hq0RnEtZlLv4S+lxrVFKx8Nk97IQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=O5mAml65; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="O5mAml65" Received: by smtp.kernel.org (Postfix) with ESMTPS id 29818C4CECD; Wed, 2 Oct 2024 10:51:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727866312; bh=pJPrbC14shf1WTb0cyWwI1A8LE5gcJao3AirjxVPZG4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=O5mAml65q62FC6SQIyGRXM/lklY2veXiL5VE3KNnTptRXOowTL8yNLwV4nS5u1V62 XosPBBhSXw5bSwuZsOtBZOq01QZd8T/0kXg26m/8M8teD9LJaEerV4w0xoSxVy+kw+ As2L8pKYHuN7k7uIfb8lOj7KiTNF98jb54zPycruguvvn/Ye0uqCNfTgB0XpaGzJMk WuAs/tXjt+hapenV738hBOCSMRGoqEN4nI9gLx7OfAnAa4p+ywXKjfN5U6ktxBoa1o yS8bWSWM5l3Ikh4z372LLiiipAEHJCN8GdzKFtTGQzV3kf+NRvqJdwRJxNGd0HNskE jIgkMFJirkC6g== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 20804CF31B0; Wed, 2 Oct 2024 10:51:52 +0000 (UTC) From: Nuno Sa via B4 Relay Date: Wed, 02 Oct 2024 12:51:50 +0200 Subject: [PATCH 1/4] Input: adp5588-keys: bail on returned error Precedence: bulk X-Mailing-List: linux-input@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20241002-fix-adp5588-read-refactor-v1-1-28800f1b9773@analog.com> References: <20241002-fix-adp5588-read-refactor-v1-0-28800f1b9773@analog.com> In-Reply-To: <20241002-fix-adp5588-read-refactor-v1-0-28800f1b9773@analog.com> To: Michael Hennerich , Dmitry Torokhov Cc: linux-input@vger.kernel.org X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=ed25519-sha256; t=1727866310; l=2989; i=nuno.sa@analog.com; s=20231116; h=from:subject:message-id; bh=jihJnS6nvrxqMZA4GxnLZ7/1dJtPOBtIIDbrJ2sgXYM=; b=R0Gw0ynVFWoLMgJefki/YQEbnRkpj5qd6N+tmElPN6xpCVIgkqkPJgW+0O4YHDVFlrxqQm7Ii xJpdYC2xbhfDK3TmwLSfJc2YulsAXwLFNNod6KAZFT7MAMJLTLH10Gk X-Developer-Key: i=nuno.sa@analog.com; a=ed25519; pk=3NQwYA013OUYZsmDFBf8rmyyr5iQlxV/9H4/Df83o1E= X-Endpoint-Received: by B4 Relay for nuno.sa@analog.com/20231116 with auth_id=100 X-Original-From: Nuno Sa Reply-To: nuno.sa@analog.com From: Nuno Sa Bail out in case adp5588_read() return an error code. Not doing so is asking for problems. While at it, did a small refactor in adp5588_gpio_get_value() to make it easier to handle checking the return value. Suggested-by: Dmitry Torokhov Signed-off-by: Nuno Sa --- drivers/input/keyboard/adp5588-keys.c | 39 ++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/drivers/input/keyboard/adp5588-keys.c b/drivers/input/keyboard/adp5588-keys.c index d25d63a807f23..9ac68baf01179 100644 --- a/drivers/input/keyboard/adp5588-keys.c +++ b/drivers/input/keyboard/adp5588-keys.c @@ -225,9 +225,11 @@ static int adp5588_gpio_get_value(struct gpio_chip *chip, unsigned int off) guard(mutex)(&kpad->gpio_lock); if (kpad->dir[bank] & bit) - val = kpad->dat_out[bank]; - else - val = adp5588_read(kpad->client, GPIO_DAT_STAT1 + bank); + return !!(kpad->dat_out[bank] & bit); + + val = adp5588_read(kpad->client, GPIO_DAT_STAT1 + bank); + if (val < 0) + return val; return !!(val & bit); } @@ -455,8 +457,16 @@ static int adp5588_gpio_add(struct adp5588_kpad *kpad) for (i = 0; i <= ADP5588_BANK(ADP5588_MAXGPIO); i++) { kpad->dat_out[i] = adp5588_read(kpad->client, GPIO_DAT_OUT1 + i); + if (kpad->dat_out[i] < 0) + return kpad->dat_out[i]; + kpad->dir[i] = adp5588_read(kpad->client, GPIO_DIR1 + i); + if (kpad->dir[i] < 0) + return kpad->dir[i]; + kpad->pull_dis[i] = adp5588_read(kpad->client, GPIO_PULL1 + i); + if (kpad->pull_dis[i] < 0) + return kpad->pull_dis[i]; } return 0; @@ -519,9 +529,14 @@ static void adp5588_report_events(struct adp5588_kpad *kpad, int ev_cnt) int i; for (i = 0; i < ev_cnt; i++) { - int key = adp5588_read(kpad->client, KEY_EVENTA + i); - int key_val = key & KEY_EV_MASK; - int key_press = key & KEY_EV_PRESSED; + int key, key_val, key_press; + + key = adp5588_read(kpad->client, KEY_EVENTA + i); + if (key < 0) + return; + + key_val = key & KEY_EV_MASK; + key_press = key & KEY_EV_PRESSED; if (key_val >= GPI_PIN_BASE && key_val <= GPI_PIN_END) { /* gpio line used as IRQ source */ @@ -572,18 +587,22 @@ static irqreturn_t adp5588_thread_irq(int irq, void *handle) } status = adp5588_read(client, INT_STAT); + if (status < 0) + return IRQ_HANDLED; if (status & ADP5588_OVR_FLOW_INT) /* Unlikely and should never happen */ dev_err(&client->dev, "Event Overflow Error\n"); if (status & ADP5588_KE_INT) { ev_cnt = adp5588_read(client, KEY_LCK_EC_STAT) & ADP5588_KEC; - if (ev_cnt) { - adp5588_report_events(kpad, ev_cnt); - input_sync(kpad->input); - } + if (ev_cnt <= 0) + goto out_irq; + + adp5588_report_events(kpad, ev_cnt); + input_sync(kpad->input); } +out_irq: adp5588_write(client, INT_STAT, status); /* Status is W1C */ return IRQ_HANDLED; From patchwork Wed Oct 2 10:51:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuno Sa via B4 Relay X-Patchwork-Id: 13819595 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 813941E7672 for ; Wed, 2 Oct 2024 10:51:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727866312; cv=none; b=NiQdJkmL9R/P2nisszBdkWiF8L7a5m99mCV5VQzP+xCQ/GvSP4rOvjqghbeMBkVbnR6vkwf+z6Hq269JSPEWjlYmbwuVUrSsU29PL5hDdsSOb7tu1+btq0dZ7N7P938o4jb9YIIZTNT0hC4SzJqSsk4HbE/ADIFjHn20Uc/6bME= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727866312; c=relaxed/simple; bh=42G0y/9jzNMexvGRK5gYVw6l13H/cI37/yjOu66j624=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lS3U1gctpGKWj0glI5SN22jZQs5L2c/vdpe88mg9KRNbQowqvoe7aO4KphJdr3Mt0UxYw8LX7DgvvxjxrrCtIf4w30xLt/rYTJQ0DwC73aVEIChTEghU5dM4GHEthJuS+M5F5iC5Cy/m9BxwAQSY0BMreZanT5EGk1TSeRwirAs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FS34rcGe; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="FS34rcGe" Received: by smtp.kernel.org (Postfix) with ESMTPS id 35FB1C4CECE; Wed, 2 Oct 2024 10:51:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727866312; bh=42G0y/9jzNMexvGRK5gYVw6l13H/cI37/yjOu66j624=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=FS34rcGe1oYPwZAuT49yJ2pJ2GUwpveV9JTG/iR1cKkjNklEk7I6MX3iVoTivFpOz 0vFwjbpPZ5O9w7DJB+IfMNqovrX4GdHMALk97bd5l2HUuYYpSLZ8YIdweoVVkZO60a 6SHh9eqrqCbewN81lmDA3x+LIi44mpFp8Gg7towr41UrayFyALmJPWuxjy79cXYjtF ZcypTY6GU9pfqRORkJrwEbrBJKzPrgQ1eh4aynWSR11CRZFjanlJAI7RznhnO5IpW9 YzJ5QBXtLGJm0P0I2uY+YJgblV0VQpieLKh7XOhRb89lF0eywfqg3I/eAyqKNw3n0o Qu4id5PmnB7dg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2DE94CF31B4; Wed, 2 Oct 2024 10:51:52 +0000 (UTC) From: Nuno Sa via B4 Relay Date: Wed, 02 Oct 2024 12:51:51 +0200 Subject: [PATCH 2/4] Input: adp5588-keys: refactor adp5589_read() Precedence: bulk X-Mailing-List: linux-input@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20241002-fix-adp5588-read-refactor-v1-2-28800f1b9773@analog.com> References: <20241002-fix-adp5588-read-refactor-v1-0-28800f1b9773@analog.com> In-Reply-To: <20241002-fix-adp5588-read-refactor-v1-0-28800f1b9773@analog.com> To: Michael Hennerich , Dmitry Torokhov Cc: linux-input@vger.kernel.org X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=ed25519-sha256; t=1727866310; l=5418; i=nuno.sa@analog.com; s=20231116; h=from:subject:message-id; bh=iHBBKizUY4muCV5YApLvONvBlERTpRBTGQjSMr4hebU=; b=syX5Hhj2jn9i5xtdIAlhG5Wakqy6dnfHTAQWop80TdFr6Vx5cGUtvyReOfMQ3JkiHN84BlWFy FxHlcIMiOFdBxTc+AziRRZFldzqzouugG+p54KtqAlEvoaiGgECPSeU X-Developer-Key: i=nuno.sa@analog.com; a=ed25519; pk=3NQwYA013OUYZsmDFBf8rmyyr5iQlxV/9H4/Df83o1E= X-Endpoint-Received: by B4 Relay for nuno.sa@analog.com/20231116 with auth_id=100 X-Original-From: Nuno Sa Reply-To: nuno.sa@analog.com From: Nuno Sa adp5588_read() now either returns 0 or an error code. The value to read is passed as an argument to the function. Therefore we don't mix register values with error codes. Suggested-by: Dmitry Torokhov Signed-off-by: Nuno Sa --- drivers/input/keyboard/adp5588-keys.c | 75 ++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 33 deletions(-) diff --git a/drivers/input/keyboard/adp5588-keys.c b/drivers/input/keyboard/adp5588-keys.c index 9ac68baf0117..11a70ee18482 100644 --- a/drivers/input/keyboard/adp5588-keys.c +++ b/drivers/input/keyboard/adp5588-keys.c @@ -200,14 +200,17 @@ struct adp5588_kpad { u8 pull_dis[3]; }; -static int adp5588_read(struct i2c_client *client, u8 reg) +static int adp5588_read(struct i2c_client *client, u8 reg, u8 *val) { int ret = i2c_smbus_read_byte_data(client, reg); - if (ret < 0) + if (ret < 0) { dev_err(&client->dev, "Read Error\n"); + return ret; + } - return ret; + *val = ret; + return 0; } static int adp5588_write(struct i2c_client *client, u8 reg, u8 val) @@ -220,16 +223,17 @@ static int adp5588_gpio_get_value(struct gpio_chip *chip, unsigned int off) struct adp5588_kpad *kpad = gpiochip_get_data(chip); unsigned int bank = ADP5588_BANK(kpad->gpiomap[off]); unsigned int bit = ADP5588_BIT(kpad->gpiomap[off]); - int val; + int error; + u8 val; guard(mutex)(&kpad->gpio_lock); if (kpad->dir[bank] & bit) return !!(kpad->dat_out[bank] & bit); - val = adp5588_read(kpad->client, GPIO_DAT_STAT1 + bank); - if (val < 0) - return val; + error = adp5588_read(kpad->client, GPIO_DAT_STAT1 + bank, &val); + if (error) + return error; return !!(val & bit); } @@ -455,18 +459,20 @@ static int adp5588_gpio_add(struct adp5588_kpad *kpad) } for (i = 0; i <= ADP5588_BANK(ADP5588_MAXGPIO); i++) { - kpad->dat_out[i] = adp5588_read(kpad->client, - GPIO_DAT_OUT1 + i); - if (kpad->dat_out[i] < 0) - return kpad->dat_out[i]; + error = adp5588_read(kpad->client, + GPIO_DAT_OUT1 + i, &kpad->dat_out[i]); + if (error) + return error; - kpad->dir[i] = adp5588_read(kpad->client, GPIO_DIR1 + i); - if (kpad->dir[i] < 0) - return kpad->dir[i]; + error = adp5588_read(kpad->client, GPIO_DIR1 + i, + &kpad->dir[i]); + if (error) + return error; - kpad->pull_dis[i] = adp5588_read(kpad->client, GPIO_PULL1 + i); - if (kpad->pull_dis[i] < 0) - return kpad->pull_dis[i]; + error = adp5588_read(kpad->client, GPIO_PULL1 + i, + &kpad->pull_dis[i]); + if (error) + return error; } return 0; @@ -529,10 +535,11 @@ static void adp5588_report_events(struct adp5588_kpad *kpad, int ev_cnt) int i; for (i = 0; i < ev_cnt; i++) { - int key, key_val, key_press; + u8 key, key_val, key_press; + int error; - key = adp5588_read(kpad->client, KEY_EVENTA + i); - if (key < 0) + error = adp5588_read(kpad->client, KEY_EVENTA + i, &key); + if (error) return; key_val = key & KEY_EV_MASK; @@ -571,7 +578,8 @@ static irqreturn_t adp5588_thread_irq(int irq, void *handle) struct i2c_client *client = kpad->client; ktime_t target_time, now; unsigned long delay; - int status, ev_cnt; + u8 status, ev_cnt; + int error; /* * Readout needs to wait for at least 25ms after the notification @@ -586,19 +594,19 @@ static irqreturn_t adp5588_thread_irq(int irq, void *handle) } } - status = adp5588_read(client, INT_STAT); - if (status < 0) + error = adp5588_read(client, INT_STAT, &status); + if (error) return IRQ_HANDLED; if (status & ADP5588_OVR_FLOW_INT) /* Unlikely and should never happen */ dev_err(&client->dev, "Event Overflow Error\n"); if (status & ADP5588_KE_INT) { - ev_cnt = adp5588_read(client, KEY_LCK_EC_STAT) & ADP5588_KEC; - if (ev_cnt <= 0) + error = adp5588_read(client, KEY_LCK_EC_STAT, &ev_cnt); + if (error || !(ev_cnt & ADP5588_KEC)) goto out_irq; - adp5588_report_events(kpad, ev_cnt); + adp5588_report_events(kpad, ev_cnt & ADP5588_KEC); input_sync(kpad->input); } @@ -612,6 +620,7 @@ static int adp5588_setup(struct adp5588_kpad *kpad) { struct i2c_client *client = kpad->client; int i, ret; + u8 dummy; ret = adp5588_write(client, KP_GPIO1, KP_SEL(kpad->rows)); if (ret) @@ -638,8 +647,8 @@ static int adp5588_setup(struct adp5588_kpad *kpad) } for (i = 0; i < KEYP_MAX_EVENT; i++) { - ret = adp5588_read(client, KEY_EVENTA); - if (ret < 0) + ret = adp5588_read(client, KEY_EVENTA, &dummy); + if (ret) return ret; } @@ -743,8 +752,8 @@ static int adp5588_probe(struct i2c_client *client) struct input_dev *input; struct gpio_desc *gpio; unsigned int revid; - int ret; int error; + u8 id; if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { @@ -781,11 +790,11 @@ static int adp5588_probe(struct i2c_client *client) fsleep(60); } - ret = adp5588_read(client, DEV_ID); - if (ret < 0) - return ret; + error = adp5588_read(client, DEV_ID, &id); + if (error) + return error; - revid = ret & ADP5588_DEVICE_ID_MASK; + revid = id & ADP5588_DEVICE_ID_MASK; if (WA_DELAYED_READOUT_REVID(revid)) kpad->delay = msecs_to_jiffies(WA_DELAYED_READOUT_TIME); From patchwork Wed Oct 2 10:51:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuno Sa via B4 Relay X-Patchwork-Id: 13819596 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 813E71E7674 for ; Wed, 2 Oct 2024 10:51:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727866312; cv=none; b=jYmfgYef7xt6yhoQsBfphuRQz8A4ULSKdcWB9NkAch6TcCzReg1XC0EAfyE4/b3LpZpclrurFoC9TgzirlnO6K5azG9JRtQRFvHOi9/UMxhVo+AvKUXQaNqt4rlsUhFW6FaItCzON2xBiPxMihFIYS8HmafZ73PASq7Rs7JdoJA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727866312; c=relaxed/simple; bh=kU9RMwVK7tK5tGrD9ncs9Bo5tDjNxEdbyC+uGRc5nuU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QED946OFzyRvdmEP29FLi+89VmZNtLkGQCgVsyVJvTwKREYt4ZOFkxcxPcGWHn5tGHXtcuPbaATPif4J4GXb3pj60f3uVRHFAh3+kxinF5j8uOypqpMfiuJrww9r0dK2x+voGwHqUw3FsNf+046mjKgXxEfVqyyNwk6avN+MoBY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Zx4FlTvx; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Zx4FlTvx" Received: by smtp.kernel.org (Postfix) with ESMTPS id 41896C4CECF; Wed, 2 Oct 2024 10:51:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727866312; bh=kU9RMwVK7tK5tGrD9ncs9Bo5tDjNxEdbyC+uGRc5nuU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=Zx4FlTvxbMcH/Dqqj91QOkvHIbH5q65L+BT9R8c5f8yOV0cCMDxk0uNL3LildoAIK tt2rFd8NomeJVMEACkSmXzKWk0uTHnDTADBARlCeK6hF8xdWXhzm+F4qDRGRQv3iw8 eFjmtkErFRQNWrOTM4CfGzfeEyNf5KtjBU/HlCD7G1HZXWOGI4Fz6mVzE71ZMbvOqu bYRMnv+TKXcNSzRuUruj0TpHb/uQmEHRQv5lgA74Vw58SYPS+uX7ckJSOIqQifI2n4 NDn/7EiDcFf1ZyUdJrtjOgyAI11r+m5ufKnH4rAWt+Gg7nF+eQtfu2R5d2ryUpcvUT lo/peNnhj6xoQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 39E57CF31B5; Wed, 2 Oct 2024 10:51:52 +0000 (UTC) From: Nuno Sa via B4 Relay Date: Wed, 02 Oct 2024 12:51:52 +0200 Subject: [PATCH 3/4] Input: adp5588-keys: error out if no IRQ is given Precedence: bulk X-Mailing-List: linux-input@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20241002-fix-adp5588-read-refactor-v1-3-28800f1b9773@analog.com> References: <20241002-fix-adp5588-read-refactor-v1-0-28800f1b9773@analog.com> In-Reply-To: <20241002-fix-adp5588-read-refactor-v1-0-28800f1b9773@analog.com> To: Michael Hennerich , Dmitry Torokhov Cc: linux-input@vger.kernel.org X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=ed25519-sha256; t=1727866310; l=956; i=nuno.sa@analog.com; s=20231116; h=from:subject:message-id; bh=Oyv6w1vVB0WsBBnLrEoR1/r+BQ9oW4zFkMd7v+3aoJg=; b=R4ykC6WUXoS2Pr1ZkyEWK/TbVMKvSNrHRAKHmo6YaN1hMhyoNEoNlqWfi02Wig7gGRn5aHsLp 4fVvMG63iAUAEkHh7R5D2XuyGfokQEw9OBzpMzyrusmHnM9cQoVjipk X-Developer-Key: i=nuno.sa@analog.com; a=ed25519; pk=3NQwYA013OUYZsmDFBf8rmyyr5iQlxV/9H4/Df83o1E= X-Endpoint-Received: by B4 Relay for nuno.sa@analog.com/20231116 with auth_id=100 X-Original-From: Nuno Sa Reply-To: nuno.sa@analog.com From: Nuno Sa If the keypad is configured, it also depends on the presence of an interrupt. With commit dc748812fca0 ("Input: adp5588-keys - add support for pure gpio"), having an interrupt is no longer mandatory so better check for it when it is indeed mandatory. Signed-off-by: Nuno Sa --- drivers/input/keyboard/adp5588-keys.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/input/keyboard/adp5588-keys.c b/drivers/input/keyboard/adp5588-keys.c index 11a70ee18482..0152e4fa088c 100644 --- a/drivers/input/keyboard/adp5588-keys.c +++ b/drivers/input/keyboard/adp5588-keys.c @@ -680,6 +680,11 @@ static int adp5588_fw_parse(struct adp5588_kpad *kpad) return 0; } + if (!client->irq) { + dev_err(&client->dev, "Keypad configured but no IRQ present\n"); + return -EINVAL; + } + ret = matrix_keypad_parse_properties(&client->dev, &kpad->rows, &kpad->cols); if (ret) From patchwork Wed Oct 2 10:51:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuno Sa via B4 Relay X-Patchwork-Id: 13819592 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7057C1E7666 for ; Wed, 2 Oct 2024 10:51:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727866312; cv=none; b=CGr/OW2AnOugPuqgAHtEbbYFrVSPRF4FwGBcpKl98VgFZtJhhruz/QbQQAcrJQOxHhuTLzebnrB2n6QR5db2dow7bba1SsOYkguxjkLz+TYb9Xtn/CzwyR12hNOfuCrXuuPgz2lWB/zmVR4+eeGtFzeexF7jSux4C++6vlqxk0A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727866312; c=relaxed/simple; bh=GaGVBlUAZAzixzMPjr2GKd8qLJQJTfvw7fhOCSOmZbc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fYeeyYAlLybTwZLOJtSS7Cx5DlBkHZJAtlBc+aXmHLruyKFluHmAzT6LxIUHa5yeVz1+A3ZJmcf9Af2FGOjhOPgxrGK1NW4iSyHE6iOxdQC+q2oIs9V+jSzoEy50jdDDRAxZLodteyIEJvIOg16q8GpPJg/PA4nVZrAONjzPnOo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bogkEwXB; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="bogkEwXB" Received: by smtp.kernel.org (Postfix) with ESMTPS id 4F433C4CED2; Wed, 2 Oct 2024 10:51:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727866312; bh=GaGVBlUAZAzixzMPjr2GKd8qLJQJTfvw7fhOCSOmZbc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=bogkEwXBJTtTgdYvZEpG0DGad6Qex2vlTJpfDs6oWZmTAdtR7yZ+wWpamDx5uDFXh /W9zpUr1I9o5WpAZdy03UpTvP4GOJ+e0zAhYnG+IhNydSIJC2OkqesEems3FbjQR0h OANtJUDejt09c5VKxujJmkuuBISiST0G6RnW7b90w8cYxidB2dnDz6oCX0IocrQkBw +VDqn4C9cTEpTHiCs5LjlXzGbPzJOl5JVOQr7v58dSuWSjuDmWmvfqOpoN1LAfIicy Nr38EbrwnBSpvMyNbup8W+rHb9G8Ox5HtBWr+BDvY373fyjgpjch5+gimZNpO4EJYo JTh1cNhE/Eyrw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 479B9CF31B6; Wed, 2 Oct 2024 10:51:52 +0000 (UTC) From: Nuno Sa via B4 Relay Date: Wed, 02 Oct 2024 12:51:53 +0200 Subject: [PATCH 4/4] Input: adp5588-keys: make use of dev_err_probe() Precedence: bulk X-Mailing-List: linux-input@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20241002-fix-adp5588-read-refactor-v1-4-28800f1b9773@analog.com> References: <20241002-fix-adp5588-read-refactor-v1-0-28800f1b9773@analog.com> In-Reply-To: <20241002-fix-adp5588-read-refactor-v1-0-28800f1b9773@analog.com> To: Michael Hennerich , Dmitry Torokhov Cc: linux-input@vger.kernel.org X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=ed25519-sha256; t=1727866310; l=5144; i=nuno.sa@analog.com; s=20231116; h=from:subject:message-id; bh=gt3jhPKFLDsBuarU+NtzbRqk71V3bunZcxmUsG25ZIQ=; b=gYKNBNlZ5DgRpUEr53HOJRV/oouU2DiX5Mx5Tv95+9Wz1Z7RRCPjpYehpYB3KUrA+QjPQZsPW l5m0ER1dhWlCTIehYW/9+Q2D8uo+CdH/ToS421XGySxM1Q0ndKlmfLH X-Developer-Key: i=nuno.sa@analog.com; a=ed25519; pk=3NQwYA013OUYZsmDFBf8rmyyr5iQlxV/9H4/Df83o1E= X-Endpoint-Received: by B4 Relay for nuno.sa@analog.com/20231116 with auth_id=100 X-Original-From: Nuno Sa Reply-To: nuno.sa@analog.com From: Nuno Sa Simplify the probe error path by using dev_err_probe(). Signed-off-by: Nuno Sa --- drivers/input/keyboard/adp5588-keys.c | 70 +++++++++++++++-------------------- 1 file changed, 29 insertions(+), 41 deletions(-) diff --git a/drivers/input/keyboard/adp5588-keys.c b/drivers/input/keyboard/adp5588-keys.c index 0152e4fa088c..60a7cb040af7 100644 --- a/drivers/input/keyboard/adp5588-keys.c +++ b/drivers/input/keyboard/adp5588-keys.c @@ -439,10 +439,9 @@ static int adp5588_gpio_add(struct adp5588_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 interrupt"); - return -EINVAL; - } + if (!kpad->client->irq) + return dev_err_probe(dev, -EINVAL, + "Unable to serve as interrupt controller without interrupt"); girq = &kpad->gc.irq; gpio_irq_chip_set_chip(girq, &adp5588_irq_chip); @@ -453,10 +452,8 @@ static int adp5588_gpio_add(struct adp5588_kpad *kpad) mutex_init(&kpad->gpio_lock); error = devm_gpiochip_add_data(dev, &kpad->gc, kpad); - if (error) { - dev_err(dev, "gpiochip_add failed: %d\n", error); - return error; - } + if (error) + return dev_err_probe(dev, error, "gpiochip_add failed\n"); for (i = 0; i <= ADP5588_BANK(ADP5588_MAXGPIO); i++) { error = adp5588_read(kpad->client, @@ -680,21 +677,19 @@ static int adp5588_fw_parse(struct adp5588_kpad *kpad) return 0; } - if (!client->irq) { - dev_err(&client->dev, "Keypad configured but no IRQ present\n"); - return -EINVAL; - } + if (!client->irq) + return dev_err_probe(&client->dev, -EINVAL, + "Keypad configured but no IRQ present\n"); ret = matrix_keypad_parse_properties(&client->dev, &kpad->rows, &kpad->cols); if (ret) return ret; - if (kpad->rows > ADP5588_ROWS_MAX || kpad->cols > ADP5588_COLS_MAX) { - dev_err(&client->dev, "Invalid nr of rows(%u) or cols(%u)\n", - kpad->rows, kpad->cols); - return -EINVAL; - } + if (kpad->rows > ADP5588_ROWS_MAX || kpad->cols > ADP5588_COLS_MAX) + return dev_err_probe(&client->dev, -EINVAL, + "Invalid nr of rows(%u) or cols(%u)\n", + kpad->rows, kpad->cols); ret = matrix_keypad_build_keymap(NULL, NULL, kpad->rows, kpad->cols, kpad->keycode, kpad->input); @@ -714,11 +709,10 @@ static int adp5588_fw_parse(struct adp5588_kpad *kpad) return 0; } - if (kpad->nkeys_unlock > ARRAY_SIZE(kpad->unlock_keys)) { - dev_err(&client->dev, "number of unlock keys(%d) > (%zu)\n", - kpad->nkeys_unlock, ARRAY_SIZE(kpad->unlock_keys)); - return -EINVAL; - } + if (kpad->nkeys_unlock > ARRAY_SIZE(kpad->unlock_keys)) + return dev_err_probe(&client->dev, -EINVAL, + "number of unlock keys(%d) > (%zu)\n", + kpad->nkeys_unlock, ARRAY_SIZE(kpad->unlock_keys)); ret = device_property_read_u32_array(&client->dev, "adi,unlock-keys", kpad->unlock_keys, @@ -735,11 +729,10 @@ static int adp5588_fw_parse(struct adp5588_kpad *kpad) * part of keypad matrix to be used and if a reliable way of * using GPIs is found, this condition can be removed/lightened. */ - if (kpad->unlock_keys[i] >= kpad->cols * kpad->rows) { - dev_err(&client->dev, "Invalid unlock key(%d)\n", - kpad->unlock_keys[i]); - return -EINVAL; - } + if (kpad->unlock_keys[i] >= kpad->cols * kpad->rows) + return dev_err_probe(&client->dev, -EINVAL, + "Invalid unlock key(%d)\n", + kpad->unlock_keys[i]); /* * Firmware properties keys start from 0 but on the device they @@ -761,10 +754,9 @@ static int adp5588_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) @@ -814,11 +806,9 @@ static int adp5588_probe(struct i2c_client *client) input->id.version = revid; error = input_register_device(input); - if (error) { - dev_err(&client->dev, "unable to register input device: %d\n", - error); - return error; - } + if (error) + return dev_err_probe(&client->dev, error, + "unable to register input device\n"); error = adp5588_setup(kpad); if (error) @@ -833,11 +823,9 @@ static int adp5588_probe(struct i2c_client *client) adp5588_hard_irq, adp5588_thread_irq, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, client->dev.driver->name, kpad); - if (error) { - dev_err(&client->dev, "failed to request irq %d: %d\n", - client->irq, error); - return error; - } + if (error) + return dev_err_probe(&client->dev, error, + "failed to request irq %d\n", client->irq); } dev_info(&client->dev, "Rev.%d controller\n", revid);