When the PM initialization was moved in the commit referenced below, the code enabling the clock was removed from the probe function. On CONFIG_PM=y kernels, this is not a problem as the pm resume hook enables the clock, but when power management is disabled, all those pm_* functions are noops and the clock is never enabled resulting in a dysfunctional gpio controller. Put the clock initialization back to support CONFIG_PM=n. Signed-off-by: Helmut Grohne <h.grohne@xxxxxxxxxx> Fixes: 3773c195d387 ("gpio: zynq: Do PM initialization earlier to support gpio hogs") --- drivers/gpio/gpio-zynq.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) I verified that after this patch both CONFIG_PM=y and CONFIG_PM=n configurations work. Should this patch be copied to stable@xxxxxxxxxxxxxxx? It seems that CONFIG_PM=n is not a commonly used configuration anymore. Please Cc me in any replies. Helmut diff --git a/drivers/gpio/gpio-zynq.c b/drivers/gpio/gpio-zynq.c index e29cf58..3cbe63c 100644 --- a/drivers/gpio/gpio-zynq.c +++ b/drivers/gpio/gpio-zynq.c @@ -714,11 +714,17 @@ static int zynq_gpio_probe(struct platform_device *pdev) dev_err(&pdev->dev, "input clock not found.\n"); return PTR_ERR(gpio->clk); } + ret = clk_prepare_enable(gpio->clk); + if (ret) { + dev_err(&pdev->dev, "Unable to enable clock.\n"); + return ret; + } + pm_runtime_set_active(&pdev->dev); pm_runtime_enable(&pdev->dev); ret = pm_runtime_get_sync(&pdev->dev); if (ret < 0) - return ret; + goto err_disable_unprepare_clk; /* report a bug if gpio chip registration fails */ ret = gpiochip_add(chip); @@ -750,6 +756,8 @@ err_rm_gpiochip: gpiochip_remove(chip); err_pm_put: pm_runtime_put(&pdev->dev); +err_disable_unprepare_clk: + clk_disable_unprepare(gpio->clk); return ret; } -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html