diff options
author | Shengjiu Wang <shengjiu.wang@freescale.com> | 2016-10-19 17:22:16 +0800 |
---|---|---|
committer | Dong Aisheng <aisheng.dong@nxp.com> | 2019-11-25 15:50:06 +0800 |
commit | d1ab1dbc5938cb114e37b57c04c21c0eb38b1623 (patch) | |
tree | ad0c5a14ae9639719b2ed28b813ecf15337e7e41 /sound | |
parent | 28fdfb3d2cd544bf17c9482a2d6c3b7f652c8993 (diff) |
MLK-13369-1: ASoC: fsl: fix the hard code gpr address in machine driver
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>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/fsl/imx-wm8958.c | 16 | ||||
-rw-r--r-- | sound/soc/fsl/imx-wm8960.c | 16 |
2 files changed, 19 insertions, 13 deletions
diff --git a/sound/soc/fsl/imx-wm8958.c b/sound/soc/fsl/imx-wm8958.c index e8ad44c315e8..c1d153d8c902 100644 --- a/sound/soc/fsl/imx-wm8958.c +++ b/sound/soc/fsl/imx-wm8958.c @@ -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")) { diff --git a/sound/soc/fsl/imx-wm8960.c b/sound/soc/fsl/imx-wm8960.c index 985457ec5cd8..68f300c8aa54 100644 --- a/sound/soc/fsl/imx-wm8960.c +++ b/sound/soc/fsl/imx-wm8960.c @@ -421,13 +421,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; @@ -477,17 +477,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); |