bus: imx-weim: optionally enable burst clock mode
authorSven Van Asbroeck <thesven73@gmail.com>
Fri, 12 Jul 2019 20:43:15 +0000 (16:43 -0400)
committerShawn Guo <shawnguo@kernel.org>
Sat, 3 Aug 2019 08:18:56 +0000 (10:18 +0200)
To enable burst clock mode, add the fsl,burst-clk-enable
property to the weim bus's devicetree node.

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

client-device@0,0 {
compatible = "something";
reg = <0 0 0x02000000>;
#address-cells = <1>;
#size-cells = <1>;
bank-width = <2>;
fsl,weim-cs-timing = <0x00620081 0x00000001 0x1c022000
0x0000c000 0x1404a38e 0x00000000>;
};
};

Signed-off-by: Sven Van Asbroeck <TheSven73@gmail.com>
Reviewed-by: Fabio Estevam <festevam@gmail.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
drivers/bus/imx-weim.c

index db74334..cb7d550 100644 (file)
@@ -19,6 +19,8 @@ struct imx_weim_devtype {
        unsigned int    cs_count;
        unsigned int    cs_regs_count;
        unsigned int    cs_stride;
+       unsigned int    wcr_offset;
+       unsigned int    wcr_bcm;
 };
 
 static const struct imx_weim_devtype imx1_weim_devtype = {
@@ -37,6 +39,8 @@ static const struct imx_weim_devtype imx50_weim_devtype = {
        .cs_count       = 4,
        .cs_regs_count  = 6,
        .cs_stride      = 0x18,
+       .wcr_offset     = 0x90,
+       .wcr_bcm        = BIT(0),
 };
 
 static const struct imx_weim_devtype imx51_weim_devtype = {
@@ -192,6 +196,7 @@ static int __init weim_parse_dt(struct platform_device *pdev,
        struct device_node *child;
        int ret, have_child = 0;
        struct cs_timing_state ts = {};
+       u32 reg;
 
        if (devtype == &imx50_weim_devtype) {
                ret = imx_weim_gpr_setup(pdev);
@@ -199,6 +204,17 @@ static int __init weim_parse_dt(struct platform_device *pdev,
                        return ret;
        }
 
+       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);
+               } else {
+                       dev_err(&pdev->dev, "burst clk mode not supported.\n");
+                       return -EINVAL;
+               }
+       }
+
        for_each_available_child_of_node(pdev->dev.of_node, child) {
                ret = weim_timing_setup(&pdev->dev, child, base, devtype, &ts);
                if (ret)