Commit 9568eaec authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branches 'asoc/topic/max98090', 'asoc/topic/rockchip',...

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