v4l2: external modules resource use ioremap
authorchanghuang.liang <changhuang.liang@starfivetech.com>
Tue, 19 Apr 2022 02:16:29 +0000 (10:16 +0800)
committerchanghuang.liang <changhuang.liang@starfivetech.com>
Tue, 26 Apr 2022 09:39:37 +0000 (17:39 +0800)
arch/riscv/boot/dts/starfive/jh7110.dtsi
drivers/media/platform/starfive/v4l2_driver/stfcamss.c

index 3cecefa..8ed4aa9 100644 (file)
                                <0x0 0x19840000 0x0 0x10000>,
                                <0x0 0x19870000 0x0 0x30000>,
                                <0x0 0x198a0000 0x0 0x30000>,
-                               <0x0 0x11800000 0x0 0x10000>,
                                <0x0 0x11840000 0x0 0x10000>,
-                               <0x0 0x11858000 0x0 0x10000>,
-                               <0x0 0x17030000 0x0 0x10000>;
-                       reg-names = "mipi0", "vclk", "vrst", "mipi1", "sctrl", "isp0", "isp1", "tclk", "trst", "iopad", "pmu";
+                               <0x0 0x17030000 0x0 0x10000>,
+                               <0x0 0x13020000 0x0 0x10000>;
+                       reg-names = "mipi0", "vclk", "vrst", "mipi1", "sctrl",
+                               "isp0", "isp1", "trst", "pmu", "syscrg";
                        clocks = <&clkgen JH7110_ISP_TOP_CLK_ISPCORE_2X>,
                                        <&clkgen JH7110_ISP_TOP_CLK_ISP_AXI>;
                        clock-names = "clk_ispcore_2x", "clk_isp_axi";
index 370fb18..0d99644 100755 (executable)
@@ -44,17 +44,15 @@ static const struct reg_name mem_reg_name[] = {
 #ifndef CONFIG_VIDEO_CADENCE_CSI2RX
        {"mipi0"},
 #endif
-       //{"vclk"},
+       {"vclk"},
        {"vrst"},
        {"mipi1"},
        {"sctrl"},
        {"isp0"},
        {"isp1"},
-       {"tclk"},
        {"trst"},
-       {"iopad"},
        {"pmu"},
-       //{"syscrg"},
+       {"syscrg"},
 };
 
 char *clocks[] = {
@@ -84,39 +82,54 @@ int stfcamss_get_mem_res(struct platform_device *pdev, struct stf_vin_dev *vin)
        for (i = 0; i < ARRAY_SIZE(mem_reg_name); i++) {
                name = (char *)(&mem_reg_name[i]);
                res = platform_get_resource_byname(pdev, IORESOURCE_MEM, name);
-               regs = devm_ioremap_resource(dev, res);
-               if (IS_ERR(regs))
-                       return PTR_ERR(regs);
-
-               if (!strcmp(name, "mipi0"))
-                       vin->mipi0_base = regs;
-               // else if (!strcmp(name, "vclk"))
-               //      vin->clkgen_base = regs;
-               else if (!strcmp(name, "vrst"))
-                       vin->rstgen_base = regs;
-               else if (!strcmp(name, "mipi1"))
-                       vin->mipi1_base = regs;
-               else if (!strcmp(name, "sctrl"))
-                       vin->sysctrl_base = regs;
-               else if (!strcmp(name, "isp0"))
-                       vin->isp_isp0_base = regs;
-               else if (!strcmp(name, "isp1"))
-                       vin->isp_isp1_base = regs;
-               else if (!strcmp(name, "tclk"))
-                       vin->vin_top_clkgen_base = regs;
-               else if (!strcmp(name, "trst"))
-                       vin->vin_top_rstgen_base = regs;
-               else if (!strcmp(name, "iopad"))
-                       vin->vin_top_iopad_base = regs;
-               else if (!strcmp(name,"pmu"))
-                       vin->pmu_test = regs;
-               else
+               if (!res)
+                       return -EINVAL;
+
+               if (!strcmp(name, "mipi0")) {
+                       vin->mipi0_base = devm_ioremap_resource(dev, res);
+                       if (IS_ERR(vin->mipi0_base))
+                               return PTR_ERR(vin->mipi0_base);
+               } else if (!strcmp(name, "vclk")) {
+                       vin->clkgen_base = ioremap(res->start, resource_size(res));
+                       if (!vin->clkgen_base)
+                               return -ENOMEM;
+               } else if (!strcmp(name, "vrst")) {
+                       vin->rstgen_base = devm_ioremap_resource(dev, res);
+                       if (IS_ERR(vin->rstgen_base))
+                               return PTR_ERR(vin->rstgen_base);
+               } else if (!strcmp(name, "mipi1")) {
+                       vin->mipi1_base = devm_ioremap_resource(dev, res);
+                       if (IS_ERR(vin->mipi1_base))
+                               return PTR_ERR(vin->mipi1_base);
+               } else if (!strcmp(name, "sctrl")) {
+                       vin->sysctrl_base = devm_ioremap_resource(dev, res);
+                       if (IS_ERR(vin->sysctrl_base))
+                               return PTR_ERR(vin->sysctrl_base);
+               } else if (!strcmp(name, "isp0")) {
+                       vin->isp_isp0_base = devm_ioremap_resource(dev, res);
+                       if (IS_ERR(vin->isp_isp0_base))
+                               return PTR_ERR(vin->isp_isp0_base);
+               } else if (!strcmp(name, "isp1")) {
+                       vin->isp_isp1_base = devm_ioremap_resource(dev, res);
+                       if (IS_ERR(vin->isp_isp1_base))
+                               return PTR_ERR(vin->isp_isp1_base);
+               } else if (!strcmp(name, "trst")) {
+                       vin->vin_top_rstgen_base = devm_ioremap_resource(dev, res);
+                       if (IS_ERR(vin->vin_top_rstgen_base))
+                               return PTR_ERR(vin->vin_top_rstgen_base);
+               } else if (!strcmp(name, "pmu")) {
+                       vin->pmu_test = ioremap(res->start, resource_size(res));
+                       if (!vin->pmu_test)
+                               return -ENOMEM;
+               } else if (!strcmp(name, "syscrg")) {
+                       vin->sys_crg = ioremap(res->start, resource_size(res));
+                       if (!vin->sys_crg)
+                               return -ENOMEM;
+               } else {
                        st_err(ST_CAMSS, "Could not match resource name\n");
+               }
        }
 
-       vin->clkgen_base = ioremap(0x19810000, 0x10000);
-       vin->sys_crg = ioremap(0x13020000, 0x10000);
-
        return 0;
 }