From patchwork Thu Jun 3 18:52:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cameron X-Patchwork-Id: 12297845 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-19.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 79668C47096 for ; Thu, 3 Jun 2021 18:50:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 546C8613F4 for ; Thu, 3 Jun 2021 18:50:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229661AbhFCSwT (ORCPT ); Thu, 3 Jun 2021 14:52:19 -0400 Received: from mail.kernel.org ([198.145.29.99]:55864 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229576AbhFCSwT (ORCPT ); Thu, 3 Jun 2021 14:52:19 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0F3CD613F1; Thu, 3 Jun 2021 18:50:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1622746234; bh=6Pwqv0iNwUYmFpY6hX3hg/TaL0TAVQ7gDEULkh8bNA8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pwUxr78iJ2ZMzl1Jp4uL+WXZaE+2ZLXpLs6G1dXXPdz6W160qBS5GC0Gzt0vnRiPS 6qmr0C9UPZMDWsfZbEejrxCJrmCrUYTTlNSya8/S69tb2xr89GAq7BlKyyv7UCoQgj +fX44T0DptO1/bOMcNEpWA1CrfnRR2l7bRbDvQ3NpNe8CXe1BoLEzuXQT8Y7mveGkb PAy8wTgrunSoH7bMdmQZQrLSZbfgnkHrUrqGHaA2UI+8rKkKCezOY9SEAok2qWTZbV os+nXRK39cKcOV2gkraKpYRfXNcOaKpdO3aRN4043CzRxBuXizgD0C0Sk/JQn4BJIh Cbfy0hzJSm/Yg== From: Jonathan Cameron To: linux-iio@vger.kernel.org Cc: Andy Shevchenko , Hans de Goede , Alexandru Ardelean , Shawn Guo , Jonathan Cameron Subject: [PATCH v2 1/5] iio: accel: mma9551/mma9553: Drop explicit ACPI match support Date: Thu, 3 Jun 2021 19:52:03 +0100 Message-Id: <20210603185207.3646368-2-jic23@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210603185207.3646368-1-jic23@kernel.org> References: <20210603185207.3646368-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 --- 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 Thu Jun 3 18:52:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cameron X-Patchwork-Id: 12297847 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id ACD14C47096 for ; Thu, 3 Jun 2021 18:50:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 95F5B613D2 for ; Thu, 3 Jun 2021 18:50:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229625AbhFCSwW (ORCPT ); Thu, 3 Jun 2021 14:52:22 -0400 Received: from mail.kernel.org ([198.145.29.99]:55880 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229576AbhFCSwW (ORCPT ); Thu, 3 Jun 2021 14:52:22 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 52BE3613EE; Thu, 3 Jun 2021 18:50:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1622746237; bh=TQuTh7/qV9FMRI9A8MRZiyCgOCLg8Wdjhw8jTWp9pME=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DTe3Le/ue//ys0UyBsIplvbk4KFY0x0ZUxqI3NjA7IOCsVZoJJeRTBbruqJmVCisW Dk9b61Fl+I1ttByziNneu2sKhBSe5hI3EXatpF51mN3P5KaRA8MbGrBbRJk0szh/E/ PdvRjLHL0Mmo1kzvdv/doNb9usFIOHJzCu0NniIJ7/VpB/UY8jX+aMxwPtY8uNRtXi 4MK1y0cvPdKJG4wtpvBicFol3g8oxCKtXHFFsSG6Tr+dWd7apZB6N+kgtreS3GoNuH M88/DuK6dWQjAjCoNoNv/2pIx+runPh6/YktuxsOD1w5/EDqPpqkvksGFYB0ORexki yF2T8Z7eSVQgA== From: Jonathan Cameron To: linux-iio@vger.kernel.org Cc: Andy Shevchenko , Hans de Goede , Alexandru Ardelean , Shawn Guo , Jonathan Cameron Subject: [PATCH v2 2/5] iio: accel: mma9551/mma9553: Simplify pm logic Date: Thu, 3 Jun 2021 19:52:04 +0100 Message-Id: <20210603185207.3646368-3-jic23@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210603185207.3646368-1-jic23@kernel.org> References: <20210603185207.3646368-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 Thu Jun 3 18:52:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cameron X-Patchwork-Id: 12297849 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-19.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A5E8DC47082 for ; Thu, 3 Jun 2021 18:50:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7EB94613F4 for ; Thu, 3 Jun 2021 18:50:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229723AbhFCSwZ (ORCPT ); Thu, 3 Jun 2021 14:52:25 -0400 Received: from mail.kernel.org ([198.145.29.99]:55894 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229576AbhFCSwZ (ORCPT ); Thu, 3 Jun 2021 14:52:25 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 64B4D613F1; Thu, 3 Jun 2021 18:50:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1622746240; bh=vMj7iCITCCOc4D1CwIKKTbe7SZV6Jxwa3hxBvfq8WHM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=q2U1Mgih/a271twHuFlo3xnKoha0MmdPFEJYbN0oQ8VUVXQhDrWObXteRG+PlxNed Po+8KK/ZKybzHiUNb0o2GJHQI/bP8Rwd/rpTJYu4FjOCkxKefCg3jvdJkHLW3sCgze kNAWiZ8BmMLF36ub61jyi5/zT1C8Nut1eoHm/KD9JXbM/ychRM/tGH/YqYOgnnQDxo Fd/j9KLE5jUmd9TUYpURhmf/aPovXLfDoqU/mUhDf7R+fZBKKkF/1MuBKXMcv6kvSR kG9JUAqgRHK1oikOMlcfOcIlZ+CUbK9ElhrL4/U6PueMmN383XUk6bWDVjMgTx5NyJ aSs9fbIcsagyQ== From: Jonathan Cameron To: linux-iio@vger.kernel.org Cc: Andy Shevchenko , Hans de Goede , Alexandru Ardelean , Shawn Guo , Jonathan Cameron Subject: [PATCH v2 3/5] iio: accel: mma9551: Add support to get irqs directly from fwnode Date: Thu, 3 Jun 2021 19:52:05 +0100 Message-Id: <20210603185207.3646368-4-jic23@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210603185207.3646368-1-jic23@kernel.org> References: <20210603185207.3646368-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 --- v2: Drop the original gpio based support. They are only used as interrupts so lets treat them like that. 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 Thu Jun 3 18:52:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cameron X-Patchwork-Id: 12297851 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-19.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 08245C47097 for ; Thu, 3 Jun 2021 18:50:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E3C11613F5 for ; Thu, 3 Jun 2021 18:50:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229576AbhFCSw1 (ORCPT ); Thu, 3 Jun 2021 14:52:27 -0400 Received: from mail.kernel.org ([198.145.29.99]:55910 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229629AbhFCSw1 (ORCPT ); Thu, 3 Jun 2021 14:52:27 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 1050D613D2; Thu, 3 Jun 2021 18:50:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1622746242; bh=3hyJWslQDiISh3DGCDH/J1+fU8X0F+TtCHfsx1vAy4k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Yj9yIc1zRHDI5KQawwOjmnrKnKSjKw5KukEg66N3NoEvRGeFlMg/pESErNmOBlob7 rblQzygpo9nyLf3suici9DKaGgke8QX2UTwLZGYIzqr+tu5bLxmBZkElTNMR88SNgM ZhG4YtVnAfeP/OdrNACILgN262iTQbbR2NjEvbTnFb4S7SLsdZby8R7cOn69znXgkC 1fA21A4Jjdz7sE5tV0kcc8wx9IfWApb+MKv3O0T37uKikWRzn3gmmwEJXuunVh+HmN Th0eAMKywA57yEYHCItmscM0uOTm3bL1i+2YbLHERD88UCuiOPhF/N9cdzUpEpsqeS vLpZIix/cRn/w== From: Jonathan Cameron To: linux-iio@vger.kernel.org Cc: Andy Shevchenko , Hans de Goede , Alexandru Ardelean , Shawn Guo , Jonathan Cameron Subject: [PATCH v2 4/5] iio: accel: mma9551: Use devm managed functions to tidy up probe() Date: Thu, 3 Jun 2021 19:52:06 +0100 Message-Id: <20210603185207.3646368-5-jic23@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210603185207.3646368-1-jic23@kernel.org> References: <20210603185207.3646368-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 Thu Jun 3 18:52:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cameron X-Patchwork-Id: 12297853 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-19.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9691BC47096 for ; Thu, 3 Jun 2021 18:50:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 815FF613F1 for ; Thu, 3 Jun 2021 18:50:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229758AbhFCSw2 (ORCPT ); Thu, 3 Jun 2021 14:52:28 -0400 Received: from mail.kernel.org ([198.145.29.99]:55924 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229629AbhFCSw2 (ORCPT ); Thu, 3 Jun 2021 14:52:28 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 8DAED613F4; Thu, 3 Jun 2021 18:50:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1622746243; bh=EvbEma45i3jMfOlwDGtL7DgVE0KUvsXK7aDvJjVSTZQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EMs4R4zLdw7UtqXAAcTX6SGue+KTcZTbyRB4yw8T2l5a9q/cAeRUkLFU9EW7pTJ3q ODDWNP7sjfvzlLYIOKtNRcrZBSuwU7VmgFGlmYIN4JZeJGlBrVAIyhEMQJRZemuiGA 3G0rP8oY4SK8LWUW3IdCpsTXNvnQjAmunK/ETKBbhQ+gYkkCd6wQOI7bN47svdrTjf r+22KEEKri3T4I5qzIbZkNZVeT2vJE/8Z61aWxZ+HC78uFyXsZRkHcFswhgst3LH9g MaCSae6MkjNBV8hq+1D/FRPPw+E2GwpkAljrw3+NqgZYYfwpzrgeAWly3tSSUy+Xwx fb6sj8DQXhN5A== From: Jonathan Cameron To: linux-iio@vger.kernel.org Cc: Andy Shevchenko , Hans de Goede , Alexandru Ardelean , Shawn Guo , Jonathan Cameron Subject: [PATCH v2 5/5] iio: accel: mma9553: Use devm managed functions to tidy up probe() Date: Thu, 3 Jun 2021 19:52:07 +0100 Message-Id: <20210603185207.3646368-6-jic23@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210603185207.3646368-1-jic23@kernel.org> References: <20210603185207.3646368-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, };