MLK-15067: ASoC: fsl: imx-wm8958: Refactor GPR parsing
authorDaniel Baluta <daniel.baluta@nxp.com>
Tue, 20 Jun 2017 10:46:53 +0000 (13:46 +0300)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 20:28:31 +0000 (15:28 -0500)
This is similar with commit c79a82aec8ccf ("ASoC: fsl: imx-wm8960: Refactor
GPR parsing") and it is needed for easier adding support for non-gpr boards.

Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
sound/soc/fsl/imx-wm8958.c

index 73e5755..63c83af 100644 (file)
@@ -401,6 +401,32 @@ static int imx_wm8958_set_bias_level_post(struct snd_soc_card *card,
        return 0;
 }
 
+static int of_parse_gpr(struct platform_device *pdev,
+                       struct imx_wm8958_data *data)
+{
+       int ret;
+       struct of_phandle_args args;
+
+       ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
+                                              "gpr", 3, 0, &args);
+       if (ret) {
+               dev_warn(&pdev->dev, "failed to get gpr property\n");
+               return ret;
+       }
+
+       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");
+               return ret;
+       }
+
+       regmap_update_bits(data->gpr, args.args[0], args.args[1],
+                          args.args[2]);
+
+       return 0;
+}
+
 static int imx_wm8958_probe(struct platform_device *pdev)
 {
        struct device_node *cpu_np, *codec_np = NULL;
@@ -409,7 +435,6 @@ static int imx_wm8958_probe(struct platform_device *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;
@@ -448,19 +473,9 @@ static int imx_wm8958_probe(struct platform_device *pdev)
                goto fail;
        }
 
-       ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node, "gpr", 3,
-                               0, &args);
-       if (ret) {
-               dev_warn(&pdev->dev, "failed to get gpr property\n");
-       } 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;
-               }
-               regmap_update_bits(data->gpr, args.args[0], args.args[1], args.args[2]);
-       }
+       ret = of_parse_gpr(pdev, data);
+       if (ret)
+               goto fail;
 
        if (of_property_read_bool(np, "codec-master")) {
                data->dai.dai_fmt = SND_SOC_DAIFMT_CBM_CFM;