MLK-13369-1: ASoC: fsl: fix the hard code gpr address in machine driver
authorShengjiu Wang <shengjiu.wang@freescale.com>
Wed, 19 Oct 2016 09:22:16 +0000 (17:22 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 19:52:28 +0000 (14:52 -0500)
There is hard code for gpr address in machine driver, imx-wm8960
and imx-wm8958, when the sai interface changed to sai1 or sai3,
there will be issue, so remove the hard code, use the property
from the device tree.

Signed-off-by: Shengjiu Wang <shengjiu.wang@freescale.com>
sound/soc/fsl/imx-wm8958.c
sound/soc/fsl/imx-wm8960.c

index 5863fc9..3e38a24 100644 (file)
@@ -403,12 +403,13 @@ static int imx_wm8958_set_bias_level_post(struct snd_soc_card *card,
 
 static int imx_wm8958_probe(struct platform_device *pdev)
 {
-       struct device_node *cpu_np, *codec_np = NULL, *gpr_np;
+       struct device_node *cpu_np, *codec_np = NULL;
        struct device_node *np = pdev->dev.of_node;
        struct platform_device *cpu_pdev;
        struct imx_priv *priv = &card_priv;
        struct i2c_client *codec_dev;
        struct imx_wm8958_data *data;
+       struct of_phandle_args args;
        int ret;
 
        priv->pdev = pdev;
@@ -447,16 +448,19 @@ static int imx_wm8958_probe(struct platform_device *pdev)
                goto fail;
        }
 
-       gpr_np = of_parse_phandle(pdev->dev.of_node, "gpr", 0);
-       if (gpr_np) {
-               data->gpr = syscon_node_to_regmap(gpr_np);
+       ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node, "gpr", 3,
+                               0, &args);
+       if (ret) {
+               dev_err(&pdev->dev, "failed to get gpr property\n");
+               goto fail;
+       } else {
+               data->gpr = syscon_node_to_regmap(args.np);
                if (IS_ERR(data->gpr)) {
                        ret = PTR_ERR(data->gpr);
                        dev_err(&pdev->dev, "failed to get gpr regmap\n");
                        goto fail;
                }
-               if (data->gpr)
-                       regmap_update_bits(data->gpr, 4, 1<<20, 1<<20);
+               regmap_update_bits(data->gpr, args.args[0], args.args[1], args.args[2]);
        }
 
        if (of_property_read_bool(np, "codec-master")) {
index 5a59242..f1cb365 100644 (file)
@@ -422,13 +422,13 @@ static struct snd_soc_dai_link imx_wm8960_dai[] = {
 static int imx_wm8960_probe(struct platform_device *pdev)
 {
        struct device_node *cpu_np, *codec_np = NULL;
-       struct device_node *gpr_np;
        struct platform_device *cpu_pdev;
        struct imx_priv *priv = &card_priv;
        struct i2c_client *codec_dev;
        struct imx_wm8960_data *data;
        struct platform_device *asrc_pdev = NULL;
        struct device_node *asrc_np;
+       struct of_phandle_args args;
        u32 width;
        int ret;
 
@@ -478,17 +478,19 @@ static int imx_wm8960_probe(struct platform_device *pdev)
                goto fail;
        }
 
-       gpr_np = of_parse_phandle(pdev->dev.of_node, "gpr", 0);
-        if (gpr_np) {
-               data->gpr = syscon_node_to_regmap(gpr_np);
+       ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node, "gpr", 3,
+                               0, &args);
+       if (ret) {
+               dev_err(&pdev->dev, "failed to get gpr property\n");
+               goto fail;
+       } else {
+               data->gpr = syscon_node_to_regmap(args.np);
                if (IS_ERR(data->gpr)) {
                        ret = PTR_ERR(data->gpr);
                        dev_err(&pdev->dev, "failed to get gpr regmap\n");
                        goto fail;
                }
-
-               /* set SAI2_MCLK_DIR to enable codec MCLK for imx7d */
-               regmap_update_bits(data->gpr, 4, 1<<20, 1<<20);
+               regmap_update_bits(data->gpr, args.args[0], args.args[1], args.args[2]);
        }
 
        of_property_read_u32_array(pdev->dev.of_node, "hp-det", data->hp_det, 2);