Commit 8f7206d6 authored by Fabio Estevam's avatar Fabio Estevam Committed by Mark Brown

ASoC: imx-wm8962: Remove global variables

Currently the following variables are global:
- card_priv, sample_rate and sample_format

,which is not a good idea as it prevents the usage of multiple
instances.

Make sample_rate and sample_format part of the imx_priv structure
and allocate imx_priv via the standard devm_kzalloc() mechanism
inside the probe function.
Signed-off-by: default avatarFabio Estevam <fabio.estevam@nxp.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent db22d189
...@@ -38,8 +38,9 @@ struct imx_wm8962_data { ...@@ -38,8 +38,9 @@ struct imx_wm8962_data {
struct imx_priv { struct imx_priv {
struct platform_device *pdev; struct platform_device *pdev;
int sample_rate;
snd_pcm_format_t sample_format;
}; };
static struct imx_priv card_priv;
static const struct snd_soc_dapm_widget imx_wm8962_dapm_widgets[] = { static const struct snd_soc_dapm_widget imx_wm8962_dapm_widgets[] = {
SND_SOC_DAPM_HP("Headphone Jack", NULL), SND_SOC_DAPM_HP("Headphone Jack", NULL),
...@@ -48,14 +49,14 @@ static const struct snd_soc_dapm_widget imx_wm8962_dapm_widgets[] = { ...@@ -48,14 +49,14 @@ static const struct snd_soc_dapm_widget imx_wm8962_dapm_widgets[] = {
SND_SOC_DAPM_MIC("DMIC", NULL), SND_SOC_DAPM_MIC("DMIC", NULL),
}; };
static int sample_rate = 44100;
static snd_pcm_format_t sample_format = SNDRV_PCM_FORMAT_S16_LE;
static int imx_hifi_hw_params(struct snd_pcm_substream *substream, static int imx_hifi_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params) struct snd_pcm_hw_params *params)
{ {
sample_rate = params_rate(params); struct snd_soc_pcm_runtime *rtd = substream->private_data;
sample_format = params_format(params); struct imx_priv *priv = snd_soc_card_get_drvdata(rtd->card);
priv->sample_rate = params_rate(params);
priv->sample_format = params_format(params);
return 0; return 0;
} }
...@@ -70,7 +71,7 @@ static int imx_wm8962_set_bias_level(struct snd_soc_card *card, ...@@ -70,7 +71,7 @@ static int imx_wm8962_set_bias_level(struct snd_soc_card *card,
{ {
struct snd_soc_pcm_runtime *rtd; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *codec_dai; struct snd_soc_dai *codec_dai;
struct imx_priv *priv = &card_priv; struct imx_priv *priv = snd_soc_card_get_drvdata(card);
struct imx_wm8962_data *data = snd_soc_card_get_drvdata(card); struct imx_wm8962_data *data = snd_soc_card_get_drvdata(card);
struct device *dev = &priv->pdev->dev; struct device *dev = &priv->pdev->dev;
unsigned int pll_out; unsigned int pll_out;
...@@ -84,10 +85,10 @@ static int imx_wm8962_set_bias_level(struct snd_soc_card *card, ...@@ -84,10 +85,10 @@ static int imx_wm8962_set_bias_level(struct snd_soc_card *card,
switch (level) { switch (level) {
case SND_SOC_BIAS_PREPARE: case SND_SOC_BIAS_PREPARE:
if (dapm->bias_level == SND_SOC_BIAS_STANDBY) { if (dapm->bias_level == SND_SOC_BIAS_STANDBY) {
if (sample_format == SNDRV_PCM_FORMAT_S24_LE) if (priv->sample_format == SNDRV_PCM_FORMAT_S24_LE)
pll_out = sample_rate * 384; pll_out = priv->sample_rate * 384;
else else
pll_out = sample_rate * 256; pll_out = priv->sample_rate * 256;
ret = snd_soc_dai_set_pll(codec_dai, WM8962_FLL, ret = snd_soc_dai_set_pll(codec_dai, WM8962_FLL,
WM8962_FLL_MCLK, data->clk_frequency, WM8962_FLL_MCLK, data->clk_frequency,
...@@ -139,7 +140,7 @@ static int imx_wm8962_late_probe(struct snd_soc_card *card) ...@@ -139,7 +140,7 @@ static int imx_wm8962_late_probe(struct snd_soc_card *card)
{ {
struct snd_soc_pcm_runtime *rtd; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *codec_dai; struct snd_soc_dai *codec_dai;
struct imx_priv *priv = &card_priv; struct imx_priv *priv = snd_soc_card_get_drvdata(card);
struct imx_wm8962_data *data = snd_soc_card_get_drvdata(card); struct imx_wm8962_data *data = snd_soc_card_get_drvdata(card);
struct device *dev = &priv->pdev->dev; struct device *dev = &priv->pdev->dev;
int ret; int ret;
...@@ -159,14 +160,20 @@ static int imx_wm8962_probe(struct platform_device *pdev) ...@@ -159,14 +160,20 @@ static int imx_wm8962_probe(struct platform_device *pdev)
struct device_node *np = pdev->dev.of_node; struct device_node *np = pdev->dev.of_node;
struct device_node *ssi_np, *codec_np; struct device_node *ssi_np, *codec_np;
struct platform_device *ssi_pdev; struct platform_device *ssi_pdev;
struct imx_priv *priv = &card_priv;
struct i2c_client *codec_dev; struct i2c_client *codec_dev;
struct imx_wm8962_data *data; struct imx_wm8962_data *data;
struct imx_priv *priv;
struct clk *codec_clk; struct clk *codec_clk;
int int_port, ext_port; int int_port, ext_port;
int ret; int ret;
priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
if (!priv)
return -ENOMEM;
priv->pdev = pdev; priv->pdev = pdev;
priv->sample_rate = 44100;
priv->sample_format = SNDRV_PCM_FORMAT_S16_LE;
ret = of_property_read_u32(np, "mux-int-port", &int_port); ret = of_property_read_u32(np, "mux-int-port", &int_port);
if (ret) { if (ret) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment