From patchwork Sun Oct 3 16:02:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cameron X-Patchwork-Id: 12532789 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 05767C433EF for ; Sun, 3 Oct 2021 15:58:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D88286124C for ; Sun, 3 Oct 2021 15:58:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230482AbhJCQAM (ORCPT ); Sun, 3 Oct 2021 12:00:12 -0400 Received: from mail.kernel.org ([198.145.29.99]:49412 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230426AbhJCQAM (ORCPT ); Sun, 3 Oct 2021 12:00:12 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 2DFD961215; Sun, 3 Oct 2021 15:58:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1633276704; bh=KV9wQNopwWHD3ZZucOsk1kgStEoi5MCzKyg5BmzELYQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Rbw60/AVznjZhsyQbw10Ok/KciEIEY1nr6XQmw3yvt4EJGqvNyDawzehLFGQ9qLoZ LRTDQbLs8IljxEg5paZthy0pB2KqKkcoNVASTZjtv4biBl2yXWlGVX747L+HS8koel CnXR8C2j+/KAkDMGJgHAXdUkf0MrFxkzHN7638I4QKyazvaTpIpi1sQOwu9KuFF2rR iVdFvI2zQWxlfOReoCRBOCZLmkllWDLUI1CYT3HfsuN8Y+UL2CpaMPCi/Yg9lGwwju haIvnagerP0hrA22N83xyA3mRgnDuFUnkeo87WrsDmZPlfghRw9E4YAXvqOIE9yYS/ BoWlLpb4f64QQ== From: Jonathan Cameron To: linux-iio@vger.kernel.org Cc: Andy Shevchenko , Hans de Goede , Alexandru Ardelean , Shawn Guo , Jonathan Cameron Subject: [RESEND v2 1/5] iio: accel: mma9551/mma9553: Drop explicit ACPI match support Date: Sun, 3 Oct 2021 17:02:08 +0100 Message-Id: <20211003160212.417909-2-jic23@kernel.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211003160212.417909-1-jic23@kernel.org> References: <20211003160212.417909-1-jic23@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org From: Jonathan Cameron The IDs look highly suspicious as they are just the part numbers in capitals, so lets drop these if no one screams. Note: - MMA is registered PNP ID for Micromedia AG (not a part of Freescale) - Googling doesn't show any results for such ACPI _HID to be present in the wild Signed-off-by: Jonathan Cameron Acked-by: Andy Shevchenko Reviewed-by: Alexandru Ardelean Acked-by: Hans de Goede --- drivers/iio/accel/mma9551.c | 21 --------------------- drivers/iio/accel/mma9553.c | 21 --------------------- 2 files changed, 42 deletions(-) diff --git a/drivers/iio/accel/mma9551.c b/drivers/iio/accel/mma9551.c index 4c359fb05480..2b74f67536a3 100644 --- a/drivers/iio/accel/mma9551.c +++ b/drivers/iio/accel/mma9551.c @@ -435,17 +435,6 @@ static int mma9551_gpio_probe(struct iio_dev *indio_dev) return 0; } -static const char *mma9551_match_acpi_device(struct device *dev) -{ - const struct acpi_device_id *id; - - id = acpi_match_device(dev->driver->acpi_match_table, dev); - if (!id) - return NULL; - - return dev_name(dev); -} - static int mma9551_probe(struct i2c_client *client, const struct i2c_device_id *id) { @@ -464,8 +453,6 @@ static int mma9551_probe(struct i2c_client *client, if (id) name = id->name; - else if (ACPI_HANDLE(&client->dev)) - name = mma9551_match_acpi_device(&client->dev); ret = mma9551_init(data); if (ret < 0) @@ -591,13 +578,6 @@ static const struct dev_pm_ops mma9551_pm_ops = { mma9551_runtime_resume, NULL) }; -static const struct acpi_device_id mma9551_acpi_match[] = { - {"MMA9551", 0}, - {}, -}; - -MODULE_DEVICE_TABLE(acpi, mma9551_acpi_match); - static const struct i2c_device_id mma9551_id[] = { {"mma9551", 0}, {} @@ -608,7 +588,6 @@ MODULE_DEVICE_TABLE(i2c, mma9551_id); static struct i2c_driver mma9551_driver = { .driver = { .name = MMA9551_DRV_NAME, - .acpi_match_table = ACPI_PTR(mma9551_acpi_match), .pm = &mma9551_pm_ops, }, .probe = mma9551_probe, diff --git a/drivers/iio/accel/mma9553.c b/drivers/iio/accel/mma9553.c index ba3ecb3b57dc..32c9a79ebfec 100644 --- a/drivers/iio/accel/mma9553.c +++ b/drivers/iio/accel/mma9553.c @@ -1062,17 +1062,6 @@ static irqreturn_t mma9553_event_handler(int irq, void *private) return IRQ_HANDLED; } -static const char *mma9553_match_acpi_device(struct device *dev) -{ - const struct acpi_device_id *id; - - id = acpi_match_device(dev->driver->acpi_match_table, dev); - if (!id) - return NULL; - - return dev_name(dev); -} - static int mma9553_probe(struct i2c_client *client, const struct i2c_device_id *id) { @@ -1091,8 +1080,6 @@ static int mma9553_probe(struct i2c_client *client, if (id) name = id->name; - else if (ACPI_HANDLE(&client->dev)) - name = mma9553_match_acpi_device(&client->dev); else return -ENOSYS; @@ -1230,13 +1217,6 @@ static const struct dev_pm_ops mma9553_pm_ops = { mma9553_runtime_resume, NULL) }; -static const struct acpi_device_id mma9553_acpi_match[] = { - {"MMA9553", 0}, - {}, -}; - -MODULE_DEVICE_TABLE(acpi, mma9553_acpi_match); - static const struct i2c_device_id mma9553_id[] = { {"mma9553", 0}, {}, @@ -1247,7 +1227,6 @@ MODULE_DEVICE_TABLE(i2c, mma9553_id); static struct i2c_driver mma9553_driver = { .driver = { .name = MMA9553_DRV_NAME, - .acpi_match_table = ACPI_PTR(mma9553_acpi_match), .pm = &mma9553_pm_ops, }, .probe = mma9553_probe, From patchwork Sun Oct 3 16:02:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cameron X-Patchwork-Id: 12532791 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E4646C433F5 for ; Sun, 3 Oct 2021 15:58:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BD6856124C for ; Sun, 3 Oct 2021 15:58:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230509AbhJCQAO (ORCPT ); Sun, 3 Oct 2021 12:00:14 -0400 Received: from mail.kernel.org ([198.145.29.99]:49452 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230426AbhJCQAO (ORCPT ); Sun, 3 Oct 2021 12:00:14 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 35F7361AF0; Sun, 3 Oct 2021 15:58:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1633276706; bh=ovhnXDrOMNnkbrS22K0McZ3fPJBSTtTCyLe2EjC0IMQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IM4xbOcx396B1U60nXtBtEoQmHGn6qxBE6ALrVOF9a1nLtV7Bgx5C1ZmfVlYGUxJ/ cb89VkxnVGYUeCedUH1qM1bpq+BXWEEUxn/E5qeBw9pfxiJdcle2X7dubG+H0B4YU0 msfmoabpMZdPoRnHbDz+yte0QUY0F1xMcrUPcH9c2PAKqdupem0GaDvji1R/4+r2d7 GC08heyMIZtSrvYZ39+oAsnZl1ER6snRfuPAHnwSoE/OSrHVtGqVQ3K75Yu2KYE/Ge 5+Mqmmjqd/SNij5QYnxDwncK/UyV9hhYMTvF44HNcBOJhb5/SOaQo1Bk0bEip603Fl QtXUm0sDXmO1Q== From: Jonathan Cameron To: linux-iio@vger.kernel.org Cc: Andy Shevchenko , Hans de Goede , Alexandru Ardelean , Shawn Guo , Jonathan Cameron Subject: [RESEND v2 2/5] iio: accel: mma9551/mma9553: Simplify pm logic Date: Sun, 3 Oct 2021 17:02:09 +0100 Message-Id: <20211003160212.417909-3-jic23@kernel.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211003160212.417909-1-jic23@kernel.org> References: <20211003160212.417909-1-jic23@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org From: Jonathan Cameron I can't see why we shouldn't sleep in the system resume path to allow the device firmware to fully wakeup. Having done that, the runtime system functions are identical (down to an error print) so use pm_runtime_force_suspend() and pm_runtime_force_resume() to reduce repitition. General preference in IIO is now to mark these functions __maybe_unused instead of using ifdefs as it is easy to get them wrong. Here they appear correct, but provide a less than desirable example to copy into other drivers. Signed-off-by: Jonathan Cameron Reviewed-by: Alexandru Ardelean --- drivers/iio/accel/mma9551.c | 37 ++++-------------------------------- drivers/iio/accel/mma9553.c | 38 ++++--------------------------------- 2 files changed, 8 insertions(+), 67 deletions(-) diff --git a/drivers/iio/accel/mma9551.c b/drivers/iio/accel/mma9551.c index 2b74f67536a3..1b4a8b27f14a 100644 --- a/drivers/iio/accel/mma9551.c +++ b/drivers/iio/accel/mma9551.c @@ -510,8 +510,7 @@ static int mma9551_remove(struct i2c_client *client) return 0; } -#ifdef CONFIG_PM -static int mma9551_runtime_suspend(struct device *dev) +static __maybe_unused int mma9551_runtime_suspend(struct device *dev) { struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); struct mma9551_data *data = iio_priv(indio_dev); @@ -522,13 +521,13 @@ static int mma9551_runtime_suspend(struct device *dev) mutex_unlock(&data->mutex); if (ret < 0) { dev_err(&data->client->dev, "powering off device failed\n"); - return -EAGAIN; + return ret; } return 0; } -static int mma9551_runtime_resume(struct device *dev) +static __maybe_unused int mma9551_runtime_resume(struct device *dev) { struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); struct mma9551_data *data = iio_priv(indio_dev); @@ -542,38 +541,10 @@ static int mma9551_runtime_resume(struct device *dev) return 0; } -#endif - -#ifdef CONFIG_PM_SLEEP -static int mma9551_suspend(struct device *dev) -{ - struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); - struct mma9551_data *data = iio_priv(indio_dev); - int ret; - - mutex_lock(&data->mutex); - ret = mma9551_set_device_state(data->client, false); - mutex_unlock(&data->mutex); - - return ret; -} - -static int mma9551_resume(struct device *dev) -{ - struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); - struct mma9551_data *data = iio_priv(indio_dev); - int ret; - mutex_lock(&data->mutex); - ret = mma9551_set_device_state(data->client, true); - mutex_unlock(&data->mutex); - - return ret; -} -#endif static const struct dev_pm_ops mma9551_pm_ops = { - SET_SYSTEM_SLEEP_PM_OPS(mma9551_suspend, mma9551_resume) + SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume) SET_RUNTIME_PM_OPS(mma9551_runtime_suspend, mma9551_runtime_resume, NULL) }; diff --git a/drivers/iio/accel/mma9553.c b/drivers/iio/accel/mma9553.c index 32c9a79ebfec..dc2a3316c1a3 100644 --- a/drivers/iio/accel/mma9553.c +++ b/drivers/iio/accel/mma9553.c @@ -1149,8 +1149,7 @@ static int mma9553_remove(struct i2c_client *client) return 0; } -#ifdef CONFIG_PM -static int mma9553_runtime_suspend(struct device *dev) +static __maybe_unused int mma9553_runtime_suspend(struct device *dev) { struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); struct mma9553_data *data = iio_priv(indio_dev); @@ -1161,13 +1160,13 @@ static int mma9553_runtime_suspend(struct device *dev) mutex_unlock(&data->mutex); if (ret < 0) { dev_err(&data->client->dev, "powering off device failed\n"); - return -EAGAIN; + return ret; } return 0; } -static int mma9553_runtime_resume(struct device *dev) +static __maybe_unused int mma9553_runtime_resume(struct device *dev) { struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); struct mma9553_data *data = iio_priv(indio_dev); @@ -1181,38 +1180,9 @@ static int mma9553_runtime_resume(struct device *dev) return 0; } -#endif - -#ifdef CONFIG_PM_SLEEP -static int mma9553_suspend(struct device *dev) -{ - struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); - struct mma9553_data *data = iio_priv(indio_dev); - int ret; - - mutex_lock(&data->mutex); - ret = mma9551_set_device_state(data->client, false); - mutex_unlock(&data->mutex); - - return ret; -} - -static int mma9553_resume(struct device *dev) -{ - struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); - struct mma9553_data *data = iio_priv(indio_dev); - int ret; - - mutex_lock(&data->mutex); - ret = mma9551_set_device_state(data->client, true); - mutex_unlock(&data->mutex); - - return ret; -} -#endif static const struct dev_pm_ops mma9553_pm_ops = { - SET_SYSTEM_SLEEP_PM_OPS(mma9553_suspend, mma9553_resume) + SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume) SET_RUNTIME_PM_OPS(mma9553_runtime_suspend, mma9553_runtime_resume, NULL) }; From patchwork Sun Oct 3 16:02:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cameron X-Patchwork-Id: 12532793 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 10B4EC433F5 for ; Sun, 3 Oct 2021 15:58:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E9E3361AFB for ; Sun, 3 Oct 2021 15:58:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231146AbhJCQAQ (ORCPT ); Sun, 3 Oct 2021 12:00:16 -0400 Received: from mail.kernel.org ([198.145.29.99]:49470 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230426AbhJCQAQ (ORCPT ); Sun, 3 Oct 2021 12:00:16 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 419B661AF9; Sun, 3 Oct 2021 15:58:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1633276708; bh=cVIewzymsiAj7PtbPYg+HLMx6JgBQ/rOfu3xisgmOPA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=G3kpssaEN1oC7mIzhkwDIzfrdFQlpTOuFMXmWzAfnTyP37qr6Q8ijRjmh6b6D+e6Y plzRsmYjIpbM9vwl/TGXbaEguqOAUE+4y2lHJg+hVUbxlMo6Z9cfHb89HI5mcwCDLa fGAZkfBki3j8JpWtT8AsPOtmoueQKn533hVbCeqF6CQsDQoz0rHAQKs6yfVAUMXOJD 91hsYcju8Ck/nL7N5ZOg/plCSclZUYAcmKULPJGtg/1J9KIlxLAcyoJN64g4XCpP40 zTZM01g+MOa+fcXONPMbgZ3+pGWTCrZWKdaI5TajjYksLfNOPFZRiy0lGyu0dJG/6Z 3Zn7AA9S5jszg== From: Jonathan Cameron To: linux-iio@vger.kernel.org Cc: Andy Shevchenko , Hans de Goede , Alexandru Ardelean , Shawn Guo , Jonathan Cameron Subject: [RESEND v2 3/5] iio: accel: mma9551: Add support to get irqs directly from fwnode Date: Sun, 3 Oct 2021 17:02:10 +0100 Message-Id: <20211003160212.417909-4-jic23@kernel.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211003160212.417909-1-jic23@kernel.org> References: <20211003160212.417909-1-jic23@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org From: Jonathan Cameron The driver previously supported using GPIO requests to retrieve multiple interrupt lines. As existing firmware may be using this method, we need to continue to support it. However, that doesn't stop us also supporting just getting irqs directly. The handling of irqflags has to take into account the fact that using a GPIO method to identify the interrupt does not convey direction of the trigger that fwnode_irq_get() will. So we need to set the IRQF_TRIGGER_RISING in that path but not otherwise, where it will cause an issue if we reprobe the driver after removal. Signed-off-by: Jonathan Cameron --- drivers/iio/accel/mma9551.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/drivers/iio/accel/mma9551.c b/drivers/iio/accel/mma9551.c index 1b4a8b27f14a..537a7a04654a 100644 --- a/drivers/iio/accel/mma9551.c +++ b/drivers/iio/accel/mma9551.c @@ -19,7 +19,7 @@ #define MMA9551_DRV_NAME "mma9551" #define MMA9551_IRQ_NAME "mma9551_event" -#define MMA9551_GPIO_COUNT 4 +#define MMA9551_IRQ_COUNT 4 /* Tilt application (inclination in IIO terms). */ #define MMA9551_TILT_XZ_ANG_REG 0x00 @@ -46,7 +46,7 @@ struct mma9551_data { struct i2c_client *client; struct mutex mutex; int event_enabled[3]; - int irqs[MMA9551_GPIO_COUNT]; + int irqs[MMA9551_IRQ_COUNT]; }; static int mma9551_read_incli_chan(struct i2c_client *client, @@ -400,36 +400,26 @@ static int mma9551_init(struct mma9551_data *data) return mma9551_set_device_state(data->client, true); } -static int mma9551_gpio_probe(struct iio_dev *indio_dev) +static int mma9551_irq_probe(struct iio_dev *indio_dev) { - struct gpio_desc *gpio; int i, ret; struct mma9551_data *data = iio_priv(indio_dev); struct device *dev = &data->client->dev; - for (i = 0; i < MMA9551_GPIO_COUNT; i++) { - gpio = devm_gpiod_get_index(dev, NULL, i, GPIOD_IN); - if (IS_ERR(gpio)) { - dev_err(dev, "acpi gpio get index failed\n"); - return PTR_ERR(gpio); - } - - ret = gpiod_to_irq(gpio); - if (ret < 0) + for (i = 0; i < MMA9551_IRQ_COUNT; i++) { + ret = fwnode_irq_get(dev_fwnode(dev), i); + if (ret) return ret; data->irqs[i] = ret; ret = devm_request_threaded_irq(dev, data->irqs[i], - NULL, mma9551_event_handler, - IRQF_TRIGGER_RISING | IRQF_ONESHOT, - MMA9551_IRQ_NAME, indio_dev); + NULL, mma9551_event_handler, + IRQF_ONESHOT, + MMA9551_IRQ_NAME, indio_dev); if (ret < 0) { dev_err(dev, "request irq %d failed\n", data->irqs[i]); return ret; } - - dev_dbg(dev, "gpio resource, no:%d irq:%d\n", - desc_to_gpio(gpio), data->irqs[i]); } return 0; @@ -466,7 +456,7 @@ static int mma9551_probe(struct i2c_client *client, indio_dev->modes = INDIO_DIRECT_MODE; indio_dev->info = &mma9551_info; - ret = mma9551_gpio_probe(indio_dev); + ret = mma9551_irq_probe(indio_dev); if (ret < 0) goto out_poweroff; From patchwork Sun Oct 3 16:02:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cameron X-Patchwork-Id: 12532795 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C79EC433EF for ; Sun, 3 Oct 2021 15:58:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 83B4761166 for ; Sun, 3 Oct 2021 15:58:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231165AbhJCQAT (ORCPT ); Sun, 3 Oct 2021 12:00:19 -0400 Received: from mail.kernel.org ([198.145.29.99]:49488 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230426AbhJCQAS (ORCPT ); Sun, 3 Oct 2021 12:00:18 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 4D54661AAC; Sun, 3 Oct 2021 15:58:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1633276711; bh=xupU4Uk9Dq0tgfvbewVuLMYEVHyM/NG0yv1ECFWas4I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=D4nG571iWdATAbXLt3L0HWk7DU/PGIOzt9YgFH3U0tzeD+AdJZxHjKt1VF+tCBuQ4 tQ6+r2oRYjXTNYp9m2gv8SeXplPBrtdVUubmxIk51t8IcPOQRBZEEpE2aD71lVmDHH /jnHwxo4H8tqIH6lIcysqXIe6leZgj4jgShqRvvLJ/DWHv0MUucdeFRjxgy9jFnTT0 Li/BgSQR4sWiLAjGqoBTFkZ4ve9yjRIkQhDtNzEEmYuMkICMQHSsFspUAlT30iQwh3 UNzokkQQI+IsM7MZAIzHtt22VABwrsXWEltzhECoZHMsfsAXIpFXjo9mdb6mOUqMOs jfLR6gs1kViUw== From: Jonathan Cameron To: linux-iio@vger.kernel.org Cc: Andy Shevchenko , Hans de Goede , Alexandru Ardelean , Shawn Guo , Jonathan Cameron Subject: [RESEND v2 4/5] iio: accel: mma9551: Use devm managed functions to tidy up probe() Date: Sun, 3 Oct 2021 17:02:11 +0100 Message-Id: <20211003160212.417909-5-jic23@kernel.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211003160212.417909-1-jic23@kernel.org> References: <20211003160212.417909-1-jic23@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org From: Jonathan Cameron The error handling in here left runtime pm enabled, and didn't do the same steps as occurred in remove. Moving over to fully devm_ managed makes it harder to get this stuff wrong, so let's do that. Signed-off-by: Jonathan Cameron Reviewed-by: Alexandru Ardelean --- drivers/iio/accel/mma9551.c | 71 ++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/drivers/iio/accel/mma9551.c b/drivers/iio/accel/mma9551.c index 537a7a04654a..a00a7e067883 100644 --- a/drivers/iio/accel/mma9551.c +++ b/drivers/iio/accel/mma9551.c @@ -389,6 +389,15 @@ static irqreturn_t mma9551_event_handler(int irq, void *private) return IRQ_HANDLED; } +static void mma9551_disable_cb(void *_data) +{ + struct mma9551_data *data = _data; + + mutex_lock(&data->mutex); + mma9551_set_device_state(data->client, false); + mutex_unlock(&data->mutex); +} + static int mma9551_init(struct mma9551_data *data) { int ret; @@ -397,7 +406,12 @@ static int mma9551_init(struct mma9551_data *data) if (ret) return ret; - return mma9551_set_device_state(data->client, true); + ret = mma9551_set_device_state(data->client, true); + if (ret) + return ret; + + return devm_add_action_or_reset(&data->client->dev, mma9551_disable_cb, + data); } static int mma9551_irq_probe(struct iio_dev *indio_dev) @@ -425,6 +439,16 @@ static int mma9551_irq_probe(struct iio_dev *indio_dev) return 0; } +static void mma9551_rpm_susp(void *d) +{ + pm_runtime_set_suspended(d); +} + +static void mma9551_rpm_disable(void *d) +{ + pm_runtime_disable(d); +} + static int mma9551_probe(struct i2c_client *client, const struct i2c_device_id *id) { @@ -458,46 +482,28 @@ static int mma9551_probe(struct i2c_client *client, ret = mma9551_irq_probe(indio_dev); if (ret < 0) - goto out_poweroff; + return ret; ret = pm_runtime_set_active(&client->dev); if (ret < 0) - goto out_poweroff; + return ret; + + ret = devm_add_action_or_reset(&client->dev, mma9551_rpm_susp, + &client->dev); + if (ret) + return ret; pm_runtime_enable(&client->dev); + ret = devm_add_action_or_reset(&client->dev, mma9551_rpm_disable, + &client->dev); + if (ret) + return ret; + pm_runtime_set_autosuspend_delay(&client->dev, MMA9551_AUTO_SUSPEND_DELAY_MS); pm_runtime_use_autosuspend(&client->dev); - ret = iio_device_register(indio_dev); - if (ret < 0) { - dev_err(&client->dev, "unable to register iio device\n"); - goto out_poweroff; - } - - return 0; - -out_poweroff: - mma9551_set_device_state(client, false); - - return ret; -} - -static int mma9551_remove(struct i2c_client *client) -{ - struct iio_dev *indio_dev = i2c_get_clientdata(client); - struct mma9551_data *data = iio_priv(indio_dev); - - iio_device_unregister(indio_dev); - - pm_runtime_disable(&client->dev); - pm_runtime_set_suspended(&client->dev); - - mutex_lock(&data->mutex); - mma9551_set_device_state(data->client, false); - mutex_unlock(&data->mutex); - - return 0; + return devm_iio_device_register(&client->dev, indio_dev); } static __maybe_unused int mma9551_runtime_suspend(struct device *dev) @@ -552,7 +558,6 @@ static struct i2c_driver mma9551_driver = { .pm = &mma9551_pm_ops, }, .probe = mma9551_probe, - .remove = mma9551_remove, .id_table = mma9551_id, }; From patchwork Sun Oct 3 16:02:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cameron X-Patchwork-Id: 12532797 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 478C8C433FE for ; Sun, 3 Oct 2021 15:58:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2CBDE61215 for ; Sun, 3 Oct 2021 15:58:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231169AbhJCQAU (ORCPT ); Sun, 3 Oct 2021 12:00:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:49534 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230426AbhJCQAU (ORCPT ); Sun, 3 Oct 2021 12:00:20 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 7222761AFB; Sun, 3 Oct 2021 15:58:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1633276713; bh=OUxrVF6jdsWPoUHS9WtsG8M3IjlxhasxA3nHmA2QwZg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pe2VjJmC/Y3xm5CBgQDKWLEwKIDpnvrITmvxAANVYI8uDx9E5Js+/sm4sHef7sEb/ WY0KWKHvjFLJHEPI2dxJhgjTd8bP6JU+D3L1jsRYWhJ+EodDgybMsqgA27ZlpYGgi5 q6gwIad3CzJwKFKdgEJH3O+3Gkx+sBkA/56wZ4YTEFrLj5XKQTZuuBzPquq0a53EQH BN25mE1g9+yZ0J3RS691iQFbdI1a97pJang6UGyXgikFoHyHJCtcwHDcBRO8w2vxbl JzWE68s9CtLuS9yWpxBeKw41/VN/V2Gjv3EIV+R4Mr7mQKIqvfj7mfYWzIeKep514u a4iRWYXWLRtFQ== From: Jonathan Cameron To: linux-iio@vger.kernel.org Cc: Andy Shevchenko , Hans de Goede , Alexandru Ardelean , Shawn Guo , Jonathan Cameron Subject: [RESEND v2 5/5] iio: accel: mma9553: Use devm managed functions to tidy up probe() Date: Sun, 3 Oct 2021 17:02:12 +0100 Message-Id: <20211003160212.417909-6-jic23@kernel.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211003160212.417909-1-jic23@kernel.org> References: <20211003160212.417909-1-jic23@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org From: Jonathan Cameron The error handling in here left runtime pm enabled, and didn't do the same steps as occurred in remove. Moving over to fully devm_ managed makes it harder to get this stuff wrong, so let's do that. Signed-off-by: Jonathan Cameron Reviewed-by: Alexandru Ardelean --- drivers/iio/accel/mma9553.c | 70 ++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/drivers/iio/accel/mma9553.c b/drivers/iio/accel/mma9553.c index dc2a3316c1a3..14a9d5fedc06 100644 --- a/drivers/iio/accel/mma9553.c +++ b/drivers/iio/accel/mma9553.c @@ -375,6 +375,15 @@ static int mma9553_conf_gpio(struct mma9553_data *data) return 0; } +static void mma9553_disable_cb(void *_data) +{ + struct mma9553_data *data = _data; + + mutex_lock(&data->mutex); + mma9551_set_device_state(data->client, false); + mutex_unlock(&data->mutex); +} + static int mma9553_init(struct mma9553_data *data) { int ret; @@ -430,7 +439,11 @@ static int mma9553_init(struct mma9553_data *data) return ret; } - return mma9551_set_device_state(data->client, true); + ret = mma9551_set_device_state(data->client, true); + if (ret) + return ret; + + return devm_add_action_or_reset(&data->client->dev, mma9553_disable_cb, data); } static int mma9553_read_status_word(struct mma9553_data *data, u16 reg, @@ -1062,6 +1075,16 @@ static irqreturn_t mma9553_event_handler(int irq, void *private) return IRQ_HANDLED; } +static void mma9553_rpm_set_susp(void *d) +{ + pm_runtime_set_suspended(d); +} + +static void mma9553_rpm_disable(void *d) +{ + pm_runtime_disable(d); +} + static int mma9553_probe(struct i2c_client *client, const struct i2c_device_id *id) { @@ -1105,48 +1128,30 @@ static int mma9553_probe(struct i2c_client *client, if (ret < 0) { dev_err(&client->dev, "request irq %d failed\n", client->irq); - goto out_poweroff; + return ret; } } ret = pm_runtime_set_active(&client->dev); if (ret < 0) - goto out_poweroff; + return ret; + + ret = devm_add_action_or_reset(&client->dev, mma9553_rpm_set_susp, + &client->dev); + if (ret) + return ret; pm_runtime_enable(&client->dev); + ret = devm_add_action_or_reset(&client->dev, mma9553_rpm_disable, + &client->dev); + if (ret) + return ret; + pm_runtime_set_autosuspend_delay(&client->dev, MMA9551_AUTO_SUSPEND_DELAY_MS); pm_runtime_use_autosuspend(&client->dev); - ret = iio_device_register(indio_dev); - if (ret < 0) { - dev_err(&client->dev, "unable to register iio device\n"); - goto out_poweroff; - } - - dev_dbg(&indio_dev->dev, "Registered device %s\n", name); - return 0; - -out_poweroff: - mma9551_set_device_state(client, false); - return ret; -} - -static int mma9553_remove(struct i2c_client *client) -{ - struct iio_dev *indio_dev = i2c_get_clientdata(client); - struct mma9553_data *data = iio_priv(indio_dev); - - iio_device_unregister(indio_dev); - - pm_runtime_disable(&client->dev); - pm_runtime_set_suspended(&client->dev); - - mutex_lock(&data->mutex); - mma9551_set_device_state(data->client, false); - mutex_unlock(&data->mutex); - - return 0; + return devm_iio_device_register(&client->dev, indio_dev); } static __maybe_unused int mma9553_runtime_suspend(struct device *dev) @@ -1200,7 +1205,6 @@ static struct i2c_driver mma9553_driver = { .pm = &mma9553_pm_ops, }, .probe = mma9553_probe, - .remove = mma9553_remove, .id_table = mma9553_id, };