Commit 4ec7e204 authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branches 'asoc/topic/tda7419', 'asoc/topic/tfa9879',...

Merge remote-tracking branches 'asoc/topic/tda7419', 'asoc/topic/tfa9879', 'asoc/topic/tlv320aic23', 'asoc/topic/tlv320aic26' and 'asoc/topic/tlv320aic31xx' into asoc-next
TDA7419 audio processor
This device supports I2C only.
Required properties:
- compatible : "st,tda7419"
- reg : the I2C address of the device.
- vdd-supply : a regulator spec for the common power supply (8-10V)
Optional properties:
- st,mute-gpios : a GPIO spec for the MUTE pin.
Pins on the device (for linking into audio routes):
* SE3L
* SE3R
* SE2L
* SE2R
* SE1L
* SE1R
* DIFFL
* DIFFR
* MIX
* OUTLF
* OUTRF
* OUTLR
* OUTRR
* OUTSW
Example:
ap: tda7419@44 {
compatible = "st,tda7419";
reg = <0x44>;
vdd-supply = <&vdd_9v0_reg>;
};
...@@ -156,6 +156,7 @@ config SND_SOC_ALL_CODECS ...@@ -156,6 +156,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_TAS571X if I2C select SND_SOC_TAS571X if I2C
select SND_SOC_TAS5720 if I2C select SND_SOC_TAS5720 if I2C
select SND_SOC_TAS6424 if I2C select SND_SOC_TAS6424 if I2C
select SND_SOC_TDA7419 if I2C
select SND_SOC_TFA9879 if I2C select SND_SOC_TFA9879 if I2C
select SND_SOC_TLV320AIC23_I2C if I2C select SND_SOC_TLV320AIC23_I2C if I2C
select SND_SOC_TLV320AIC23_SPI if SPI_MASTER select SND_SOC_TLV320AIC23_SPI if SPI_MASTER
...@@ -948,6 +949,11 @@ config SND_SOC_TAS6424 ...@@ -948,6 +949,11 @@ config SND_SOC_TAS6424
Enable support for Texas Instruments TAS6424 high-efficiency Enable support for Texas Instruments TAS6424 high-efficiency
digital input quad-channel Class-D audio power amplifiers. digital input quad-channel Class-D audio power amplifiers.
config SND_SOC_TDA7419
tristate "ST TDA7419 audio processor"
depends on I2C
select REGMAP_I2C
config SND_SOC_TFA9879 config SND_SOC_TFA9879
tristate "NXP Semiconductors TFA9879 amplifier" tristate "NXP Semiconductors TFA9879 amplifier"
depends on I2C depends on I2C
......
...@@ -167,6 +167,7 @@ snd-soc-tas5086-objs := tas5086.o ...@@ -167,6 +167,7 @@ snd-soc-tas5086-objs := tas5086.o
snd-soc-tas571x-objs := tas571x.o snd-soc-tas571x-objs := tas571x.o
snd-soc-tas5720-objs := tas5720.o snd-soc-tas5720-objs := tas5720.o
snd-soc-tas6424-objs := tas6424.o snd-soc-tas6424-objs := tas6424.o
snd-soc-tda7419-objs := tda7419.o
snd-soc-tfa9879-objs := tfa9879.o snd-soc-tfa9879-objs := tfa9879.o
snd-soc-tlv320aic23-objs := tlv320aic23.o snd-soc-tlv320aic23-objs := tlv320aic23.o
snd-soc-tlv320aic23-i2c-objs := tlv320aic23-i2c.o snd-soc-tlv320aic23-i2c-objs := tlv320aic23-i2c.o
...@@ -418,6 +419,7 @@ obj-$(CONFIG_SND_SOC_TAS5086) += snd-soc-tas5086.o ...@@ -418,6 +419,7 @@ obj-$(CONFIG_SND_SOC_TAS5086) += snd-soc-tas5086.o
obj-$(CONFIG_SND_SOC_TAS571X) += snd-soc-tas571x.o obj-$(CONFIG_SND_SOC_TAS571X) += snd-soc-tas571x.o
obj-$(CONFIG_SND_SOC_TAS5720) += snd-soc-tas5720.o obj-$(CONFIG_SND_SOC_TAS5720) += snd-soc-tas5720.o
obj-$(CONFIG_SND_SOC_TAS6424) += snd-soc-tas6424.o obj-$(CONFIG_SND_SOC_TAS6424) += snd-soc-tas6424.o
obj-$(CONFIG_SND_SOC_TDA7419) += snd-soc-tda7419.o
obj-$(CONFIG_SND_SOC_TFA9879) += snd-soc-tfa9879.o obj-$(CONFIG_SND_SOC_TFA9879) += snd-soc-tfa9879.o
obj-$(CONFIG_SND_SOC_TLV320AIC23) += snd-soc-tlv320aic23.o obj-$(CONFIG_SND_SOC_TLV320AIC23) += snd-soc-tlv320aic23.o
obj-$(CONFIG_SND_SOC_TLV320AIC23_I2C) += snd-soc-tlv320aic23-i2c.o obj-$(CONFIG_SND_SOC_TLV320AIC23_I2C) += snd-soc-tlv320aic23-i2c.o
......
This diff is collapsed.
...@@ -30,8 +30,8 @@ static int tfa9879_hw_params(struct snd_pcm_substream *substream, ...@@ -30,8 +30,8 @@ static int tfa9879_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params, struct snd_pcm_hw_params *params,
struct snd_soc_dai *dai) struct snd_soc_dai *dai)
{ {
struct snd_soc_codec *codec = dai->codec; struct snd_soc_component *component = dai->component;
struct tfa9879_priv *tfa9879 = snd_soc_codec_get_drvdata(codec); struct tfa9879_priv *tfa9879 = snd_soc_component_get_drvdata(component);
int fs; int fs;
int i2s_set = 0; int i2s_set = 0;
...@@ -88,11 +88,11 @@ static int tfa9879_hw_params(struct snd_pcm_substream *substream, ...@@ -88,11 +88,11 @@ static int tfa9879_hw_params(struct snd_pcm_substream *substream,
} }
if (tfa9879->lsb_justified) if (tfa9879->lsb_justified)
snd_soc_update_bits(codec, TFA9879_SERIAL_INTERFACE_1, snd_soc_component_update_bits(component, TFA9879_SERIAL_INTERFACE_1,
TFA9879_I2S_SET_MASK, TFA9879_I2S_SET_MASK,
i2s_set << TFA9879_I2S_SET_SHIFT); i2s_set << TFA9879_I2S_SET_SHIFT);
snd_soc_update_bits(codec, TFA9879_SERIAL_INTERFACE_1, snd_soc_component_update_bits(component, TFA9879_SERIAL_INTERFACE_1,
TFA9879_I2S_FS_MASK, TFA9879_I2S_FS_MASK,
fs << TFA9879_I2S_FS_SHIFT); fs << TFA9879_I2S_FS_SHIFT);
return 0; return 0;
...@@ -100,9 +100,9 @@ static int tfa9879_hw_params(struct snd_pcm_substream *substream, ...@@ -100,9 +100,9 @@ static int tfa9879_hw_params(struct snd_pcm_substream *substream,
static int tfa9879_digital_mute(struct snd_soc_dai *dai, int mute) static int tfa9879_digital_mute(struct snd_soc_dai *dai, int mute)
{ {
struct snd_soc_codec *codec = dai->codec; struct snd_soc_component *component = dai->component;
snd_soc_update_bits(codec, TFA9879_MISC_CONTROL, snd_soc_component_update_bits(component, TFA9879_MISC_CONTROL,
TFA9879_S_MUTE_MASK, TFA9879_S_MUTE_MASK,
!!mute << TFA9879_S_MUTE_SHIFT); !!mute << TFA9879_S_MUTE_SHIFT);
...@@ -111,8 +111,8 @@ static int tfa9879_digital_mute(struct snd_soc_dai *dai, int mute) ...@@ -111,8 +111,8 @@ static int tfa9879_digital_mute(struct snd_soc_dai *dai, int mute)
static int tfa9879_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) static int tfa9879_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
{ {
struct snd_soc_codec *codec = dai->codec; struct snd_soc_component *component = dai->component;
struct tfa9879_priv *tfa9879 = snd_soc_codec_get_drvdata(codec); struct tfa9879_priv *tfa9879 = snd_soc_component_get_drvdata(component);
int i2s_set; int i2s_set;
int sck_pol; int sck_pol;
...@@ -151,10 +151,10 @@ static int tfa9879_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) ...@@ -151,10 +151,10 @@ static int tfa9879_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return -EINVAL; return -EINVAL;
} }
snd_soc_update_bits(codec, TFA9879_SERIAL_INTERFACE_1, snd_soc_component_update_bits(component, TFA9879_SERIAL_INTERFACE_1,
TFA9879_SCK_POL_MASK, TFA9879_SCK_POL_MASK,
sck_pol << TFA9879_SCK_POL_SHIFT); sck_pol << TFA9879_SCK_POL_SHIFT);
snd_soc_update_bits(codec, TFA9879_SERIAL_INTERFACE_1, snd_soc_component_update_bits(component, TFA9879_SERIAL_INTERFACE_1,
TFA9879_I2S_SET_MASK, TFA9879_I2S_SET_MASK,
i2s_set << TFA9879_I2S_SET_SHIFT); i2s_set << TFA9879_I2S_SET_SHIFT);
return 0; return 0;
...@@ -230,15 +230,17 @@ static const struct snd_soc_dapm_route tfa9879_dapm_routes[] = { ...@@ -230,15 +230,17 @@ static const struct snd_soc_dapm_route tfa9879_dapm_routes[] = {
{ "DAC", NULL, "POWER" }, { "DAC", NULL, "POWER" },
}; };
static const struct snd_soc_codec_driver tfa9879_codec = { static const struct snd_soc_component_driver tfa9879_component = {
.component_driver = { .controls = tfa9879_controls,
.controls = tfa9879_controls, .num_controls = ARRAY_SIZE(tfa9879_controls),
.num_controls = ARRAY_SIZE(tfa9879_controls), .dapm_widgets = tfa9879_dapm_widgets,
.dapm_widgets = tfa9879_dapm_widgets, .num_dapm_widgets = ARRAY_SIZE(tfa9879_dapm_widgets),
.num_dapm_widgets = ARRAY_SIZE(tfa9879_dapm_widgets), .dapm_routes = tfa9879_dapm_routes,
.dapm_routes = tfa9879_dapm_routes, .num_dapm_routes = ARRAY_SIZE(tfa9879_dapm_routes),
.num_dapm_routes = ARRAY_SIZE(tfa9879_dapm_routes), .idle_bias_on = 1,
}, .use_pmdown_time = 1,
.endianness = 1,
.non_legacy_dai_naming = 1,
}; };
static const struct regmap_config tfa9879_regmap = { static const struct regmap_config tfa9879_regmap = {
...@@ -295,17 +297,10 @@ static int tfa9879_i2c_probe(struct i2c_client *i2c, ...@@ -295,17 +297,10 @@ static int tfa9879_i2c_probe(struct i2c_client *i2c,
regmap_write(tfa9879->regmap, regmap_write(tfa9879->regmap,
tfa9879_regs[i].reg, tfa9879_regs[i].def); tfa9879_regs[i].reg, tfa9879_regs[i].def);
return snd_soc_register_codec(&i2c->dev, &tfa9879_codec, return devm_snd_soc_register_component(&i2c->dev, &tfa9879_component,
&tfa9879_dai, 1); &tfa9879_dai, 1);
} }
static int tfa9879_i2c_remove(struct i2c_client *client)
{
snd_soc_unregister_codec(&client->dev);
return 0;
}
static const struct i2c_device_id tfa9879_i2c_id[] = { static const struct i2c_device_id tfa9879_i2c_id[] = {
{ "tfa9879", 0 }, { "tfa9879", 0 },
{ } { }
...@@ -324,7 +319,6 @@ static struct i2c_driver tfa9879_i2c_driver = { ...@@ -324,7 +319,6 @@ static struct i2c_driver tfa9879_i2c_driver = {
.of_match_table = tfa9879_of_match, .of_match_table = tfa9879_of_match,
}, },
.probe = tfa9879_i2c_probe, .probe = tfa9879_i2c_probe,
.remove = tfa9879_i2c_remove,
.id_table = tfa9879_i2c_id, .id_table = tfa9879_i2c_id,
}; };
......
...@@ -31,12 +31,6 @@ static int tlv320aic23_i2c_probe(struct i2c_client *i2c, ...@@ -31,12 +31,6 @@ static int tlv320aic23_i2c_probe(struct i2c_client *i2c,
return tlv320aic23_probe(&i2c->dev, regmap); return tlv320aic23_probe(&i2c->dev, regmap);
} }
static int tlv320aic23_i2c_remove(struct i2c_client *i2c)
{
snd_soc_unregister_codec(&i2c->dev);
return 0;
}
static const struct i2c_device_id tlv320aic23_id[] = { static const struct i2c_device_id tlv320aic23_id[] = {
{"tlv320aic23", 0}, {"tlv320aic23", 0},
{} {}
...@@ -56,7 +50,6 @@ static struct i2c_driver tlv320aic23_i2c_driver = { ...@@ -56,7 +50,6 @@ static struct i2c_driver tlv320aic23_i2c_driver = {
.of_match_table = of_match_ptr(tlv320aic23_of_match), .of_match_table = of_match_ptr(tlv320aic23_of_match),
}, },
.probe = tlv320aic23_i2c_probe, .probe = tlv320aic23_i2c_probe,
.remove = tlv320aic23_i2c_remove,
.id_table = tlv320aic23_id, .id_table = tlv320aic23_id,
}; };
......
...@@ -34,18 +34,11 @@ static int aic23_spi_probe(struct spi_device *spi) ...@@ -34,18 +34,11 @@ static int aic23_spi_probe(struct spi_device *spi)
return tlv320aic23_probe(&spi->dev, regmap); return tlv320aic23_probe(&spi->dev, regmap);
} }
static int aic23_spi_remove(struct spi_device *spi)
{
snd_soc_unregister_codec(&spi->dev);
return 0;
}
static struct spi_driver aic23_spi = { static struct spi_driver aic23_spi = {
.driver = { .driver = {
.name = "tlv320aic23", .name = "tlv320aic23",
}, },
.probe = aic23_spi_probe, .probe = aic23_spi_probe,
.remove = aic23_spi_remove,
}; };
module_spi_driver(aic23_spi); module_spi_driver(aic23_spi);
......
This diff is collapsed.
...@@ -30,7 +30,7 @@ MODULE_LICENSE("GPL"); ...@@ -30,7 +30,7 @@ MODULE_LICENSE("GPL");
struct aic26 { struct aic26 {
struct spi_device *spi; struct spi_device *spi;
struct regmap *regmap; struct regmap *regmap;
struct snd_soc_codec *codec; struct snd_soc_component *component;
int master; int master;
int datfm; int datfm;
int mclk; int mclk;
...@@ -64,8 +64,8 @@ static int aic26_hw_params(struct snd_pcm_substream *substream, ...@@ -64,8 +64,8 @@ static int aic26_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params, struct snd_pcm_hw_params *params,
struct snd_soc_dai *dai) struct snd_soc_dai *dai)
{ {
struct snd_soc_codec *codec = dai->codec; struct snd_soc_component *component = dai->component;
struct aic26 *aic26 = snd_soc_codec_get_drvdata(codec); struct aic26 *aic26 = snd_soc_component_get_drvdata(component);
int fsref, divisor, wlen, pval, jval, dval, qval; int fsref, divisor, wlen, pval, jval, dval, qval;
u16 reg; u16 reg;
...@@ -112,20 +112,20 @@ static int aic26_hw_params(struct snd_pcm_substream *substream, ...@@ -112,20 +112,20 @@ static int aic26_hw_params(struct snd_pcm_substream *substream,
dev_dbg(&aic26->spi->dev, "Setting PLLM to %d.%04d\n", jval, dval); dev_dbg(&aic26->spi->dev, "Setting PLLM to %d.%04d\n", jval, dval);
qval = 0; qval = 0;
reg = 0x8000 | qval << 11 | pval << 8 | jval << 2; reg = 0x8000 | qval << 11 | pval << 8 | jval << 2;
snd_soc_write(codec, AIC26_REG_PLL_PROG1, reg); snd_soc_component_write(component, AIC26_REG_PLL_PROG1, reg);
reg = dval << 2; reg = dval << 2;
snd_soc_write(codec, AIC26_REG_PLL_PROG2, reg); snd_soc_component_write(component, AIC26_REG_PLL_PROG2, reg);
/* Audio Control 3 (master mode, fsref rate) */ /* Audio Control 3 (master mode, fsref rate) */
if (aic26->master) if (aic26->master)
reg = 0x0800; reg = 0x0800;
if (fsref == 48000) if (fsref == 48000)
reg = 0x2000; reg = 0x2000;
snd_soc_update_bits(codec, AIC26_REG_AUDIO_CTRL3, 0xf800, reg); snd_soc_component_update_bits(component, AIC26_REG_AUDIO_CTRL3, 0xf800, reg);
/* Audio Control 1 (FSref divisor) */ /* Audio Control 1 (FSref divisor) */
reg = wlen | aic26->datfm | (divisor << 3) | divisor; reg = wlen | aic26->datfm | (divisor << 3) | divisor;
snd_soc_update_bits(codec, AIC26_REG_AUDIO_CTRL1, 0xfff, reg); snd_soc_component_update_bits(component, AIC26_REG_AUDIO_CTRL1, 0xfff, reg);
return 0; return 0;
} }
...@@ -135,8 +135,8 @@ static int aic26_hw_params(struct snd_pcm_substream *substream, ...@@ -135,8 +135,8 @@ static int aic26_hw_params(struct snd_pcm_substream *substream,
*/ */
static int aic26_mute(struct snd_soc_dai *dai, int mute) static int aic26_mute(struct snd_soc_dai *dai, int mute)
{ {
struct snd_soc_codec *codec = dai->codec; struct snd_soc_component *component = dai->component;
struct aic26 *aic26 = snd_soc_codec_get_drvdata(codec); struct aic26 *aic26 = snd_soc_component_get_drvdata(component);
u16 reg; u16 reg;
dev_dbg(&aic26->spi->dev, "aic26_mute(dai=%p, mute=%i)\n", dev_dbg(&aic26->spi->dev, "aic26_mute(dai=%p, mute=%i)\n",
...@@ -146,7 +146,7 @@ static int aic26_mute(struct snd_soc_dai *dai, int mute) ...@@ -146,7 +146,7 @@ static int aic26_mute(struct snd_soc_dai *dai, int mute)
reg = 0x8080; reg = 0x8080;
else else
reg = 0; reg = 0;
snd_soc_update_bits(codec, AIC26_REG_DAC_GAIN, 0x8000, reg); snd_soc_component_update_bits(component, AIC26_REG_DAC_GAIN, 0x8000, reg);
return 0; return 0;
} }
...@@ -154,8 +154,8 @@ static int aic26_mute(struct snd_soc_dai *dai, int mute) ...@@ -154,8 +154,8 @@ static int aic26_mute(struct snd_soc_dai *dai, int mute)
static int aic26_set_sysclk(struct snd_soc_dai *codec_dai, static int aic26_set_sysclk(struct snd_soc_dai *codec_dai,
int clk_id, unsigned int freq, int dir) int clk_id, unsigned int freq, int dir)
{ {
struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_component *component = codec_dai->component;
struct aic26 *aic26 = snd_soc_codec_get_drvdata(codec); struct aic26 *aic26 = snd_soc_component_get_drvdata(component);
dev_dbg(&aic26->spi->dev, "aic26_set_sysclk(dai=%p, clk_id==%i," dev_dbg(&aic26->spi->dev, "aic26_set_sysclk(dai=%p, clk_id==%i,"
" freq=%i, dir=%i)\n", " freq=%i, dir=%i)\n",
...@@ -171,8 +171,8 @@ static int aic26_set_sysclk(struct snd_soc_dai *codec_dai, ...@@ -171,8 +171,8 @@ static int aic26_set_sysclk(struct snd_soc_dai *codec_dai,
static int aic26_set_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) static int aic26_set_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
{ {
struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_component *component = codec_dai->component;
struct aic26 *aic26 = snd_soc_codec_get_drvdata(codec); struct aic26 *aic26 = snd_soc_component_get_drvdata(component);
dev_dbg(&aic26->spi->dev, "aic26_set_fmt(dai=%p, fmt==%i)\n", dev_dbg(&aic26->spi->dev, "aic26_set_fmt(dai=%p, fmt==%i)\n",
codec_dai, fmt); codec_dai, fmt);
...@@ -265,7 +265,7 @@ static ssize_t aic26_keyclick_show(struct device *dev, ...@@ -265,7 +265,7 @@ static ssize_t aic26_keyclick_show(struct device *dev,
struct aic26 *aic26 = dev_get_drvdata(dev); struct aic26 *aic26 = dev_get_drvdata(dev);
int val, amp, freq, len; int val, amp, freq, len;
val = snd_soc_read(aic26->codec, AIC26_REG_AUDIO_CTRL2); val = snd_soc_component_read32(aic26->component, AIC26_REG_AUDIO_CTRL2);
amp = (val >> 12) & 0x7; amp = (val >> 12) & 0x7;
freq = (125 << ((val >> 8) & 0x7)) >> 1; freq = (125 << ((val >> 8) & 0x7)) >> 1;
len = 2 * (1 + ((val >> 4) & 0xf)); len = 2 * (1 + ((val >> 4) & 0xf));
...@@ -280,7 +280,7 @@ static ssize_t aic26_keyclick_set(struct device *dev, ...@@ -280,7 +280,7 @@ static ssize_t aic26_keyclick_set(struct device *dev,
{ {
struct aic26 *aic26 = dev_get_drvdata(dev); struct aic26 *aic26 = dev_get_drvdata(dev);
snd_soc_update_bits(aic26->codec, AIC26_REG_AUDIO_CTRL2, snd_soc_component_update_bits(aic26->component, AIC26_REG_AUDIO_CTRL2,
0x8000, 0x800); 0x8000, 0x800);
return count; return count;
...@@ -291,44 +291,46 @@ static DEVICE_ATTR(keyclick, 0644, aic26_keyclick_show, aic26_keyclick_set); ...@@ -291,44 +291,46 @@ static DEVICE_ATTR(keyclick, 0644, aic26_keyclick_show, aic26_keyclick_set);
/* --------------------------------------------------------------------- /* ---------------------------------------------------------------------
* SoC CODEC portion of driver: probe and release routines * SoC CODEC portion of driver: probe and release routines
*/ */
static int aic26_probe(struct snd_soc_codec *codec) static int aic26_probe(struct snd_soc_component *component)
{ {
struct aic26 *aic26 = dev_get_drvdata(codec->dev); struct aic26 *aic26 = dev_get_drvdata(component->dev);
int ret, reg; int ret, reg;
aic26->codec = codec; aic26->component = component;
/* Reset the codec to power on defaults */ /* Reset the codec to power on defaults */
snd_soc_write(codec, AIC26_REG_RESET, 0xBB00); snd_soc_component_write(component, AIC26_REG_RESET, 0xBB00);
/* Power up CODEC */ /* Power up CODEC */
snd_soc_write(codec, AIC26_REG_POWER_CTRL, 0); snd_soc_component_write(component, AIC26_REG_POWER_CTRL, 0);
/* Audio Control 3 (master mode, fsref rate) */ /* Audio Control 3 (master mode, fsref rate) */
reg = snd_soc_read(codec, AIC26_REG_AUDIO_CTRL3); reg = snd_soc_component_read32(component, AIC26_REG_AUDIO_CTRL3);
reg &= ~0xf800; reg &= ~0xf800;
reg |= 0x0800; /* set master mode */ reg |= 0x0800; /* set master mode */
snd_soc_write(codec, AIC26_REG_AUDIO_CTRL3, reg); snd_soc_component_write(component, AIC26_REG_AUDIO_CTRL3, reg);
/* Register the sysfs files for debugging */ /* Register the sysfs files for debugging */
/* Create SysFS files */ /* Create SysFS files */
ret = device_create_file(codec->dev, &dev_attr_keyclick); ret = device_create_file(component->dev, &dev_attr_keyclick);
if (ret) if (ret)
dev_info(codec->dev, "error creating sysfs files\n"); dev_info(component->dev, "error creating sysfs files\n");
return 0; return 0;
} }
static const struct snd_soc_codec_driver aic26_soc_codec_dev = { static const struct snd_soc_component_driver aic26_soc_component_dev = {
.probe = aic26_probe, .probe = aic26_probe,
.component_driver = { .controls = aic26_snd_controls,
.controls = aic26_snd_controls, .num_controls = ARRAY_SIZE(aic26_snd_controls),
.num_controls = ARRAY_SIZE(aic26_snd_controls), .dapm_widgets = tlv320aic26_dapm_widgets,
.dapm_widgets = tlv320aic26_dapm_widgets, .num_dapm_widgets = ARRAY_SIZE(tlv320aic26_dapm_widgets),
.num_dapm_widgets = ARRAY_SIZE(tlv320aic26_dapm_widgets), .dapm_routes = tlv320aic26_dapm_routes,
.dapm_routes = tlv320aic26_dapm_routes, .num_dapm_routes = ARRAY_SIZE(tlv320aic26_dapm_routes),
.num_dapm_routes = ARRAY_SIZE(tlv320aic26_dapm_routes), .idle_bias_on = 1,
}, .use_pmdown_time = 1,
.endianness = 1,
.non_legacy_dai_naming = 1,
}; };
static const struct regmap_config aic26_regmap = { static const struct regmap_config aic26_regmap = {
...@@ -361,23 +363,16 @@ static int aic26_spi_probe(struct spi_device *spi) ...@@ -361,23 +363,16 @@ static int aic26_spi_probe(struct spi_device *spi)
dev_set_drvdata(&spi->dev, aic26); dev_set_drvdata(&spi->dev, aic26);
aic26->master = 1; aic26->master = 1;
ret = snd_soc_register_codec(&spi->dev, ret = devm_snd_soc_register_component(&spi->dev,
&aic26_soc_codec_dev, &aic26_dai, 1); &aic26_soc_component_dev, &aic26_dai, 1);
return ret; return ret;
} }
static int aic26_spi_remove(struct spi_device *spi)
{
snd_soc_unregister_codec(&spi->dev);
return 0;
}
static struct spi_driver aic26_spi = { static struct spi_driver aic26_spi = {
.driver = { .driver = {
.name = "tlv320aic26-codec", .name = "tlv320aic26-codec",
}, },
.probe = aic26_spi_probe, .probe = aic26_spi_probe,
.remove = aic26_spi_remove,
}; };
module_spi_driver(aic26_spi); module_spi_driver(aic26_spi);
This diff is collapsed.
...@@ -160,6 +160,7 @@ struct aic31xx_pdata { ...@@ -160,6 +160,7 @@ struct aic31xx_pdata {
#define AIC31XX_DACMOD2BCLK 0x01 #define AIC31XX_DACMOD2BCLK 0x01
#define AIC31XX_ADC2BCLK 0x02 #define AIC31XX_ADC2BCLK 0x02
#define AIC31XX_ADCMOD2BCLK 0x03 #define AIC31XX_ADCMOD2BCLK 0x03
#define AIC31XX_KEEP_I2SCLK BIT(2)
/* AIC31XX_ADCFLAG */ /* AIC31XX_ADCFLAG */
#define AIC31XX_ADCPWRSTATUS_MASK BIT(6) #define AIC31XX_ADCPWRSTATUS_MASK BIT(6)
......
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