gpio: cadence: Use helper function devm_clk_get_enabled()
devm_clk_get() and clk_prepare_enable() can be replaced by helper function devm_clk_get_enabled(). Let's use devm_clk_get_enabled() to simplify code and avoid calling clk_disable_unprepare(). Signed-off-by: Zhang Zekun <zhangzekun11@huawei.com> Link: https://lore.kernel.org/r/20240904092311.9544-2-zhangzekun11@huawei.com Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
This commit is contained in:
parent
f4d08a8fed
commit
da426eda1b
@ -31,7 +31,6 @@
|
|||||||
|
|
||||||
struct cdns_gpio_chip {
|
struct cdns_gpio_chip {
|
||||||
struct gpio_chip gc;
|
struct gpio_chip gc;
|
||||||
struct clk *pclk;
|
|
||||||
void __iomem *regs;
|
void __iomem *regs;
|
||||||
u32 bypass_orig;
|
u32 bypass_orig;
|
||||||
};
|
};
|
||||||
@ -155,6 +154,7 @@ static int cdns_gpio_probe(struct platform_device *pdev)
|
|||||||
int ret, irq;
|
int ret, irq;
|
||||||
u32 dir_prev;
|
u32 dir_prev;
|
||||||
u32 num_gpios = 32;
|
u32 num_gpios = 32;
|
||||||
|
struct clk *clk;
|
||||||
|
|
||||||
cgpio = devm_kzalloc(&pdev->dev, sizeof(*cgpio), GFP_KERNEL);
|
cgpio = devm_kzalloc(&pdev->dev, sizeof(*cgpio), GFP_KERNEL);
|
||||||
if (!cgpio)
|
if (!cgpio)
|
||||||
@ -203,21 +203,14 @@ static int cdns_gpio_probe(struct platform_device *pdev)
|
|||||||
cgpio->gc.request = cdns_gpio_request;
|
cgpio->gc.request = cdns_gpio_request;
|
||||||
cgpio->gc.free = cdns_gpio_free;
|
cgpio->gc.free = cdns_gpio_free;
|
||||||
|
|
||||||
cgpio->pclk = devm_clk_get(&pdev->dev, NULL);
|
clk = devm_clk_get_enabled(&pdev->dev, NULL);
|
||||||
if (IS_ERR(cgpio->pclk)) {
|
if (IS_ERR(clk)) {
|
||||||
ret = PTR_ERR(cgpio->pclk);
|
ret = PTR_ERR(clk);
|
||||||
dev_err(&pdev->dev,
|
dev_err(&pdev->dev,
|
||||||
"Failed to retrieve peripheral clock, %d\n", ret);
|
"Failed to retrieve peripheral clock, %d\n", ret);
|
||||||
goto err_revert_dir;
|
goto err_revert_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = clk_prepare_enable(cgpio->pclk);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(&pdev->dev,
|
|
||||||
"Failed to enable the peripheral clock, %d\n", ret);
|
|
||||||
goto err_revert_dir;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Optional irq_chip support
|
* Optional irq_chip support
|
||||||
*/
|
*/
|
||||||
@ -234,7 +227,7 @@ static int cdns_gpio_probe(struct platform_device *pdev)
|
|||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!girq->parents) {
|
if (!girq->parents) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto err_disable_clk;
|
goto err_revert_dir;
|
||||||
}
|
}
|
||||||
girq->parents[0] = irq;
|
girq->parents[0] = irq;
|
||||||
girq->default_type = IRQ_TYPE_NONE;
|
girq->default_type = IRQ_TYPE_NONE;
|
||||||
@ -244,7 +237,7 @@ static int cdns_gpio_probe(struct platform_device *pdev)
|
|||||||
ret = devm_gpiochip_add_data(&pdev->dev, &cgpio->gc, cgpio);
|
ret = devm_gpiochip_add_data(&pdev->dev, &cgpio->gc, cgpio);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(&pdev->dev, "Could not register gpiochip, %d\n", ret);
|
dev_err(&pdev->dev, "Could not register gpiochip, %d\n", ret);
|
||||||
goto err_disable_clk;
|
goto err_revert_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
cgpio->bypass_orig = ioread32(cgpio->regs + CDNS_GPIO_BYPASS_MODE);
|
cgpio->bypass_orig = ioread32(cgpio->regs + CDNS_GPIO_BYPASS_MODE);
|
||||||
@ -259,9 +252,6 @@ static int cdns_gpio_probe(struct platform_device *pdev)
|
|||||||
platform_set_drvdata(pdev, cgpio);
|
platform_set_drvdata(pdev, cgpio);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_disable_clk:
|
|
||||||
clk_disable_unprepare(cgpio->pclk);
|
|
||||||
|
|
||||||
err_revert_dir:
|
err_revert_dir:
|
||||||
iowrite32(dir_prev, cgpio->regs + CDNS_GPIO_DIRECTION_MODE);
|
iowrite32(dir_prev, cgpio->regs + CDNS_GPIO_DIRECTION_MODE);
|
||||||
|
|
||||||
@ -273,7 +263,6 @@ static void cdns_gpio_remove(struct platform_device *pdev)
|
|||||||
struct cdns_gpio_chip *cgpio = platform_get_drvdata(pdev);
|
struct cdns_gpio_chip *cgpio = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
iowrite32(cgpio->bypass_orig, cgpio->regs + CDNS_GPIO_BYPASS_MODE);
|
iowrite32(cgpio->bypass_orig, cgpio->regs + CDNS_GPIO_BYPASS_MODE);
|
||||||
clk_disable_unprepare(cgpio->pclk);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct of_device_id cdns_of_ids[] = {
|
static const struct of_device_id cdns_of_ids[] = {
|
||||||
|
Loading…
Reference in New Issue
Block a user