| From cc9432c4fb159a3913e0ce3173b8218cd5bad2e0 Mon Sep 17 00:00:00 2001 |
| From: Alexander Stein <alexander.stein@ew.tq-group.com> |
| Date: Tue, 6 Feb 2024 09:39:12 +0100 |
| Subject: mmc: slot-gpio: Allow non-sleeping GPIO ro |
| |
| From: Alexander Stein <alexander.stein@ew.tq-group.com> |
| |
| commit cc9432c4fb159a3913e0ce3173b8218cd5bad2e0 upstream. |
| |
| This change uses the appropriate _cansleep or non-sleeping API for |
| reading GPIO read-only state. This allows users with GPIOs that |
| never sleepbeing called in atomic context. |
| |
| Implement the same mechanism as in commit 52af318c93e97 ("mmc: Allow |
| non-sleeping GPIO cd"). |
| |
| Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com> |
| Cc: stable@vger.kernel.org |
| Link: https://lore.kernel.org/r/20240206083912.2543142-1-alexander.stein@ew.tq-group.com |
| Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/mmc/core/slot-gpio.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/mmc/core/slot-gpio.c |
| +++ b/drivers/mmc/core/slot-gpio.c |
| @@ -75,11 +75,15 @@ EXPORT_SYMBOL(mmc_gpio_set_cd_irq); |
| int mmc_gpio_get_ro(struct mmc_host *host) |
| { |
| struct mmc_gpio *ctx = host->slot.handler_priv; |
| + int cansleep; |
| |
| if (!ctx || !ctx->ro_gpio) |
| return -ENOSYS; |
| |
| - return gpiod_get_value_cansleep(ctx->ro_gpio); |
| + cansleep = gpiod_cansleep(ctx->ro_gpio); |
| + return cansleep ? |
| + gpiod_get_value_cansleep(ctx->ro_gpio) : |
| + gpiod_get_value(ctx->ro_gpio); |
| } |
| EXPORT_SYMBOL(mmc_gpio_get_ro); |
| |