forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-09 95099d4622f8cb224d94e314c7a8e0df60b13f87
kernel/drivers/spi/spi-bcm63xx-hsspi.c
....@@ -20,6 +20,7 @@
2020 #include <linux/spi/spi.h>
2121 #include <linux/mutex.h>
2222 #include <linux/of.h>
23
+#include <linux/reset.h>
2324
2425 #define HSSPI_GLOBAL_CTRL_REG 0x0
2526 #define GLOBAL_CTRL_CS_POLARITY_SHIFT 0
....@@ -291,8 +292,7 @@
291292
292293 msg->actual_length += t->len;
293294
294
- if (t->delay_usecs)
295
- udelay(t->delay_usecs);
295
+ spi_transfer_delay_exec(t);
296296
297297 if (t->cs_change)
298298 bcm63xx_hsspi_set_cs(bs, spi->chip_select, false);
....@@ -330,21 +330,18 @@
330330 {
331331 struct spi_master *master;
332332 struct bcm63xx_hsspi *bs;
333
- struct resource *res_mem;
334333 void __iomem *regs;
335334 struct device *dev = &pdev->dev;
336335 struct clk *clk, *pll_clk = NULL;
337336 int irq, ret;
338337 u32 reg, rate, num_cs = HSSPI_SPI_MAX_CS;
338
+ struct reset_control *reset;
339339
340340 irq = platform_get_irq(pdev, 0);
341
- if (irq < 0) {
342
- dev_err(dev, "no irq: %d\n", irq);
341
+ if (irq < 0)
343342 return irq;
344
- }
345343
346
- res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
347
- regs = devm_ioremap_resource(dev, res_mem);
344
+ regs = devm_platform_ioremap_resource(pdev, 0);
348345 if (IS_ERR(regs))
349346 return PTR_ERR(regs);
350347
....@@ -353,10 +350,20 @@
353350 if (IS_ERR(clk))
354351 return PTR_ERR(clk);
355352
353
+ reset = devm_reset_control_get_optional_exclusive(dev, NULL);
354
+ if (IS_ERR(reset))
355
+ return PTR_ERR(reset);
356
+
356357 ret = clk_prepare_enable(clk);
357358 if (ret)
358359 return ret;
359360
361
+ ret = reset_control_reset(reset);
362
+ if (ret) {
363
+ dev_err(dev, "unable to reset device: %d\n", ret);
364
+ goto out_disable_clk;
365
+ }
366
+
360367 rate = clk_get_rate(clk);
361368 if (!rate) {
362369 pll_clk = devm_clk_get(dev, "pll");