bus: imx-weim: optionally enable continuous burst clock
authorIvan Bornyakov <i.bornyakov@metrotek.ru>
Thu, 2 Dec 2021 05:57:23 +0000 (08:57 +0300)
committerShawn Guo <shawnguo@kernel.org>
Tue, 14 Dec 2021 02:33:38 +0000 (10:33 +0800)
To enable continuous burst clock, add "fsl,continuous-burst-clk" along
with "fsl,burst-clk-enable" property to the weim bus's devicetree node.

Example:
weim: weim@21b8000 {
compatible = "fsl,imx6ul-weim", "fsl,imx6q-weim";
reg = <0x021b8000 0x4000>;
clocks = <&clks 143>;
#address-cells = <2>;
#size-cells = <1>;
ranges = <0 0 0x50000000 0x08000000>;
fsl,weim-cs-gpr = <&gpr>;
fsl,burst-clk-enable;
fsl,continuous-burst-clk;

client-device@0 {
...
};
};

Signed-off-by: Ivan Bornyakov <i.bornyakov@metrotek.ru>
Reviewed-by: Fabio Estevam <festevam@gmail.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
drivers/bus/imx-weim.c

index 28bb65a5613fd282dc735b5c516d9d2dabc302cd..bccb275b65ba0a2ee788e8f38a451d90cb1a95ef 100644 (file)
@@ -21,6 +21,7 @@ struct imx_weim_devtype {
        unsigned int    cs_stride;
        unsigned int    wcr_offset;
        unsigned int    wcr_bcm;
+       unsigned int    wcr_cont_bclk;
 };
 
 static const struct imx_weim_devtype imx1_weim_devtype = {
@@ -41,6 +42,7 @@ static const struct imx_weim_devtype imx50_weim_devtype = {
        .cs_stride      = 0x18,
        .wcr_offset     = 0x90,
        .wcr_bcm        = BIT(0),
+       .wcr_cont_bclk  = BIT(3),
 };
 
 static const struct imx_weim_devtype imx51_weim_devtype = {
@@ -206,8 +208,20 @@ static int weim_parse_dt(struct platform_device *pdev, void __iomem *base)
        if (of_property_read_bool(pdev->dev.of_node, "fsl,burst-clk-enable")) {
                if (devtype->wcr_bcm) {
                        reg = readl(base + devtype->wcr_offset);
-                       writel(reg | devtype->wcr_bcm,
-                               base + devtype->wcr_offset);
+                       reg |= devtype->wcr_bcm;
+
+                       if (of_property_read_bool(pdev->dev.of_node,
+                                               "fsl,continuous-burst-clk")) {
+                               if (devtype->wcr_cont_bclk) {
+                                       reg |= devtype->wcr_cont_bclk;
+                               } else {
+                                       dev_err(&pdev->dev,
+                                               "continuous burst clk not supported.\n");
+                                       return -EINVAL;
+                               }
+                       }
+
+                       writel(reg, base + devtype->wcr_offset);
                } else {
                        dev_err(&pdev->dev, "burst clk mode not supported.\n");
                        return -EINVAL;