mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 18:47:06 +00:00
61 lines
1.7 KiB
Diff
61 lines
1.7 KiB
Diff
|
From 2cd3e51cb76d49d8db6274ebdc1ba1eb5c872f10 Mon Sep 17 00:00:00 2001
|
||
|
From: "ziv.xu" <ziv.xu@starfivetech.com>
|
||
|
Date: Sun, 4 Feb 2024 10:35:24 +0800
|
||
|
Subject: [PATCH 051/116] spi: spl022: Get and deassert reset in probe()
|
||
|
|
||
|
This fix spi1~6 communication time out.
|
||
|
|
||
|
Signed-off-by: ziv.xu <ziv.xu@starfivetech.com>
|
||
|
Signed-off-by: Hal Feng <hal.feng@starfivetech.com>
|
||
|
---
|
||
|
drivers/spi/spi-pl022.c | 17 +++++++++++++++++
|
||
|
1 file changed, 17 insertions(+)
|
||
|
|
||
|
--- a/drivers/spi/spi-pl022.c
|
||
|
+++ b/drivers/spi/spi-pl022.c
|
||
|
@@ -33,6 +33,7 @@
|
||
|
#include <linux/pm_runtime.h>
|
||
|
#include <linux/of.h>
|
||
|
#include <linux/pinctrl/consumer.h>
|
||
|
+#include <linux/reset.h>
|
||
|
|
||
|
/*
|
||
|
* This macro is used to define some register default values.
|
||
|
@@ -370,6 +371,7 @@ struct pl022 {
|
||
|
resource_size_t phybase;
|
||
|
void __iomem *virtbase;
|
||
|
struct clk *clk;
|
||
|
+ struct reset_control *rst;
|
||
|
struct spi_controller *host;
|
||
|
struct pl022_ssp_controller *host_info;
|
||
|
/* Message per-transfer pump */
|
||
|
@@ -2181,6 +2183,19 @@ static int pl022_probe(struct amba_devic
|
||
|
goto err_no_clk_en;
|
||
|
}
|
||
|
|
||
|
+ pl022->rst = devm_reset_control_get(&adev->dev, NULL);
|
||
|
+ if (IS_ERR(pl022->rst)) {
|
||
|
+ status = PTR_ERR(pl022->rst);
|
||
|
+ dev_err(&adev->dev, "could not retrieve SSP/SPI bus reset\n");
|
||
|
+ goto err_no_rst;
|
||
|
+ }
|
||
|
+
|
||
|
+ status = reset_control_deassert(pl022->rst);
|
||
|
+ if (status) {
|
||
|
+ dev_err(&adev->dev, "could not deassert SSP/SPI bus reset\n");
|
||
|
+ goto err_no_rst_de;
|
||
|
+ }
|
||
|
+
|
||
|
/* Initialize transfer pump */
|
||
|
tasklet_init(&pl022->pump_transfers, pump_transfers,
|
||
|
(unsigned long)pl022);
|
||
|
@@ -2240,6 +2255,8 @@ static int pl022_probe(struct amba_devic
|
||
|
if (platform_info->enable_dma)
|
||
|
pl022_dma_remove(pl022);
|
||
|
err_no_irq:
|
||
|
+ err_no_rst_de:
|
||
|
+ err_no_rst:
|
||
|
clk_disable_unprepare(pl022->clk);
|
||
|
err_no_clk_en:
|
||
|
err_no_clk:
|