MLK-15992 imx: mlb: add ipg & hclk clocks for imx8 mlb
authorGao Pan <pandy.gao@nxp.com>
Fri, 14 Jul 2017 10:10:57 +0000 (18:10 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 20:33:38 +0000 (15:33 -0500)
Add ipg & hclk clock for imx8 mlb due to IP integration difference.

Signed-off-by: Gao Pan <pandy.gao@nxp.com>
drivers/mxc/mlb/mxc_mlb.c

index 271e3e2..b4f8ecb 100755 (executable)
@@ -368,6 +368,10 @@ struct mlb_dev_info {
 struct mlb_data {
        struct device *dev;
        struct mlb_dev_info *devinfo;
+#ifdef CONFIG_ARCH_MXC_ARM64
+       struct clk *ipg;
+       struct clk *hclk;
+#endif
        struct clk *mlb;
        struct cdev cdev;
        struct class *class;    /* device class */
@@ -1939,6 +1943,10 @@ static int mxc_mlb150_open(struct inode *inode, struct file *filp)
                return -EBUSY;
        }
 
+#ifdef CONFIG_ARCH_MXC_ARM64
+       clk_prepare_enable(drvdata->ipg);
+       clk_prepare_enable(drvdata->hclk);
+#endif
        clk_prepare_enable(drvdata->mlb);
 
        /* initial MLB module */
@@ -2030,6 +2038,10 @@ static int mxc_mlb150_release(struct inode *inode, struct file *filp)
        atomic_set(&pdevinfo->on, 0);
 
        clk_disable_unprepare(drvdata->mlb);
+#ifdef CONFIG_ARCH_MXC_ARM64
+       clk_disable_unprepare(drvdata->hclk);
+       clk_disable_unprepare(drvdata->ipg);
+#endif
        /* decrease the open count */
        atomic_set(&pdevinfo->opencnt, 0);
 
@@ -2663,7 +2675,22 @@ static int mxc_mlb150_probe(struct platform_device *pdev)
        }
 #endif
 
-       /* enable clock */
+#ifdef CONFIG_ARCH_MXC_ARM64
+       drvdata->ipg = devm_clk_get(&pdev->dev, "ipg");
+       if (IS_ERR(drvdata->ipg)) {
+               dev_err(&pdev->dev, "unable to get mlb ipg clock\n");
+               ret = PTR_ERR(drvdata->ipg);
+               goto err_dev;
+       };
+
+       drvdata->hclk = devm_clk_get(&pdev->dev, "hclk");
+       if (IS_ERR(drvdata->hclk)) {
+               dev_err(&pdev->dev, "unable to get mlb hclk clock\n");
+               ret = PTR_ERR(drvdata->hclk);
+               goto err_dev;
+       };
+#endif
+
        drvdata->mlb = devm_clk_get(&pdev->dev, "mlb");
        if (IS_ERR(drvdata->mlb)) {
                dev_err(&pdev->dev, "unable to get mlb clock\n");