Merge remote-tracking branches 'asoc/topic/max98090', 'asoc/topic/rockchip', 'asoc/topic/rsnd' and 'asoc/topic/rt286' into asoc-next
This commit is contained in:
commit
9568eaec6c
|
@ -483,6 +483,7 @@ config SND_SOC_RL6231
|
|||
|
||||
config SND_SOC_RT286
|
||||
tristate
|
||||
depends on I2C
|
||||
|
||||
config SND_SOC_RT5631
|
||||
tristate
|
||||
|
|
|
@ -2159,12 +2159,16 @@ static void max98090_jack_work(struct work_struct *work)
|
|||
|
||||
static irqreturn_t max98090_interrupt(int irq, void *data)
|
||||
{
|
||||
struct snd_soc_codec *codec = data;
|
||||
struct max98090_priv *max98090 = snd_soc_codec_get_drvdata(codec);
|
||||
struct max98090_priv *max98090 = data;
|
||||
struct snd_soc_codec *codec = max98090->codec;
|
||||
int ret;
|
||||
unsigned int mask;
|
||||
unsigned int active;
|
||||
|
||||
/* Treat interrupt before codec is initialized as spurious */
|
||||
if (codec == NULL)
|
||||
return IRQ_NONE;
|
||||
|
||||
dev_dbg(codec->dev, "***** max98090_interrupt *****\n");
|
||||
|
||||
ret = regmap_read(max98090->regmap, M98090_REG_INTERRUPT_S, &mask);
|
||||
|
@ -2329,7 +2333,6 @@ static int max98090_probe(struct snd_soc_codec *codec)
|
|||
max98090->lin_state = 0;
|
||||
max98090->pa1en = 0;
|
||||
max98090->pa2en = 0;
|
||||
max98090->extmic_mux = 0;
|
||||
|
||||
ret = snd_soc_read(codec, M98090_REG_REVISION_ID);
|
||||
if (ret < 0) {
|
||||
|
@ -2367,17 +2370,6 @@ static int max98090_probe(struct snd_soc_codec *codec)
|
|||
snd_soc_write(codec, M98090_REG_JACK_DETECT,
|
||||
M98090_JDETEN_MASK | M98090_JDEB_25MS);
|
||||
|
||||
/* Register for interrupts */
|
||||
dev_dbg(codec->dev, "irq = %d\n", max98090->irq);
|
||||
|
||||
ret = devm_request_threaded_irq(codec->dev, max98090->irq, NULL,
|
||||
max98090_interrupt, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
|
||||
"max98090_interrupt", codec);
|
||||
if (ret < 0) {
|
||||
dev_err(codec->dev, "request_irq failed: %d\n",
|
||||
ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear any old interrupts.
|
||||
* An old interrupt ocurring prior to installing the ISR
|
||||
|
@ -2417,6 +2409,7 @@ static int max98090_remove(struct snd_soc_codec *codec)
|
|||
cancel_delayed_work_sync(&max98090->pll_det_enable_work);
|
||||
cancel_work_sync(&max98090->pll_det_disable_work);
|
||||
cancel_work_sync(&max98090->pll_work);
|
||||
max98090->codec = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -2469,7 +2462,6 @@ static int max98090_i2c_probe(struct i2c_client *i2c,
|
|||
max98090->devtype = driver_data;
|
||||
i2c_set_clientdata(i2c, max98090);
|
||||
max98090->pdata = i2c->dev.platform_data;
|
||||
max98090->irq = i2c->irq;
|
||||
|
||||
max98090->regmap = devm_regmap_init_i2c(i2c, &max98090_regmap);
|
||||
if (IS_ERR(max98090->regmap)) {
|
||||
|
@ -2478,6 +2470,15 @@ static int max98090_i2c_probe(struct i2c_client *i2c,
|
|||
goto err_enable;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(&i2c->dev, i2c->irq, NULL,
|
||||
max98090_interrupt, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
|
||||
"max98090_interrupt", max98090);
|
||||
if (ret < 0) {
|
||||
dev_err(&i2c->dev, "request_irq failed: %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = snd_soc_register_codec(&i2c->dev,
|
||||
&soc_codec_dev_max98090, max98090_dai,
|
||||
ARRAY_SIZE(max98090_dai));
|
||||
|
|
|
@ -11,11 +11,6 @@
|
|||
#ifndef _MAX98090_H
|
||||
#define _MAX98090_H
|
||||
|
||||
#include <linux/version.h>
|
||||
|
||||
/* One can override the Linux version here with an explicit version number */
|
||||
#define M98090_LINUX_VERSION LINUX_VERSION_CODE
|
||||
|
||||
/*
|
||||
* MAX98090 Register Definitions
|
||||
*/
|
||||
|
@ -1502,9 +1497,6 @@
|
|||
#define M98090_REVID_WIDTH 8
|
||||
#define M98090_REVID_NUM (1<<M98090_REVID_WIDTH)
|
||||
|
||||
#define M98090_BYTE1(w) ((w >> 8) & 0xff)
|
||||
#define M98090_BYTE0(w) (w & 0xff)
|
||||
|
||||
/* Silicon revision number */
|
||||
#define M98090_REVA 0x40
|
||||
#define M98091_REVA 0x50
|
||||
|
@ -1529,7 +1521,6 @@ struct max98090_priv {
|
|||
unsigned int bclk;
|
||||
unsigned int lrclk;
|
||||
struct max98090_cdata dai[1];
|
||||
int irq;
|
||||
int jack_state;
|
||||
struct delayed_work jack_work;
|
||||
struct delayed_work pll_det_enable_work;
|
||||
|
@ -1542,7 +1533,6 @@ struct max98090_priv {
|
|||
u8 lin_state;
|
||||
unsigned int pa1en;
|
||||
unsigned int pa2en;
|
||||
unsigned int extmic_mux;
|
||||
unsigned int sidetone;
|
||||
bool master;
|
||||
};
|
||||
|
|
|
@ -269,6 +269,7 @@ static int rt286_hw_read(void *context, unsigned int reg, unsigned int *value)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static void rt286_index_sync(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct rt286_priv *rt286 = snd_soc_codec_get_drvdata(codec);
|
||||
|
@ -279,6 +280,7 @@ static void rt286_index_sync(struct snd_soc_codec *codec)
|
|||
rt286->index_cache[i].def);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static int rt286_support_power_controls[] = {
|
||||
RT286_DAC_OUT1,
|
||||
|
|
|
@ -2,11 +2,10 @@ config SND_SOC_ROCKCHIP
|
|||
tristate "ASoC support for Rockchip"
|
||||
depends on COMPILE_TEST || ARCH_ROCKCHIP
|
||||
select SND_SOC_GENERIC_DMAENGINE_PCM
|
||||
select SND_ROCKCHIP_I2S
|
||||
help
|
||||
Say Y or M if you want to add support for codecs attached to
|
||||
the Rockchip SoCs' Audio interfaces. You will also need to
|
||||
select the audio interfaces to support below.
|
||||
|
||||
config SND_ROCKCHIP_I2S
|
||||
config SND_SOC_ROCKCHIP_I2S
|
||||
tristate
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# ROCKCHIP Platform Support
|
||||
snd-soc-i2s-objs := rockchip_i2s.o
|
||||
|
||||
obj-$(CONFIG_SND_ROCKCHIP_I2S) += snd-soc-i2s.o
|
||||
obj-$(CONFIG_SND_SOC_ROCKCHIP_I2S) += snd-soc-i2s.o
|
||||
|
|
|
@ -244,16 +244,6 @@ static int rockchip_i2s_hw_params(struct snd_pcm_substream *substream,
|
|||
regmap_update_bits(i2s->regmap, I2S_TXCR, I2S_TXCR_VDW_MASK, val);
|
||||
regmap_update_bits(i2s->regmap, I2S_RXCR, I2S_RXCR_VDW_MASK, val);
|
||||
|
||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
|
||||
dai->playback_dma_data = &i2s->playback_dma_data;
|
||||
regmap_update_bits(i2s->regmap, I2S_DMACR, I2S_DMACR_TDL_MASK,
|
||||
I2S_DMACR_TDL(1) | I2S_DMACR_TDE_ENABLE);
|
||||
} else {
|
||||
dai->capture_dma_data = &i2s->capture_dma_data;
|
||||
regmap_update_bits(i2s->regmap, I2S_DMACR, I2S_DMACR_RDL_MASK,
|
||||
I2S_DMACR_RDL(1) | I2S_DMACR_RDE_ENABLE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -301,6 +291,16 @@ static int rockchip_i2s_set_sysclk(struct snd_soc_dai *cpu_dai, int clk_id,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int rockchip_i2s_dai_probe(struct snd_soc_dai *dai)
|
||||
{
|
||||
struct rk_i2s_dev *i2s = snd_soc_dai_get_drvdata(dai);
|
||||
|
||||
dai->capture_dma_data = &i2s->capture_dma_data;
|
||||
dai->playback_dma_data = &i2s->playback_dma_data;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct snd_soc_dai_ops rockchip_i2s_dai_ops = {
|
||||
.hw_params = rockchip_i2s_hw_params,
|
||||
.set_sysclk = rockchip_i2s_set_sysclk,
|
||||
|
@ -309,7 +309,9 @@ static const struct snd_soc_dai_ops rockchip_i2s_dai_ops = {
|
|||
};
|
||||
|
||||
static struct snd_soc_dai_driver rockchip_i2s_dai = {
|
||||
.probe = rockchip_i2s_dai_probe,
|
||||
.playback = {
|
||||
.stream_name = "Playback",
|
||||
.channels_min = 2,
|
||||
.channels_max = 8,
|
||||
.rates = SNDRV_PCM_RATE_8000_192000,
|
||||
|
@ -319,6 +321,7 @@ static struct snd_soc_dai_driver rockchip_i2s_dai = {
|
|||
SNDRV_PCM_FMTBIT_S24_LE),
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Capture",
|
||||
.channels_min = 2,
|
||||
.channels_max = 2,
|
||||
.rates = SNDRV_PCM_RATE_8000_192000,
|
||||
|
@ -420,6 +423,11 @@ static int rockchip_i2s_probe(struct platform_device *pdev)
|
|||
dev_err(&pdev->dev, "Can't retrieve i2s bus clock\n");
|
||||
return PTR_ERR(i2s->hclk);
|
||||
}
|
||||
ret = clk_prepare_enable(i2s->hclk);
|
||||
if (ret) {
|
||||
dev_err(i2s->dev, "hclock enable failed %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
i2s->mclk = devm_clk_get(&pdev->dev, "i2s_clk");
|
||||
if (IS_ERR(i2s->mclk)) {
|
||||
|
|
|
@ -798,10 +798,8 @@ if (name##_node) { \
|
|||
mod_parse(src);
|
||||
mod_parse(dvc);
|
||||
|
||||
if (playback)
|
||||
of_node_put(playback);
|
||||
if (capture)
|
||||
of_node_put(capture);
|
||||
of_node_put(playback);
|
||||
of_node_put(capture);
|
||||
}
|
||||
|
||||
dai_i++;
|
||||
|
|
Loading…
Reference in New Issue