Commit cd15da88 authored by Andrew F. Davis's avatar Andrew F. Davis Committed by Mark Brown

ASoC: tlv320aic31xx: Use fwnode APIs over raw OF calls

Use fwnode_* API instead of of_*, the results are the same but
fwnode_* is cleaner and we get ACPI support.
Signed-off-by: default avatarAndrew F. Davis <afd@ti.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 283c3506
...@@ -157,7 +157,9 @@ struct aic31xx_priv { ...@@ -157,7 +157,9 @@ struct aic31xx_priv {
u8 i2c_regs_status; u8 i2c_regs_status;
struct device *dev; struct device *dev;
struct regmap *regmap; struct regmap *regmap;
enum aic31xx_type codec_type;
struct gpio_desc *gpio_reset; struct gpio_desc *gpio_reset;
int micbias_vg;
struct aic31xx_pdata pdata; struct aic31xx_pdata pdata;
struct regulator_bulk_data supplies[AIC31XX_NUM_SUPPLIES]; struct regulator_bulk_data supplies[AIC31XX_NUM_SUPPLIES];
struct aic31xx_disable_nb disable_nb[AIC31XX_NUM_SUPPLIES]; struct aic31xx_disable_nb disable_nb[AIC31XX_NUM_SUPPLIES];
...@@ -450,7 +452,7 @@ static int mic_bias_event(struct snd_soc_dapm_widget *w, ...@@ -450,7 +452,7 @@ static int mic_bias_event(struct snd_soc_dapm_widget *w,
/* change mic bias voltage to user defined */ /* change mic bias voltage to user defined */
snd_soc_update_bits(codec, AIC31XX_MICBIAS, snd_soc_update_bits(codec, AIC31XX_MICBIAS,
AIC31XX_MICBIAS_MASK, AIC31XX_MICBIAS_MASK,
aic31xx->pdata.micbias_vg << aic31xx->micbias_vg <<
AIC31XX_MICBIAS_SHIFT); AIC31XX_MICBIAS_SHIFT);
dev_dbg(codec->dev, "%s: turned on\n", __func__); dev_dbg(codec->dev, "%s: turned on\n", __func__);
break; break;
...@@ -673,14 +675,14 @@ static int aic31xx_add_controls(struct snd_soc_codec *codec) ...@@ -673,14 +675,14 @@ static int aic31xx_add_controls(struct snd_soc_codec *codec)
int ret = 0; int ret = 0;
struct aic31xx_priv *aic31xx = snd_soc_codec_get_drvdata(codec); struct aic31xx_priv *aic31xx = snd_soc_codec_get_drvdata(codec);
if (!(aic31xx->pdata.codec_type & DAC31XX_BIT)) if (!(aic31xx->codec_type & DAC31XX_BIT))
ret = snd_soc_add_codec_controls( ret = snd_soc_add_codec_controls(
codec, aic31xx_snd_controls, codec, aic31xx_snd_controls,
ARRAY_SIZE(aic31xx_snd_controls)); ARRAY_SIZE(aic31xx_snd_controls));
if (ret) if (ret)
return ret; return ret;
if (aic31xx->pdata.codec_type & AIC31XX_STEREO_CLASS_D_BIT) if (aic31xx->codec_type & AIC31XX_STEREO_CLASS_D_BIT)
ret = snd_soc_add_codec_controls( ret = snd_soc_add_codec_controls(
codec, aic311x_snd_controls, codec, aic311x_snd_controls,
ARRAY_SIZE(aic311x_snd_controls)); ARRAY_SIZE(aic311x_snd_controls));
...@@ -698,7 +700,7 @@ static int aic31xx_add_widgets(struct snd_soc_codec *codec) ...@@ -698,7 +700,7 @@ static int aic31xx_add_widgets(struct snd_soc_codec *codec)
struct aic31xx_priv *aic31xx = snd_soc_codec_get_drvdata(codec); struct aic31xx_priv *aic31xx = snd_soc_codec_get_drvdata(codec);
int ret = 0; int ret = 0;
if (aic31xx->pdata.codec_type & DAC31XX_BIT) { if (aic31xx->codec_type & DAC31XX_BIT) {
ret = snd_soc_dapm_new_controls( ret = snd_soc_dapm_new_controls(
dapm, dac31xx_dapm_widgets, dapm, dac31xx_dapm_widgets,
ARRAY_SIZE(dac31xx_dapm_widgets)); ARRAY_SIZE(dac31xx_dapm_widgets));
...@@ -722,7 +724,7 @@ static int aic31xx_add_widgets(struct snd_soc_codec *codec) ...@@ -722,7 +724,7 @@ static int aic31xx_add_widgets(struct snd_soc_codec *codec)
return ret; return ret;
} }
if (aic31xx->pdata.codec_type & AIC31XX_STEREO_CLASS_D_BIT) { if (aic31xx->codec_type & AIC31XX_STEREO_CLASS_D_BIT) {
ret = snd_soc_dapm_new_controls( ret = snd_soc_dapm_new_controls(
dapm, aic311x_dapm_widgets, dapm, aic311x_dapm_widgets,
ARRAY_SIZE(aic311x_dapm_widgets)); ARRAY_SIZE(aic311x_dapm_widgets));
...@@ -1279,42 +1281,6 @@ static const struct of_device_id tlv320aic31xx_of_match[] = { ...@@ -1279,42 +1281,6 @@ static const struct of_device_id tlv320aic31xx_of_match[] = {
{}, {},
}; };
MODULE_DEVICE_TABLE(of, tlv320aic31xx_of_match); MODULE_DEVICE_TABLE(of, tlv320aic31xx_of_match);
static void aic31xx_pdata_from_of(struct aic31xx_priv *aic31xx)
{
struct device_node *np = aic31xx->dev->of_node;
unsigned int value = MICBIAS_2_0V;
int ret;
of_property_read_u32(np, "ai31xx-micbias-vg", &value);
switch (value) {
case MICBIAS_2_0V:
case MICBIAS_2_5V:
case MICBIAS_AVDDV:
aic31xx->pdata.micbias_vg = value;
break;
default:
dev_err(aic31xx->dev,
"Bad ai31xx-micbias-vg value %d DT\n",
value);
aic31xx->pdata.micbias_vg = MICBIAS_2_0V;
}
ret = of_get_named_gpio(np, "reset-gpios", 0);
if (ret > 0) {
aic31xx->pdata.gpio_reset = ret;
} else {
ret = of_get_named_gpio(np, "gpio-reset", 0);
if (ret > 0) {
dev_warn(aic31xx->dev, "Using deprecated property \"gpio-reset\", please update your DT");
aic31xx->pdata.gpio_reset = ret;
}
}
}
#else /* CONFIG_OF */
static void aic31xx_pdata_from_of(struct aic31xx_priv *aic31xx)
{
}
#endif /* CONFIG_OF */ #endif /* CONFIG_OF */
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
...@@ -1329,6 +1295,7 @@ static int aic31xx_i2c_probe(struct i2c_client *i2c, ...@@ -1329,6 +1295,7 @@ static int aic31xx_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id) const struct i2c_device_id *id)
{ {
struct aic31xx_priv *aic31xx; struct aic31xx_priv *aic31xx;
unsigned int micbias_value = MICBIAS_2_0V;
int i, ret; int i, ret;
dev_dbg(&i2c->dev, "## %s: %s codec_type = %d\n", __func__, dev_dbg(&i2c->dev, "## %s: %s codec_type = %d\n", __func__,
...@@ -1347,15 +1314,29 @@ static int aic31xx_i2c_probe(struct i2c_client *i2c, ...@@ -1347,15 +1314,29 @@ static int aic31xx_i2c_probe(struct i2c_client *i2c,
} }
aic31xx->dev = &i2c->dev; aic31xx->dev = &i2c->dev;
aic31xx->pdata.codec_type = id->driver_data; aic31xx->codec_type = id->driver_data;
dev_set_drvdata(aic31xx->dev, aic31xx); dev_set_drvdata(aic31xx->dev, aic31xx);
if (dev_get_platdata(aic31xx->dev)) fwnode_property_read_u32(aic31xx->dev->fwnode, "ai31xx-micbias-vg",
memcpy(&aic31xx->pdata, dev_get_platdata(aic31xx->dev), &micbias_value);
sizeof(aic31xx->pdata)); switch (micbias_value) {
else if (aic31xx->dev->of_node) case MICBIAS_2_0V:
aic31xx_pdata_from_of(aic31xx); case MICBIAS_2_5V:
case MICBIAS_AVDDV:
aic31xx->micbias_vg = micbias_value;
break;
default:
dev_err(aic31xx->dev, "Bad ai31xx-micbias-vg value %d\n",
micbias_value);
aic31xx->micbias_vg = MICBIAS_2_0V;
}
if (dev_get_platdata(aic31xx->dev)) {
memcpy(&aic31xx->pdata, dev_get_platdata(aic31xx->dev), sizeof(aic31xx->pdata));
aic31xx->codec_type = aic31xx->pdata.codec_type;
aic31xx->micbias_vg = aic31xx->pdata.micbias_vg;
}
aic31xx->gpio_reset = devm_gpiod_get_optional(aic31xx->dev, "reset", aic31xx->gpio_reset = devm_gpiod_get_optional(aic31xx->dev, "reset",
GPIOD_OUT_LOW); GPIOD_OUT_LOW);
...@@ -1375,7 +1356,7 @@ static int aic31xx_i2c_probe(struct i2c_client *i2c, ...@@ -1375,7 +1356,7 @@ static int aic31xx_i2c_probe(struct i2c_client *i2c,
return ret; return ret;
} }
if (aic31xx->pdata.codec_type & DAC31XX_BIT) if (aic31xx->codec_type & DAC31XX_BIT)
return snd_soc_register_codec(&i2c->dev, return snd_soc_register_codec(&i2c->dev,
&soc_codec_driver_aic31xx, &soc_codec_driver_aic31xx,
dac31xx_dai_driver, dac31xx_dai_driver,
......
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