hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/drivers/soc/rockchip/rockchip_thunderboot_mmc.c
....@@ -2,6 +2,7 @@
22 /*
33 * Copyright (C) 2020 Rockchip Electronics Co., Ltd.
44 */
5
+#include <linux/clk.h>
56 #include <linux/iopoll.h>
67 #include <linux/kernel.h>
78 #include <linux/kthread.h>
....@@ -27,6 +28,8 @@
2728 struct resource *res;
2829 struct device_node *rds, *rdd, *dma;
2930 struct device *dev = &pdev->dev;
31
+ struct clk_bulk_data *clk_bulks;
32
+ int clk_num;
3033 u32 status;
3134
3235 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
....@@ -39,6 +42,18 @@
3942 rds = of_parse_phandle(dev->of_node, "memory-region-src", 0);
4043 rdd = of_parse_phandle(dev->of_node, "memory-region-dst", 0);
4144 dma = of_parse_phandle(dev->of_node, "memory-region-idmac", 0);
45
+
46
+ clk_num = clk_bulk_get_all(&pdev->dev, &clk_bulks);
47
+ if (clk_num >= 0) {
48
+ ret = clk_bulk_prepare_enable(clk_num, clk_bulks);
49
+ if (ret) {
50
+ dev_err(&pdev->dev, "failed to enable clocks\n");
51
+ return ret;
52
+ }
53
+ } else {
54
+ dev_err(&pdev->dev, "failed to get clks property\\n");
55
+ return clk_num;
56
+ }
4257
4358 if (readl_poll_timeout(regs + SDMMC_STATUS, status,
4459 !(status & (BIT(10) | GENMASK(7, 4))), 100,
....@@ -95,6 +110,8 @@
95110 }
96111
97112 out:
113
+ clk_bulk_disable_unprepare(clk_num, clk_bulks);
114
+ clk_bulk_put_all(clk_num, clk_bulks);
98115 of_node_put(rds);
99116 of_node_put(rdd);
100117 of_node_put(dma);