Merge remote-tracking branches 'asoc/topic/ac97', 'asoc/topic/ad1836', 'asoc/topic/ada1977', 'asoc/topic/adau1701' and 'asoc/topic/adau17x1' into asoc-next
This commit is contained in:
commit
0451b02ef0
9 changed files with 149 additions and 55 deletions
|
@ -20,6 +20,8 @@ Optional properties:
|
||||||
pin configurations as described in the datasheet,
|
pin configurations as described in the datasheet,
|
||||||
table 53. Note that the value of this property has
|
table 53. Note that the value of this property has
|
||||||
to be prefixed with '/bits/ 8'.
|
to be prefixed with '/bits/ 8'.
|
||||||
|
- avdd-supply: Power supply for AVDD, providing 3.3V
|
||||||
|
- dvdd-supply: Power supply for DVDD, providing 3.3V
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
|
@ -28,6 +30,8 @@ Examples:
|
||||||
compatible = "adi,adau1701";
|
compatible = "adi,adau1701";
|
||||||
reg = <0x34>;
|
reg = <0x34>;
|
||||||
reset-gpio = <&gpio 23 0>;
|
reset-gpio = <&gpio 23 0>;
|
||||||
|
avdd-supply = <&vdd_3v3_reg>;
|
||||||
|
dvdd-supply = <&vdd_3v3_reg>;
|
||||||
adi,pll-mode-gpios = <&gpio 24 0 &gpio 25 0>;
|
adi,pll-mode-gpios = <&gpio 24 0 &gpio 25 0>;
|
||||||
adi,pin-config = /bits/ 8 <0x4 0x7 0x5 0x5 0x4 0x4
|
adi,pin-config = /bits/ 8 <0x4 0x7 0x5 0x5 0x4 0x4
|
||||||
0x4 0x4 0x4 0x4 0x4 0x4>;
|
0x4 0x4 0x4 0x4 0x4 0x4>;
|
||||||
|
|
|
@ -16,7 +16,7 @@ config SND_SOC_ALL_CODECS
|
||||||
select SND_SOC_88PM860X if MFD_88PM860X
|
select SND_SOC_88PM860X if MFD_88PM860X
|
||||||
select SND_SOC_L3
|
select SND_SOC_L3
|
||||||
select SND_SOC_AB8500_CODEC if ABX500_CORE
|
select SND_SOC_AB8500_CODEC if ABX500_CORE
|
||||||
select SND_SOC_AC97_CODEC if SND_SOC_AC97_BUS
|
select SND_SOC_AC97_CODEC
|
||||||
select SND_SOC_AD1836 if SPI_MASTER
|
select SND_SOC_AD1836 if SPI_MASTER
|
||||||
select SND_SOC_AD193X_SPI if SPI_MASTER
|
select SND_SOC_AD193X_SPI if SPI_MASTER
|
||||||
select SND_SOC_AD193X_I2C if I2C
|
select SND_SOC_AD193X_I2C if I2C
|
||||||
|
@ -211,8 +211,9 @@ config SND_SOC_AB8500_CODEC
|
||||||
tristate
|
tristate
|
||||||
|
|
||||||
config SND_SOC_AC97_CODEC
|
config SND_SOC_AC97_CODEC
|
||||||
tristate
|
tristate "Build generic ASoC AC97 CODEC driver"
|
||||||
select SND_AC97_CODEC
|
select SND_AC97_CODEC
|
||||||
|
select SND_SOC_AC97_BUS
|
||||||
|
|
||||||
config SND_SOC_AD1836
|
config SND_SOC_AD1836
|
||||||
tristate
|
tristate
|
||||||
|
|
|
@ -44,10 +44,6 @@ static int ac97_prepare(struct snd_pcm_substream *substream,
|
||||||
return snd_ac97_set_rate(ac97, reg, substream->runtime->rate);
|
return snd_ac97_set_rate(ac97, reg, substream->runtime->rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define STD_AC97_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
|
|
||||||
SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 |\
|
|
||||||
SNDRV_PCM_RATE_48000)
|
|
||||||
|
|
||||||
static const struct snd_soc_dai_ops ac97_dai_ops = {
|
static const struct snd_soc_dai_ops ac97_dai_ops = {
|
||||||
.prepare = ac97_prepare,
|
.prepare = ac97_prepare,
|
||||||
};
|
};
|
||||||
|
@ -58,13 +54,13 @@ static struct snd_soc_dai_driver ac97_dai = {
|
||||||
.stream_name = "AC97 Playback",
|
.stream_name = "AC97 Playback",
|
||||||
.channels_min = 1,
|
.channels_min = 1,
|
||||||
.channels_max = 2,
|
.channels_max = 2,
|
||||||
.rates = STD_AC97_RATES,
|
.rates = SNDRV_PCM_RATE_KNOT,
|
||||||
.formats = SND_SOC_STD_AC97_FMTS,},
|
.formats = SND_SOC_STD_AC97_FMTS,},
|
||||||
.capture = {
|
.capture = {
|
||||||
.stream_name = "AC97 Capture",
|
.stream_name = "AC97 Capture",
|
||||||
.channels_min = 1,
|
.channels_min = 1,
|
||||||
.channels_max = 2,
|
.channels_max = 2,
|
||||||
.rates = STD_AC97_RATES,
|
.rates = SNDRV_PCM_RATE_KNOT,
|
||||||
.formats = SND_SOC_STD_AC97_FMTS,},
|
.formats = SND_SOC_STD_AC97_FMTS,},
|
||||||
.ops = &ac97_dai_ops,
|
.ops = &ac97_dai_ops,
|
||||||
};
|
};
|
||||||
|
|
|
@ -251,7 +251,7 @@ static int ad1836_resume(struct snd_soc_codec *codec)
|
||||||
static int ad1836_probe(struct snd_soc_codec *codec)
|
static int ad1836_probe(struct snd_soc_codec *codec)
|
||||||
{
|
{
|
||||||
struct ad1836_priv *ad1836 = snd_soc_codec_get_drvdata(codec);
|
struct ad1836_priv *ad1836 = snd_soc_codec_get_drvdata(codec);
|
||||||
struct snd_soc_dapm_context *dapm = &codec->dapm;
|
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
|
||||||
int num_dacs, num_adcs;
|
int num_dacs, num_adcs;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
#include <linux/of_gpio.h>
|
#include <linux/of_gpio.h>
|
||||||
#include <linux/of_device.h>
|
#include <linux/of_device.h>
|
||||||
|
#include <linux/regulator/consumer.h>
|
||||||
#include <linux/regmap.h>
|
#include <linux/regmap.h>
|
||||||
#include <sound/core.h>
|
#include <sound/core.h>
|
||||||
#include <sound/pcm.h>
|
#include <sound/pcm.h>
|
||||||
|
@ -101,6 +102,10 @@
|
||||||
|
|
||||||
#define ADAU1701_FIRMWARE "adau1701.bin"
|
#define ADAU1701_FIRMWARE "adau1701.bin"
|
||||||
|
|
||||||
|
static const char * const supply_names[] = {
|
||||||
|
"dvdd", "avdd"
|
||||||
|
};
|
||||||
|
|
||||||
struct adau1701 {
|
struct adau1701 {
|
||||||
int gpio_nreset;
|
int gpio_nreset;
|
||||||
int gpio_pll_mode[2];
|
int gpio_pll_mode[2];
|
||||||
|
@ -112,6 +117,7 @@ struct adau1701 {
|
||||||
u8 pin_config[12];
|
u8 pin_config[12];
|
||||||
|
|
||||||
struct sigmadsp *sigmadsp;
|
struct sigmadsp *sigmadsp;
|
||||||
|
struct regulator_bulk_data supplies[ARRAY_SIZE(supply_names)];
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct snd_kcontrol_new adau1701_controls[] = {
|
static const struct snd_kcontrol_new adau1701_controls[] = {
|
||||||
|
@ -668,6 +674,13 @@ static int adau1701_probe(struct snd_soc_codec *codec)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
ret = regulator_bulk_enable(ARRAY_SIZE(adau1701->supplies),
|
||||||
|
adau1701->supplies);
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(codec->dev, "Failed to enable regulators: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Let the pll_clkdiv variable default to something that won't happen
|
* Let the pll_clkdiv variable default to something that won't happen
|
||||||
* at runtime. That way, we can postpone the firmware download from
|
* at runtime. That way, we can postpone the firmware download from
|
||||||
|
@ -679,7 +692,7 @@ static int adau1701_probe(struct snd_soc_codec *codec)
|
||||||
/* initalize with pre-configured pll mode settings */
|
/* initalize with pre-configured pll mode settings */
|
||||||
ret = adau1701_reset(codec, adau1701->pll_clkdiv, 0);
|
ret = adau1701_reset(codec, adau1701->pll_clkdiv, 0);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
goto exit_regulators_disable;
|
||||||
|
|
||||||
/* set up pin config */
|
/* set up pin config */
|
||||||
val = 0;
|
val = 0;
|
||||||
|
@ -695,10 +708,60 @@ static int adau1701_probe(struct snd_soc_codec *codec)
|
||||||
regmap_write(adau1701->regmap, ADAU1701_PINCONF_1, val);
|
regmap_write(adau1701->regmap, ADAU1701_PINCONF_1, val);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
exit_regulators_disable:
|
||||||
|
|
||||||
|
regulator_bulk_disable(ARRAY_SIZE(adau1701->supplies), adau1701->supplies);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int adau1701_remove(struct snd_soc_codec *codec)
|
||||||
|
{
|
||||||
|
struct adau1701 *adau1701 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
|
if (gpio_is_valid(adau1701->gpio_nreset))
|
||||||
|
gpio_set_value_cansleep(adau1701->gpio_nreset, 0);
|
||||||
|
|
||||||
|
regulator_bulk_disable(ARRAY_SIZE(adau1701->supplies), adau1701->supplies);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
static int adau1701_suspend(struct snd_soc_codec *codec)
|
||||||
|
{
|
||||||
|
struct adau1701 *adau1701 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
|
regulator_bulk_disable(ARRAY_SIZE(adau1701->supplies),
|
||||||
|
adau1701->supplies);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int adau1701_resume(struct snd_soc_codec *codec)
|
||||||
|
{
|
||||||
|
struct adau1701 *adau1701 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = regulator_bulk_enable(ARRAY_SIZE(adau1701->supplies),
|
||||||
|
adau1701->supplies);
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(codec->dev, "Failed to enable regulators: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return adau1701_reset(codec, adau1701->pll_clkdiv, 0);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define adau1701_resume NULL
|
||||||
|
#define adau1701_suspend NULL
|
||||||
|
#endif /* CONFIG_PM */
|
||||||
|
|
||||||
static struct snd_soc_codec_driver adau1701_codec_drv = {
|
static struct snd_soc_codec_driver adau1701_codec_drv = {
|
||||||
.probe = adau1701_probe,
|
.probe = adau1701_probe,
|
||||||
|
.remove = adau1701_remove,
|
||||||
|
.resume = adau1701_resume,
|
||||||
|
.suspend = adau1701_suspend,
|
||||||
.set_bias_level = adau1701_set_bias_level,
|
.set_bias_level = adau1701_set_bias_level,
|
||||||
.idle_bias_off = true,
|
.idle_bias_off = true,
|
||||||
|
|
||||||
|
@ -729,32 +792,58 @@ static int adau1701_i2c_probe(struct i2c_client *client,
|
||||||
struct device *dev = &client->dev;
|
struct device *dev = &client->dev;
|
||||||
int gpio_nreset = -EINVAL;
|
int gpio_nreset = -EINVAL;
|
||||||
int gpio_pll_mode[2] = { -EINVAL, -EINVAL };
|
int gpio_pll_mode[2] = { -EINVAL, -EINVAL };
|
||||||
int ret;
|
int ret, i;
|
||||||
|
|
||||||
adau1701 = devm_kzalloc(dev, sizeof(*adau1701), GFP_KERNEL);
|
adau1701 = devm_kzalloc(dev, sizeof(*adau1701), GFP_KERNEL);
|
||||||
if (!adau1701)
|
if (!adau1701)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(supply_names); i++)
|
||||||
|
adau1701->supplies[i].supply = supply_names[i];
|
||||||
|
|
||||||
|
ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(adau1701->supplies),
|
||||||
|
adau1701->supplies);
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(dev, "Failed to get regulators: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = regulator_bulk_enable(ARRAY_SIZE(adau1701->supplies),
|
||||||
|
adau1701->supplies);
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(dev, "Failed to enable regulators: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
adau1701->client = client;
|
adau1701->client = client;
|
||||||
adau1701->regmap = devm_regmap_init(dev, NULL, client,
|
adau1701->regmap = devm_regmap_init(dev, NULL, client,
|
||||||
&adau1701_regmap);
|
&adau1701_regmap);
|
||||||
if (IS_ERR(adau1701->regmap))
|
if (IS_ERR(adau1701->regmap)) {
|
||||||
return PTR_ERR(adau1701->regmap);
|
ret = PTR_ERR(adau1701->regmap);
|
||||||
|
goto exit_regulators_disable;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (dev->of_node) {
|
if (dev->of_node) {
|
||||||
gpio_nreset = of_get_named_gpio(dev->of_node, "reset-gpio", 0);
|
gpio_nreset = of_get_named_gpio(dev->of_node, "reset-gpio", 0);
|
||||||
if (gpio_nreset < 0 && gpio_nreset != -ENOENT)
|
if (gpio_nreset < 0 && gpio_nreset != -ENOENT) {
|
||||||
return gpio_nreset;
|
ret = gpio_nreset;
|
||||||
|
goto exit_regulators_disable;
|
||||||
|
}
|
||||||
|
|
||||||
gpio_pll_mode[0] = of_get_named_gpio(dev->of_node,
|
gpio_pll_mode[0] = of_get_named_gpio(dev->of_node,
|
||||||
"adi,pll-mode-gpios", 0);
|
"adi,pll-mode-gpios", 0);
|
||||||
if (gpio_pll_mode[0] < 0 && gpio_pll_mode[0] != -ENOENT)
|
if (gpio_pll_mode[0] < 0 && gpio_pll_mode[0] != -ENOENT) {
|
||||||
return gpio_pll_mode[0];
|
ret = gpio_pll_mode[0];
|
||||||
|
goto exit_regulators_disable;
|
||||||
|
}
|
||||||
|
|
||||||
gpio_pll_mode[1] = of_get_named_gpio(dev->of_node,
|
gpio_pll_mode[1] = of_get_named_gpio(dev->of_node,
|
||||||
"adi,pll-mode-gpios", 1);
|
"adi,pll-mode-gpios", 1);
|
||||||
if (gpio_pll_mode[1] < 0 && gpio_pll_mode[1] != -ENOENT)
|
if (gpio_pll_mode[1] < 0 && gpio_pll_mode[1] != -ENOENT) {
|
||||||
return gpio_pll_mode[1];
|
ret = gpio_pll_mode[1];
|
||||||
|
goto exit_regulators_disable;
|
||||||
|
}
|
||||||
|
|
||||||
of_property_read_u32(dev->of_node, "adi,pll-clkdiv",
|
of_property_read_u32(dev->of_node, "adi,pll-clkdiv",
|
||||||
&adau1701->pll_clkdiv);
|
&adau1701->pll_clkdiv);
|
||||||
|
@ -768,7 +857,7 @@ static int adau1701_i2c_probe(struct i2c_client *client,
|
||||||
ret = devm_gpio_request_one(dev, gpio_nreset, GPIOF_OUT_INIT_LOW,
|
ret = devm_gpio_request_one(dev, gpio_nreset, GPIOF_OUT_INIT_LOW,
|
||||||
"ADAU1701 Reset");
|
"ADAU1701 Reset");
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
goto exit_regulators_disable;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gpio_is_valid(gpio_pll_mode[0]) &&
|
if (gpio_is_valid(gpio_pll_mode[0]) &&
|
||||||
|
@ -777,13 +866,13 @@ static int adau1701_i2c_probe(struct i2c_client *client,
|
||||||
GPIOF_OUT_INIT_LOW,
|
GPIOF_OUT_INIT_LOW,
|
||||||
"ADAU1701 PLL mode 0");
|
"ADAU1701 PLL mode 0");
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
goto exit_regulators_disable;
|
||||||
|
|
||||||
ret = devm_gpio_request_one(dev, gpio_pll_mode[1],
|
ret = devm_gpio_request_one(dev, gpio_pll_mode[1],
|
||||||
GPIOF_OUT_INIT_LOW,
|
GPIOF_OUT_INIT_LOW,
|
||||||
"ADAU1701 PLL mode 1");
|
"ADAU1701 PLL mode 1");
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
goto exit_regulators_disable;
|
||||||
}
|
}
|
||||||
|
|
||||||
adau1701->gpio_nreset = gpio_nreset;
|
adau1701->gpio_nreset = gpio_nreset;
|
||||||
|
@ -794,11 +883,17 @@ static int adau1701_i2c_probe(struct i2c_client *client,
|
||||||
|
|
||||||
adau1701->sigmadsp = devm_sigmadsp_init_i2c(client,
|
adau1701->sigmadsp = devm_sigmadsp_init_i2c(client,
|
||||||
&adau1701_sigmadsp_ops, ADAU1701_FIRMWARE);
|
&adau1701_sigmadsp_ops, ADAU1701_FIRMWARE);
|
||||||
if (IS_ERR(adau1701->sigmadsp))
|
if (IS_ERR(adau1701->sigmadsp)) {
|
||||||
return PTR_ERR(adau1701->sigmadsp);
|
ret = PTR_ERR(adau1701->sigmadsp);
|
||||||
|
goto exit_regulators_disable;
|
||||||
|
}
|
||||||
|
|
||||||
ret = snd_soc_register_codec(&client->dev, &adau1701_codec_drv,
|
ret = snd_soc_register_codec(&client->dev, &adau1701_codec_drv,
|
||||||
&adau1701_dai, 1);
|
&adau1701_dai, 1);
|
||||||
|
|
||||||
|
exit_regulators_disable:
|
||||||
|
|
||||||
|
regulator_bulk_disable(ARRAY_SIZE(adau1701->supplies), adau1701->supplies);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -482,6 +482,7 @@ static enum adau1761_output_mode adau1761_get_lineout_mode(
|
||||||
|
|
||||||
static int adau1761_setup_digmic_jackdetect(struct snd_soc_codec *codec)
|
static int adau1761_setup_digmic_jackdetect(struct snd_soc_codec *codec)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
|
||||||
struct adau1761_platform_data *pdata = codec->dev->platform_data;
|
struct adau1761_platform_data *pdata = codec->dev->platform_data;
|
||||||
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
||||||
enum adau1761_digmic_jackdet_pin_mode mode;
|
enum adau1761_digmic_jackdet_pin_mode mode;
|
||||||
|
@ -514,21 +515,18 @@ static int adau1761_setup_digmic_jackdetect(struct snd_soc_codec *codec)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
case ADAU1761_DIGMIC_JACKDET_PIN_MODE_NONE: /* fallthrough */
|
case ADAU1761_DIGMIC_JACKDET_PIN_MODE_NONE: /* fallthrough */
|
||||||
ret = snd_soc_dapm_add_routes(&codec->dapm,
|
ret = snd_soc_dapm_add_routes(dapm, adau1761_no_dmic_routes,
|
||||||
adau1761_no_dmic_routes,
|
|
||||||
ARRAY_SIZE(adau1761_no_dmic_routes));
|
ARRAY_SIZE(adau1761_no_dmic_routes));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
break;
|
break;
|
||||||
case ADAU1761_DIGMIC_JACKDET_PIN_MODE_DIGMIC:
|
case ADAU1761_DIGMIC_JACKDET_PIN_MODE_DIGMIC:
|
||||||
ret = snd_soc_dapm_new_controls(&codec->dapm,
|
ret = snd_soc_dapm_new_controls(dapm, adau1761_dmic_widgets,
|
||||||
adau1761_dmic_widgets,
|
|
||||||
ARRAY_SIZE(adau1761_dmic_widgets));
|
ARRAY_SIZE(adau1761_dmic_widgets));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = snd_soc_dapm_add_routes(&codec->dapm,
|
ret = snd_soc_dapm_add_routes(dapm, adau1761_dmic_routes,
|
||||||
adau1761_dmic_routes,
|
|
||||||
ARRAY_SIZE(adau1761_dmic_routes));
|
ARRAY_SIZE(adau1761_dmic_routes));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -546,6 +544,7 @@ static int adau1761_setup_digmic_jackdetect(struct snd_soc_codec *codec)
|
||||||
|
|
||||||
static int adau1761_setup_headphone_mode(struct snd_soc_codec *codec)
|
static int adau1761_setup_headphone_mode(struct snd_soc_codec *codec)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
|
||||||
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
||||||
struct adau1761_platform_data *pdata = codec->dev->platform_data;
|
struct adau1761_platform_data *pdata = codec->dev->platform_data;
|
||||||
enum adau1761_output_mode mode;
|
enum adau1761_output_mode mode;
|
||||||
|
@ -576,12 +575,12 @@ static int adau1761_setup_headphone_mode(struct snd_soc_codec *codec)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode == ADAU1761_OUTPUT_MODE_HEADPHONE_CAPLESS) {
|
if (mode == ADAU1761_OUTPUT_MODE_HEADPHONE_CAPLESS) {
|
||||||
ret = snd_soc_dapm_new_controls(&codec->dapm,
|
ret = snd_soc_dapm_new_controls(dapm,
|
||||||
adau1761_capless_dapm_widgets,
|
adau1761_capless_dapm_widgets,
|
||||||
ARRAY_SIZE(adau1761_capless_dapm_widgets));
|
ARRAY_SIZE(adau1761_capless_dapm_widgets));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = snd_soc_dapm_add_routes(&codec->dapm,
|
ret = snd_soc_dapm_add_routes(dapm,
|
||||||
adau1761_capless_dapm_routes,
|
adau1761_capless_dapm_routes,
|
||||||
ARRAY_SIZE(adau1761_capless_dapm_routes));
|
ARRAY_SIZE(adau1761_capless_dapm_routes));
|
||||||
} else {
|
} else {
|
||||||
|
@ -589,12 +588,12 @@ static int adau1761_setup_headphone_mode(struct snd_soc_codec *codec)
|
||||||
ARRAY_SIZE(adau1761_mono_controls));
|
ARRAY_SIZE(adau1761_mono_controls));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = snd_soc_dapm_new_controls(&codec->dapm,
|
ret = snd_soc_dapm_new_controls(dapm,
|
||||||
adau1761_mono_dapm_widgets,
|
adau1761_mono_dapm_widgets,
|
||||||
ARRAY_SIZE(adau1761_mono_dapm_widgets));
|
ARRAY_SIZE(adau1761_mono_dapm_widgets));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = snd_soc_dapm_add_routes(&codec->dapm,
|
ret = snd_soc_dapm_add_routes(dapm,
|
||||||
adau1761_mono_dapm_routes,
|
adau1761_mono_dapm_routes,
|
||||||
ARRAY_SIZE(adau1761_mono_dapm_routes));
|
ARRAY_SIZE(adau1761_mono_dapm_routes));
|
||||||
}
|
}
|
||||||
|
@ -639,6 +638,7 @@ static bool adau1761_readable_register(struct device *dev, unsigned int reg)
|
||||||
|
|
||||||
static int adau1761_codec_probe(struct snd_soc_codec *codec)
|
static int adau1761_codec_probe(struct snd_soc_codec *codec)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
|
||||||
struct adau1761_platform_data *pdata = codec->dev->platform_data;
|
struct adau1761_platform_data *pdata = codec->dev->platform_data;
|
||||||
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -691,14 +691,12 @@ static int adau1761_codec_probe(struct snd_soc_codec *codec)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (adau->type == ADAU1761) {
|
if (adau->type == ADAU1761) {
|
||||||
ret = snd_soc_dapm_new_controls(&codec->dapm,
|
ret = snd_soc_dapm_new_controls(dapm, adau1761_dapm_widgets,
|
||||||
adau1761_dapm_widgets,
|
|
||||||
ARRAY_SIZE(adau1761_dapm_widgets));
|
ARRAY_SIZE(adau1761_dapm_widgets));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = snd_soc_dapm_add_routes(&codec->dapm,
|
ret = snd_soc_dapm_add_routes(dapm, adau1761_dapm_routes,
|
||||||
adau1761_dapm_routes,
|
|
||||||
ARRAY_SIZE(adau1761_dapm_routes));
|
ARRAY_SIZE(adau1761_dapm_routes));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -382,6 +382,7 @@ static int adau1781_set_input_mode(struct adau *adau, unsigned int reg,
|
||||||
|
|
||||||
static int adau1781_codec_probe(struct snd_soc_codec *codec)
|
static int adau1781_codec_probe(struct snd_soc_codec *codec)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
|
||||||
struct adau1781_platform_data *pdata = dev_get_platdata(codec->dev);
|
struct adau1781_platform_data *pdata = dev_get_platdata(codec->dev);
|
||||||
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -402,19 +403,17 @@ static int adau1781_codec_probe(struct snd_soc_codec *codec)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pdata && pdata->use_dmic) {
|
if (pdata && pdata->use_dmic) {
|
||||||
ret = snd_soc_dapm_new_controls(&codec->dapm,
|
ret = snd_soc_dapm_new_controls(dapm,
|
||||||
adau1781_dmic_dapm_widgets,
|
adau1781_dmic_dapm_widgets,
|
||||||
ARRAY_SIZE(adau1781_dmic_dapm_widgets));
|
ARRAY_SIZE(adau1781_dmic_dapm_widgets));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = snd_soc_dapm_add_routes(&codec->dapm,
|
ret = snd_soc_dapm_add_routes(dapm, adau1781_dmic_dapm_routes,
|
||||||
adau1781_dmic_dapm_routes,
|
|
||||||
ARRAY_SIZE(adau1781_dmic_dapm_routes));
|
ARRAY_SIZE(adau1781_dmic_dapm_routes));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
} else {
|
} else {
|
||||||
ret = snd_soc_dapm_add_routes(&codec->dapm,
|
ret = snd_soc_dapm_add_routes(dapm, adau1781_adc_dapm_routes,
|
||||||
adau1781_adc_dapm_routes,
|
|
||||||
ARRAY_SIZE(adau1781_adc_dapm_routes));
|
ARRAY_SIZE(adau1781_adc_dapm_routes));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -155,6 +155,7 @@ static int adau17x1_dsp_mux_enum_put(struct snd_kcontrol *kcontrol,
|
||||||
struct snd_ctl_elem_value *ucontrol)
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = snd_soc_dapm_kcontrol_codec(kcontrol);
|
struct snd_soc_codec *codec = snd_soc_dapm_kcontrol_codec(kcontrol);
|
||||||
|
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
|
||||||
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
||||||
struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
|
struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
|
||||||
struct snd_soc_dapm_update update;
|
struct snd_soc_dapm_update update;
|
||||||
|
@ -188,7 +189,7 @@ static int adau17x1_dsp_mux_enum_put(struct snd_kcontrol *kcontrol,
|
||||||
update.reg = reg;
|
update.reg = reg;
|
||||||
update.val = val;
|
update.val = val;
|
||||||
|
|
||||||
snd_soc_dapm_mux_update_power(&codec->dapm, kcontrol,
|
snd_soc_dapm_mux_update_power(dapm, kcontrol,
|
||||||
ucontrol->value.enumerated.item[0], e, &update);
|
ucontrol->value.enumerated.item[0], e, &update);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -444,8 +445,8 @@ static int adau17x1_set_dai_pll(struct snd_soc_dai *dai, int pll_id,
|
||||||
static int adau17x1_set_dai_sysclk(struct snd_soc_dai *dai,
|
static int adau17x1_set_dai_sysclk(struct snd_soc_dai *dai,
|
||||||
int clk_id, unsigned int freq, int dir)
|
int clk_id, unsigned int freq, int dir)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(dai->codec);
|
||||||
struct adau *adau = snd_soc_codec_get_drvdata(dai->codec);
|
struct adau *adau = snd_soc_codec_get_drvdata(dai->codec);
|
||||||
struct snd_soc_dapm_context *dapm = &dai->codec->dapm;
|
|
||||||
|
|
||||||
switch (clk_id) {
|
switch (clk_id) {
|
||||||
case ADAU17X1_CLK_SRC_MCLK:
|
case ADAU17X1_CLK_SRC_MCLK:
|
||||||
|
@ -804,6 +805,7 @@ EXPORT_SYMBOL_GPL(adau17x1_setup_firmware);
|
||||||
|
|
||||||
int adau17x1_add_widgets(struct snd_soc_codec *codec)
|
int adau17x1_add_widgets(struct snd_soc_codec *codec)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
|
||||||
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -811,14 +813,13 @@ int adau17x1_add_widgets(struct snd_soc_codec *codec)
|
||||||
ARRAY_SIZE(adau17x1_controls));
|
ARRAY_SIZE(adau17x1_controls));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = snd_soc_dapm_new_controls(&codec->dapm, adau17x1_dapm_widgets,
|
ret = snd_soc_dapm_new_controls(dapm, adau17x1_dapm_widgets,
|
||||||
ARRAY_SIZE(adau17x1_dapm_widgets));
|
ARRAY_SIZE(adau17x1_dapm_widgets));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (adau17x1_has_dsp(adau)) {
|
if (adau17x1_has_dsp(adau)) {
|
||||||
ret = snd_soc_dapm_new_controls(&codec->dapm,
|
ret = snd_soc_dapm_new_controls(dapm, adau17x1_dsp_dapm_widgets,
|
||||||
adau17x1_dsp_dapm_widgets,
|
|
||||||
ARRAY_SIZE(adau17x1_dsp_dapm_widgets));
|
ARRAY_SIZE(adau17x1_dsp_dapm_widgets));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -840,21 +841,20 @@ EXPORT_SYMBOL_GPL(adau17x1_add_widgets);
|
||||||
|
|
||||||
int adau17x1_add_routes(struct snd_soc_codec *codec)
|
int adau17x1_add_routes(struct snd_soc_codec *codec)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
|
||||||
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
struct adau *adau = snd_soc_codec_get_drvdata(codec);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = snd_soc_dapm_add_routes(&codec->dapm, adau17x1_dapm_routes,
|
ret = snd_soc_dapm_add_routes(dapm, adau17x1_dapm_routes,
|
||||||
ARRAY_SIZE(adau17x1_dapm_routes));
|
ARRAY_SIZE(adau17x1_dapm_routes));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (adau17x1_has_dsp(adau)) {
|
if (adau17x1_has_dsp(adau)) {
|
||||||
ret = snd_soc_dapm_add_routes(&codec->dapm,
|
ret = snd_soc_dapm_add_routes(dapm, adau17x1_dsp_dapm_routes,
|
||||||
adau17x1_dsp_dapm_routes,
|
|
||||||
ARRAY_SIZE(adau17x1_dsp_dapm_routes));
|
ARRAY_SIZE(adau17x1_dsp_dapm_routes));
|
||||||
} else {
|
} else {
|
||||||
ret = snd_soc_dapm_add_routes(&codec->dapm,
|
ret = snd_soc_dapm_add_routes(dapm, adau17x1_no_dsp_dapm_routes,
|
||||||
adau17x1_no_dsp_dapm_routes,
|
|
||||||
ARRAY_SIZE(adau17x1_no_dsp_dapm_routes));
|
ARRAY_SIZE(adau17x1_no_dsp_dapm_routes));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -485,7 +485,7 @@ static int adau1977_set_bias_level(struct snd_soc_codec *codec,
|
||||||
case SND_SOC_BIAS_PREPARE:
|
case SND_SOC_BIAS_PREPARE:
|
||||||
break;
|
break;
|
||||||
case SND_SOC_BIAS_STANDBY:
|
case SND_SOC_BIAS_STANDBY:
|
||||||
if (codec->dapm.bias_level == SND_SOC_BIAS_OFF)
|
if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF)
|
||||||
ret = adau1977_power_enable(adau1977);
|
ret = adau1977_power_enable(adau1977);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_BIAS_OFF:
|
case SND_SOC_BIAS_OFF:
|
||||||
|
@ -848,12 +848,13 @@ static int adau1977_set_sysclk(struct snd_soc_codec *codec,
|
||||||
|
|
||||||
static int adau1977_codec_probe(struct snd_soc_codec *codec)
|
static int adau1977_codec_probe(struct snd_soc_codec *codec)
|
||||||
{
|
{
|
||||||
|
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
|
||||||
struct adau1977 *adau1977 = snd_soc_codec_get_drvdata(codec);
|
struct adau1977 *adau1977 = snd_soc_codec_get_drvdata(codec);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
switch (adau1977->type) {
|
switch (adau1977->type) {
|
||||||
case ADAU1977:
|
case ADAU1977:
|
||||||
ret = snd_soc_dapm_new_controls(&codec->dapm,
|
ret = snd_soc_dapm_new_controls(dapm,
|
||||||
adau1977_micbias_dapm_widgets,
|
adau1977_micbias_dapm_widgets,
|
||||||
ARRAY_SIZE(adau1977_micbias_dapm_widgets));
|
ARRAY_SIZE(adau1977_micbias_dapm_widgets));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
Loading…
Add table
Reference in a new issue