Commit 5c190154 authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branches 'asoc/topic/pistachio', 'asoc/topic/pxa',...

Merge remote-tracking branches 'asoc/topic/pistachio', 'asoc/topic/pxa', 'asoc/topic/rsnd', 'asoc/topic/rt274' and 'asoc/topic/rt286' into asoc-next
...@@ -351,6 +351,7 @@ Required properties: ...@@ -351,6 +351,7 @@ Required properties:
- "renesas,rcar_sound-r8a7793" (R-Car M2-N) - "renesas,rcar_sound-r8a7793" (R-Car M2-N)
- "renesas,rcar_sound-r8a7794" (R-Car E2) - "renesas,rcar_sound-r8a7794" (R-Car E2)
- "renesas,rcar_sound-r8a7795" (R-Car H3) - "renesas,rcar_sound-r8a7795" (R-Car H3)
- "renesas,rcar_sound-r8a7796" (R-Car M3-W)
- reg : Should contain the register physical address. - reg : Should contain the register physical address.
required register is required register is
SRU/ADG/SSI if generation1 SRU/ADG/SSI if generation1
......
...@@ -38,7 +38,7 @@ struct rt274_priv { ...@@ -38,7 +38,7 @@ struct rt274_priv {
struct reg_default *index_cache; struct reg_default *index_cache;
int index_cache_size; int index_cache_size;
struct regmap *regmap; struct regmap *regmap;
struct snd_soc_codec *codec; struct snd_soc_component *component;
struct i2c_client *i2c; struct i2c_client *i2c;
struct snd_soc_jack *jack; struct snd_soc_jack *jack;
struct delayed_work jack_detect_work; struct delayed_work jack_detect_work;
...@@ -338,13 +338,13 @@ static bool rt274_readable_register(struct device *dev, unsigned int reg) ...@@ -338,13 +338,13 @@ static bool rt274_readable_register(struct device *dev, unsigned int reg)
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
static void rt274_index_sync(struct snd_soc_codec *codec) static void rt274_index_sync(struct snd_soc_component *component)
{ {
struct rt274_priv *rt274 = snd_soc_codec_get_drvdata(codec); struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
int i; int i;
for (i = 0; i < INDEX_CACHE_SIZE; i++) { for (i = 0; i < INDEX_CACHE_SIZE; i++) {
snd_soc_write(codec, rt274->index_cache[i].reg, snd_soc_component_write(component, rt274->index_cache[i].reg,
rt274->index_cache[i].def); rt274->index_cache[i].def);
} }
} }
...@@ -357,7 +357,7 @@ static int rt274_jack_detect(struct rt274_priv *rt274, bool *hp, bool *mic) ...@@ -357,7 +357,7 @@ static int rt274_jack_detect(struct rt274_priv *rt274, bool *hp, bool *mic)
*hp = false; *hp = false;
*mic = false; *mic = false;
if (!rt274->codec) if (!rt274->component)
return -EINVAL; return -EINVAL;
regmap_read(rt274->regmap, RT274_GET_HP_SENSE, &buf); regmap_read(rt274->regmap, RT274_GET_HP_SENSE, &buf);
...@@ -393,10 +393,10 @@ static void rt274_jack_detect_work(struct work_struct *work) ...@@ -393,10 +393,10 @@ static void rt274_jack_detect_work(struct work_struct *work)
static irqreturn_t rt274_irq(int irq, void *data); static irqreturn_t rt274_irq(int irq, void *data);
static int rt274_mic_detect(struct snd_soc_codec *codec, static int rt274_mic_detect(struct snd_soc_component *component,
struct snd_soc_jack *jack, void *data) struct snd_soc_jack *jack, void *data)
{ {
struct rt274_priv *rt274 = snd_soc_codec_get_drvdata(codec); struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
if (jack == NULL) { if (jack == NULL) {
/* Disable jack detection */ /* Disable jack detection */
...@@ -609,8 +609,8 @@ static int rt274_hw_params(struct snd_pcm_substream *substream, ...@@ -609,8 +609,8 @@ static int rt274_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 rt274_priv *rt274 = snd_soc_codec_get_drvdata(codec); struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
unsigned int val = 0; unsigned int val = 0;
int d_len_code = 0, c_len_code = 0; int d_len_code = 0, c_len_code = 0;
...@@ -620,7 +620,7 @@ static int rt274_hw_params(struct snd_pcm_substream *substream, ...@@ -620,7 +620,7 @@ static int rt274_hw_params(struct snd_pcm_substream *substream,
case 48000: case 48000:
break; break;
default: default:
dev_err(codec->dev, "Unsupported sample rate %d\n", dev_err(component->dev, "Unsupported sample rate %d\n",
params_rate(params)); params_rate(params));
return -EINVAL; return -EINVAL;
} }
...@@ -628,7 +628,7 @@ static int rt274_hw_params(struct snd_pcm_substream *substream, ...@@ -628,7 +628,7 @@ static int rt274_hw_params(struct snd_pcm_substream *substream,
case 12288000: case 12288000:
case 24576000: case 24576000:
if (params_rate(params) != 48000) { if (params_rate(params) != 48000) {
dev_err(codec->dev, "Sys_clk is not matched (%d %d)\n", dev_err(component->dev, "Sys_clk is not matched (%d %d)\n",
params_rate(params), rt274->sys_clk); params_rate(params), rt274->sys_clk);
return -EINVAL; return -EINVAL;
} }
...@@ -636,7 +636,7 @@ static int rt274_hw_params(struct snd_pcm_substream *substream, ...@@ -636,7 +636,7 @@ static int rt274_hw_params(struct snd_pcm_substream *substream,
case 11289600: case 11289600:
case 22579200: case 22579200:
if (params_rate(params) != 44100) { if (params_rate(params) != 44100) {
dev_err(codec->dev, "Sys_clk is not matched (%d %d)\n", dev_err(component->dev, "Sys_clk is not matched (%d %d)\n",
params_rate(params), rt274->sys_clk); params_rate(params), rt274->sys_clk);
return -EINVAL; return -EINVAL;
} }
...@@ -647,7 +647,7 @@ static int rt274_hw_params(struct snd_pcm_substream *substream, ...@@ -647,7 +647,7 @@ static int rt274_hw_params(struct snd_pcm_substream *substream,
/* bit 3:0 Number of Channel */ /* bit 3:0 Number of Channel */
val |= (params_channels(params) - 1); val |= (params_channels(params) - 1);
} else { } else {
dev_err(codec->dev, "Unsupported channels %d\n", dev_err(component->dev, "Unsupported channels %d\n",
params_channels(params)); params_channels(params));
return -EINVAL; return -EINVAL;
} }
...@@ -685,29 +685,29 @@ static int rt274_hw_params(struct snd_pcm_substream *substream, ...@@ -685,29 +685,29 @@ static int rt274_hw_params(struct snd_pcm_substream *substream,
if (rt274->master) if (rt274->master)
c_len_code = 0x3; c_len_code = 0x3;
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_I2S_CTRL1, 0xc018, d_len_code << 3 | c_len_code << 14); RT274_I2S_CTRL1, 0xc018, d_len_code << 3 | c_len_code << 14);
dev_dbg(codec->dev, "format val = 0x%x\n", val); dev_dbg(component->dev, "format val = 0x%x\n", val);
snd_soc_update_bits(codec, RT274_DAC_FORMAT, 0x407f, val); snd_soc_component_update_bits(component, RT274_DAC_FORMAT, 0x407f, val);
snd_soc_update_bits(codec, RT274_ADC_FORMAT, 0x407f, val); snd_soc_component_update_bits(component, RT274_ADC_FORMAT, 0x407f, val);
return 0; return 0;
} }
static int rt274_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) static int rt274_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
{ {
struct snd_soc_codec *codec = dai->codec; struct snd_soc_component *component = dai->component;
struct rt274_priv *rt274 = snd_soc_codec_get_drvdata(codec); struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
case SND_SOC_DAIFMT_CBM_CFM: case SND_SOC_DAIFMT_CBM_CFM:
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_I2S_CTRL1, RT274_I2S_MODE_MASK, RT274_I2S_MODE_M); RT274_I2S_CTRL1, RT274_I2S_MODE_MASK, RT274_I2S_MODE_M);
rt274->master = true; rt274->master = true;
break; break;
case SND_SOC_DAIFMT_CBS_CFS: case SND_SOC_DAIFMT_CBS_CFS:
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_I2S_CTRL1, RT274_I2S_MODE_MASK, RT274_I2S_MODE_S); RT274_I2S_CTRL1, RT274_I2S_MODE_MASK, RT274_I2S_MODE_S);
rt274->master = false; rt274->master = false;
break; break;
...@@ -717,27 +717,27 @@ static int rt274_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) ...@@ -717,27 +717,27 @@ static int rt274_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
case SND_SOC_DAIFMT_I2S: case SND_SOC_DAIFMT_I2S:
snd_soc_update_bits(codec, RT274_I2S_CTRL1, snd_soc_component_update_bits(component, RT274_I2S_CTRL1,
RT274_I2S_FMT_MASK, RT274_I2S_FMT_I2S); RT274_I2S_FMT_MASK, RT274_I2S_FMT_I2S);
break; break;
case SND_SOC_DAIFMT_LEFT_J: case SND_SOC_DAIFMT_LEFT_J:
snd_soc_update_bits(codec, RT274_I2S_CTRL1, snd_soc_component_update_bits(component, RT274_I2S_CTRL1,
RT274_I2S_FMT_MASK, RT274_I2S_FMT_LJ); RT274_I2S_FMT_MASK, RT274_I2S_FMT_LJ);
break; break;
case SND_SOC_DAIFMT_DSP_A: case SND_SOC_DAIFMT_DSP_A:
snd_soc_update_bits(codec, RT274_I2S_CTRL1, snd_soc_component_update_bits(component, RT274_I2S_CTRL1,
RT274_I2S_FMT_MASK, RT274_I2S_FMT_PCMA); RT274_I2S_FMT_MASK, RT274_I2S_FMT_PCMA);
break; break;
case SND_SOC_DAIFMT_DSP_B: case SND_SOC_DAIFMT_DSP_B:
snd_soc_update_bits(codec, RT274_I2S_CTRL1, snd_soc_component_update_bits(component, RT274_I2S_CTRL1,
RT274_I2S_FMT_MASK, RT274_I2S_FMT_PCMB); RT274_I2S_FMT_MASK, RT274_I2S_FMT_PCMB);
break; break;
default: default:
return -EINVAL; return -EINVAL;
} }
/* bit 15 Stream Type 0:PCM 1:Non-PCM */ /* bit 15 Stream Type 0:PCM 1:Non-PCM */
snd_soc_update_bits(codec, RT274_DAC_FORMAT, 0x8000, 0); snd_soc_component_update_bits(component, RT274_DAC_FORMAT, 0x8000, 0);
snd_soc_update_bits(codec, RT274_ADC_FORMAT, 0x8000, 0); snd_soc_component_update_bits(component, RT274_ADC_FORMAT, 0x8000, 0);
return 0; return 0;
} }
...@@ -745,47 +745,47 @@ static int rt274_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) ...@@ -745,47 +745,47 @@ static int rt274_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
static int rt274_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source, static int rt274_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source,
unsigned int freq_in, unsigned int freq_out) unsigned int freq_in, unsigned int freq_out)
{ {
struct snd_soc_codec *codec = dai->codec; struct snd_soc_component *component = dai->component;
struct rt274_priv *rt274 = snd_soc_codec_get_drvdata(codec); struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
switch (source) { switch (source) {
case RT274_PLL2_S_MCLK: case RT274_PLL2_S_MCLK:
snd_soc_update_bits(codec, RT274_PLL2_CTRL, snd_soc_component_update_bits(component, RT274_PLL2_CTRL,
RT274_PLL2_SRC_MASK, RT274_PLL2_SRC_MCLK); RT274_PLL2_SRC_MASK, RT274_PLL2_SRC_MCLK);
break; break;
default: default:
dev_warn(codec->dev, "invalid pll source, use BCLK\n"); dev_warn(component->dev, "invalid pll source, use BCLK\n");
case RT274_PLL2_S_BCLK: case RT274_PLL2_S_BCLK:
snd_soc_update_bits(codec, RT274_PLL2_CTRL, snd_soc_component_update_bits(component, RT274_PLL2_CTRL,
RT274_PLL2_SRC_MASK, RT274_PLL2_SRC_BCLK); RT274_PLL2_SRC_MASK, RT274_PLL2_SRC_BCLK);
break; break;
} }
if (source == RT274_PLL2_S_BCLK) { if (source == RT274_PLL2_S_BCLK) {
snd_soc_update_bits(codec, RT274_MCLK_CTRL, snd_soc_component_update_bits(component, RT274_MCLK_CTRL,
(0x3 << 12), (0x3 << 12)); (0x3 << 12), (0x3 << 12));
switch (rt274->fs) { switch (rt274->fs) {
case 50: case 50:
snd_soc_write(codec, 0x7a, 0xaab6); snd_soc_component_write(component, 0x7a, 0xaab6);
snd_soc_write(codec, 0x7b, 0x0301); snd_soc_component_write(component, 0x7b, 0x0301);
snd_soc_write(codec, 0x7c, 0x04fe); snd_soc_component_write(component, 0x7c, 0x04fe);
break; break;
case 64: case 64:
snd_soc_write(codec, 0x7a, 0xaa96); snd_soc_component_write(component, 0x7a, 0xaa96);
snd_soc_write(codec, 0x7b, 0x8003); snd_soc_component_write(component, 0x7b, 0x8003);
snd_soc_write(codec, 0x7c, 0x081e); snd_soc_component_write(component, 0x7c, 0x081e);
break; break;
case 128: case 128:
snd_soc_write(codec, 0x7a, 0xaa96); snd_soc_component_write(component, 0x7a, 0xaa96);
snd_soc_write(codec, 0x7b, 0x8003); snd_soc_component_write(component, 0x7b, 0x8003);
snd_soc_write(codec, 0x7c, 0x080e); snd_soc_component_write(component, 0x7c, 0x080e);
break; break;
default: default:
dev_warn(codec->dev, "invalid freq_in, assume 4.8M\n"); dev_warn(component->dev, "invalid freq_in, assume 4.8M\n");
case 100: case 100:
snd_soc_write(codec, 0x7a, 0xaab6); snd_soc_component_write(component, 0x7a, 0xaab6);
snd_soc_write(codec, 0x7b, 0x0301); snd_soc_component_write(component, 0x7b, 0x0301);
snd_soc_write(codec, 0x7c, 0x047e); snd_soc_component_write(component, 0x7c, 0x047e);
break; break;
} }
} }
...@@ -796,11 +796,11 @@ static int rt274_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source, ...@@ -796,11 +796,11 @@ static int rt274_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source,
static int rt274_set_dai_sysclk(struct snd_soc_dai *dai, static int rt274_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_codec *codec = dai->codec; struct snd_soc_component *component = dai->component;
struct rt274_priv *rt274 = snd_soc_codec_get_drvdata(codec); struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
unsigned int clk_src, mclk_en; unsigned int clk_src, mclk_en;
dev_dbg(codec->dev, "%s freq=%d\n", __func__, freq); dev_dbg(component->dev, "%s freq=%d\n", __func__, freq);
switch (clk_id) { switch (clk_id) {
case RT274_SCLK_S_MCLK: case RT274_SCLK_S_MCLK:
...@@ -818,43 +818,43 @@ static int rt274_set_dai_sysclk(struct snd_soc_dai *dai, ...@@ -818,43 +818,43 @@ static int rt274_set_dai_sysclk(struct snd_soc_dai *dai,
default: default:
mclk_en = RT274_MCLK_MODE_DIS; mclk_en = RT274_MCLK_MODE_DIS;
clk_src = RT274_CLK_SRC_MCLK; clk_src = RT274_CLK_SRC_MCLK;
dev_warn(codec->dev, "invalid sysclk source, use PLL1\n"); dev_warn(component->dev, "invalid sysclk source, use PLL1\n");
break; break;
} }
snd_soc_update_bits(codec, RT274_MCLK_CTRL, snd_soc_component_update_bits(component, RT274_MCLK_CTRL,
RT274_MCLK_MODE_MASK, mclk_en); RT274_MCLK_MODE_MASK, mclk_en);
snd_soc_update_bits(codec, RT274_CLK_CTRL, snd_soc_component_update_bits(component, RT274_CLK_CTRL,
RT274_CLK_SRC_MASK, clk_src); RT274_CLK_SRC_MASK, clk_src);
switch (freq) { switch (freq) {
case 19200000: case 19200000:
if (clk_id == RT274_SCLK_S_MCLK) { if (clk_id == RT274_SCLK_S_MCLK) {
dev_err(codec->dev, "Should not use MCLK\n"); dev_err(component->dev, "Should not use MCLK\n");
return -EINVAL; return -EINVAL;
} }
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_I2S_CTRL2, 0x40, 0x40); RT274_I2S_CTRL2, 0x40, 0x40);
break; break;
case 24000000: case 24000000:
if (clk_id == RT274_SCLK_S_MCLK) { if (clk_id == RT274_SCLK_S_MCLK) {
dev_err(codec->dev, "Should not use MCLK\n"); dev_err(component->dev, "Should not use MCLK\n");
return -EINVAL; return -EINVAL;
} }
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_I2S_CTRL2, 0x40, 0x0); RT274_I2S_CTRL2, 0x40, 0x0);
break; break;
case 12288000: case 12288000:
case 11289600: case 11289600:
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_MCLK_CTRL, 0x1fcf, 0x0008); RT274_MCLK_CTRL, 0x1fcf, 0x0008);
break; break;
case 24576000: case 24576000:
case 22579200: case 22579200:
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_MCLK_CTRL, 0x1fcf, 0x1543); RT274_MCLK_CTRL, 0x1fcf, 0x1543);
break; break;
default: default:
dev_err(codec->dev, "Unsupported system clock\n"); dev_err(component->dev, "Unsupported system clock\n");
return -EINVAL; return -EINVAL;
} }
...@@ -866,16 +866,16 @@ static int rt274_set_dai_sysclk(struct snd_soc_dai *dai, ...@@ -866,16 +866,16 @@ static int rt274_set_dai_sysclk(struct snd_soc_dai *dai,
static int rt274_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio) static int rt274_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio)
{ {
struct snd_soc_codec *codec = dai->codec; struct snd_soc_component *component = dai->component;
struct rt274_priv *rt274 = snd_soc_codec_get_drvdata(codec); struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
dev_dbg(codec->dev, "%s ratio=%d\n", __func__, ratio); dev_dbg(component->dev, "%s ratio=%d\n", __func__, ratio);
rt274->fs = ratio; rt274->fs = ratio;
if ((ratio / 50) == 0) if ((ratio / 50) == 0)
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_I2S_CTRL1, 0x1000, 0x1000); RT274_I2S_CTRL1, 0x1000, 0x1000);
else else
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_I2S_CTRL1, 0x1000, 0x0); RT274_I2S_CTRL1, 0x1000, 0x0);
...@@ -886,28 +886,28 @@ static int rt274_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask, ...@@ -886,28 +886,28 @@ static int rt274_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
unsigned int rx_mask, int slots, int slot_width) unsigned int rx_mask, int slots, int slot_width)
{ {
struct snd_soc_codec *codec = dai->codec; struct snd_soc_component *component = dai->component;
if (rx_mask || tx_mask) { if (rx_mask || tx_mask) {
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_I2S_CTRL1, RT274_TDM_EN, RT274_TDM_EN); RT274_I2S_CTRL1, RT274_TDM_EN, RT274_TDM_EN);
} else { } else {
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_I2S_CTRL1, RT274_TDM_EN, RT274_TDM_DIS); RT274_I2S_CTRL1, RT274_TDM_EN, RT274_TDM_DIS);
return 0; return 0;
} }
switch (slots) { switch (slots) {
case 4: case 4:
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_I2S_CTRL1, RT274_TDM_CH_NUM, RT274_TDM_4CH); RT274_I2S_CTRL1, RT274_TDM_CH_NUM, RT274_TDM_4CH);
break; break;
case 2: case 2:
snd_soc_update_bits(codec, snd_soc_component_update_bits(component,
RT274_I2S_CTRL1, RT274_TDM_CH_NUM, RT274_TDM_2CH); RT274_I2S_CTRL1, RT274_TDM_CH_NUM, RT274_TDM_2CH);
break; break;
default: default:
dev_err(codec->dev, dev_err(component->dev,
"Support 2 or 4 slots TDM only\n"); "Support 2 or 4 slots TDM only\n");
return -EINVAL; return -EINVAL;
} }
...@@ -915,20 +915,20 @@ static int rt274_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask, ...@@ -915,20 +915,20 @@ static int rt274_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
return 0; return 0;
} }
static int rt274_set_bias_level(struct snd_soc_codec *codec, static int rt274_set_bias_level(struct snd_soc_component *component,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
switch (level) { switch (level) {
case SND_SOC_BIAS_PREPARE: case SND_SOC_BIAS_PREPARE:
if (SND_SOC_BIAS_STANDBY == if (SND_SOC_BIAS_STANDBY ==
snd_soc_codec_get_bias_level(codec)) { snd_soc_component_get_bias_level(component)) {
snd_soc_write(codec, snd_soc_component_write(component,
RT274_SET_AUDIO_POWER, AC_PWRST_D0); RT274_SET_AUDIO_POWER, AC_PWRST_D0);
} }
break; break;
case SND_SOC_BIAS_STANDBY: case SND_SOC_BIAS_STANDBY:
snd_soc_write(codec, snd_soc_component_write(component,
RT274_SET_AUDIO_POWER, AC_PWRST_D3); RT274_SET_AUDIO_POWER, AC_PWRST_D3);
break; break;
...@@ -968,11 +968,11 @@ static irqreturn_t rt274_irq(int irq, void *data) ...@@ -968,11 +968,11 @@ static irqreturn_t rt274_irq(int irq, void *data)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static int rt274_probe(struct snd_soc_codec *codec) static int rt274_probe(struct snd_soc_component *component)
{ {
struct rt274_priv *rt274 = snd_soc_codec_get_drvdata(codec); struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
rt274->codec = codec; rt274->component = component;
if (rt274->i2c->irq) { if (rt274->i2c->irq) {
INIT_DELAYED_WORK(&rt274->jack_detect_work, INIT_DELAYED_WORK(&rt274->jack_detect_work,
...@@ -984,19 +984,17 @@ static int rt274_probe(struct snd_soc_codec *codec) ...@@ -984,19 +984,17 @@ static int rt274_probe(struct snd_soc_codec *codec)
return 0; return 0;
} }
static int rt274_remove(struct snd_soc_codec *codec) static void rt274_remove(struct snd_soc_component *component)
{ {
struct rt274_priv *rt274 = snd_soc_codec_get_drvdata(codec); struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
cancel_delayed_work_sync(&rt274->jack_detect_work); cancel_delayed_work_sync(&rt274->jack_detect_work);
return 0;
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int rt274_suspend(struct snd_soc_codec *codec) static int rt274_suspend(struct snd_soc_component *component)
{ {
struct rt274_priv *rt274 = snd_soc_codec_get_drvdata(codec); struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
regcache_cache_only(rt274->regmap, true); regcache_cache_only(rt274->regmap, true);
regcache_mark_dirty(rt274->regmap); regcache_mark_dirty(rt274->regmap);
...@@ -1004,12 +1002,12 @@ static int rt274_suspend(struct snd_soc_codec *codec) ...@@ -1004,12 +1002,12 @@ static int rt274_suspend(struct snd_soc_codec *codec)
return 0; return 0;
} }
static int rt274_resume(struct snd_soc_codec *codec) static int rt274_resume(struct snd_soc_component *component)
{ {
struct rt274_priv *rt274 = snd_soc_codec_get_drvdata(codec); struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
regcache_cache_only(rt274->regmap, false); regcache_cache_only(rt274->regmap, false);
rt274_index_sync(codec); rt274_index_sync(component);
regcache_sync(rt274->regmap); regcache_sync(rt274->regmap);
return 0; return 0;
...@@ -1055,22 +1053,22 @@ static struct snd_soc_dai_driver rt274_dai[] = { ...@@ -1055,22 +1053,22 @@ static struct snd_soc_dai_driver rt274_dai[] = {
}, },
}; };
static const struct snd_soc_codec_driver soc_codec_dev_rt274 = { static const struct snd_soc_component_driver soc_component_dev_rt274 = {
.probe = rt274_probe, .probe = rt274_probe,
.remove = rt274_remove, .remove = rt274_remove,
.suspend = rt274_suspend, .suspend = rt274_suspend,
.resume = rt274_resume, .resume = rt274_resume,
.set_bias_level = rt274_set_bias_level, .set_bias_level = rt274_set_bias_level,
.idle_bias_off = true, .set_jack = rt274_mic_detect,
.component_driver = {
.controls = rt274_snd_controls, .controls = rt274_snd_controls,
.num_controls = ARRAY_SIZE(rt274_snd_controls), .num_controls = ARRAY_SIZE(rt274_snd_controls),
.dapm_widgets = rt274_dapm_widgets, .dapm_widgets = rt274_dapm_widgets,
.num_dapm_widgets = ARRAY_SIZE(rt274_dapm_widgets), .num_dapm_widgets = ARRAY_SIZE(rt274_dapm_widgets),
.dapm_routes = rt274_dapm_routes, .dapm_routes = rt274_dapm_routes,
.num_dapm_routes = ARRAY_SIZE(rt274_dapm_routes), .num_dapm_routes = ARRAY_SIZE(rt274_dapm_routes),
}, .use_pmdown_time = 1,
.set_jack = rt274_mic_detect, .endianness = 1,
.non_legacy_dai_naming = 1,
}; };
static const struct regmap_config rt274_regmap = { static const struct regmap_config rt274_regmap = {
...@@ -1191,7 +1189,8 @@ static int rt274_i2c_probe(struct i2c_client *i2c, ...@@ -1191,7 +1189,8 @@ static int rt274_i2c_probe(struct i2c_client *i2c,
} }
} }
ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt274, ret = devm_snd_soc_register_component(&i2c->dev,
&soc_component_dev_rt274,
rt274_dai, ARRAY_SIZE(rt274_dai)); rt274_dai, ARRAY_SIZE(rt274_dai));
return ret; return ret;
...@@ -1203,7 +1202,6 @@ static int rt274_i2c_remove(struct i2c_client *i2c) ...@@ -1203,7 +1202,6 @@ static int rt274_i2c_remove(struct i2c_client *i2c)
if (i2c->irq) if (i2c->irq)
free_irq(i2c->irq, rt274); free_irq(i2c->irq, rt274);
snd_soc_unregister_codec(&i2c->dev);
return 0; return 0;
} }
......
...@@ -275,9 +275,10 @@ static int rt286_jack_detect(struct rt286_priv *rt286, bool *hp, bool *mic) ...@@ -275,9 +275,10 @@ static int rt286_jack_detect(struct rt286_priv *rt286, bool *hp, bool *mic)
regmap_read(rt286->regmap, RT286_GET_MIC1_SENSE, &buf); regmap_read(rt286->regmap, RT286_GET_MIC1_SENSE, &buf);
*mic = buf & 0x80000000; *mic = buf & 0x80000000;
} }
if (!*mic) {
snd_soc_dapm_disable_pin(dapm, "HV"); snd_soc_dapm_disable_pin(dapm, "HV");
snd_soc_dapm_disable_pin(dapm, "VREF"); snd_soc_dapm_disable_pin(dapm, "VREF");
}
if (!*hp) if (!*hp)
snd_soc_dapm_disable_pin(dapm, "LDO1"); snd_soc_dapm_disable_pin(dapm, "LDO1");
snd_soc_dapm_sync(dapm); snd_soc_dapm_sync(dapm);
......
...@@ -122,26 +122,26 @@ static struct snd_soc_dai_driver pistachio_internal_dac_dais[] = { ...@@ -122,26 +122,26 @@ static struct snd_soc_dai_driver pistachio_internal_dac_dais[] = {
}, },
}; };
static int pistachio_internal_dac_codec_probe(struct snd_soc_codec *codec) static int pistachio_internal_dac_codec_probe(struct snd_soc_component *component)
{ {
struct pistachio_internal_dac *dac = snd_soc_codec_get_drvdata(codec); struct pistachio_internal_dac *dac = snd_soc_component_get_drvdata(component);
snd_soc_codec_init_regmap(codec, dac->regmap); snd_soc_component_init_regmap(component, dac->regmap);
return 0; return 0;
} }
static const struct snd_soc_codec_driver pistachio_internal_dac_driver = { static const struct snd_soc_component_driver pistachio_internal_dac_driver = {
.probe = pistachio_internal_dac_codec_probe, .probe = pistachio_internal_dac_codec_probe,
.idle_bias_off = true,
.component_driver = {
.controls = pistachio_internal_dac_snd_controls, .controls = pistachio_internal_dac_snd_controls,
.num_controls = ARRAY_SIZE(pistachio_internal_dac_snd_controls), .num_controls = ARRAY_SIZE(pistachio_internal_dac_snd_controls),
.dapm_widgets = pistachio_internal_dac_widgets, .dapm_widgets = pistachio_internal_dac_widgets,
.num_dapm_widgets = ARRAY_SIZE(pistachio_internal_dac_widgets), .num_dapm_widgets = ARRAY_SIZE(pistachio_internal_dac_widgets),
.dapm_routes = pistachio_internal_dac_routes, .dapm_routes = pistachio_internal_dac_routes,
.num_dapm_routes = ARRAY_SIZE(pistachio_internal_dac_routes), .num_dapm_routes = ARRAY_SIZE(pistachio_internal_dac_routes),
}, .use_pmdown_time = 1,
.endianness = 1,
.non_legacy_dai_naming = 1,
}; };
static int pistachio_internal_dac_probe(struct platform_device *pdev) static int pistachio_internal_dac_probe(struct platform_device *pdev)
...@@ -202,11 +202,12 @@ static int pistachio_internal_dac_probe(struct platform_device *pdev) ...@@ -202,11 +202,12 @@ static int pistachio_internal_dac_probe(struct platform_device *pdev)
pm_runtime_enable(dev); pm_runtime_enable(dev);
pm_runtime_idle(dev); pm_runtime_idle(dev);
ret = snd_soc_register_codec(dev, &pistachio_internal_dac_driver, ret = devm_snd_soc_register_component(dev,
&pistachio_internal_dac_driver,
pistachio_internal_dac_dais, pistachio_internal_dac_dais,
ARRAY_SIZE(pistachio_internal_dac_dais)); ARRAY_SIZE(pistachio_internal_dac_dais));
if (ret) { if (ret) {
dev_err(dev, "failed to register codec: %d\n", ret); dev_err(dev, "failed to register component: %d\n", ret);
goto err_pwr; goto err_pwr;
} }
...@@ -225,7 +226,6 @@ static int pistachio_internal_dac_remove(struct platform_device *pdev) ...@@ -225,7 +226,6 @@ static int pistachio_internal_dac_remove(struct platform_device *pdev)
{ {
struct pistachio_internal_dac *dac = dev_get_drvdata(&pdev->dev); struct pistachio_internal_dac *dac = dev_get_drvdata(&pdev->dev);
snd_soc_unregister_codec(&pdev->dev);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
pistachio_internal_dac_pwr_off(dac); pistachio_internal_dac_pwr_off(dac);
regulator_disable(dac->supply); regulator_disable(dac->supply);
......
...@@ -377,7 +377,6 @@ static int mmp_sspa_probe(struct snd_soc_dai *dai) ...@@ -377,7 +377,6 @@ static int mmp_sspa_probe(struct snd_soc_dai *dai)
#define MMP_SSPA_FORMATS (SNDRV_PCM_FMTBIT_S8 | \ #define MMP_SSPA_FORMATS (SNDRV_PCM_FMTBIT_S8 | \
SNDRV_PCM_FMTBIT_S16_LE | \ SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S24_LE | \ SNDRV_PCM_FMTBIT_S24_LE | \
SNDRV_PCM_FMTBIT_S24_LE | \
SNDRV_PCM_FMTBIT_S32_LE) SNDRV_PCM_FMTBIT_S32_LE)
static const struct snd_soc_dai_ops mmp_sspa_dai_ops = { static const struct snd_soc_dai_ops mmp_sspa_dai_ops = {
......
...@@ -93,6 +93,15 @@ ...@@ -93,6 +93,15 @@
* [mod]->fn() -> [mod]->fn() -> [mod]->fn()... * [mod]->fn() -> [mod]->fn() -> [mod]->fn()...
* *
*/ */
/*
* you can enable below define if you don't need
* DAI status debug message when debugging
* see rsnd_dbg_dai_call()
*
* #define RSND_DEBUG_NO_DAI_CALL 1
*/
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include "rsnd.h" #include "rsnd.h"
...@@ -468,7 +477,7 @@ static int rsnd_status_update(u32 *status, ...@@ -468,7 +477,7 @@ static int rsnd_status_update(u32 *status,
__rsnd_mod_shift_##fn, \ __rsnd_mod_shift_##fn, \
__rsnd_mod_add_##fn, \ __rsnd_mod_add_##fn, \
__rsnd_mod_call_##fn); \ __rsnd_mod_call_##fn); \
dev_dbg(dev, "%s[%d]\t0x%08x %s\n", \ rsnd_dbg_dai_call(dev, "%s[%d]\t0x%08x %s\n", \
rsnd_mod_name(mod), rsnd_mod_id(mod), *status, \ rsnd_mod_name(mod), rsnd_mod_id(mod), *status, \
(func_call && (mod)->ops->fn) ? #fn : ""); \ (func_call && (mod)->ops->fn) ? #fn : ""); \
if (func_call && (mod)->ops->fn) \ if (func_call && (mod)->ops->fn) \
...@@ -1546,8 +1555,7 @@ static int rsnd_resume(struct device *dev) ...@@ -1546,8 +1555,7 @@ static int rsnd_resume(struct device *dev)
} }
static const struct dev_pm_ops rsnd_pm_ops = { static const struct dev_pm_ops rsnd_pm_ops = {
.suspend = rsnd_suspend, SET_SYSTEM_SLEEP_PM_OPS(rsnd_suspend, rsnd_resume)
.resume = rsnd_resume,
}; };
static struct platform_driver rsnd_driver = { static struct platform_driver rsnd_driver = {
......
...@@ -788,4 +788,24 @@ void rsnd_mod_make_sure(struct rsnd_mod *mod, enum rsnd_mod_type type); ...@@ -788,4 +788,24 @@ void rsnd_mod_make_sure(struct rsnd_mod *mod, enum rsnd_mod_type type);
#define rsnd_mod_confirm_dvc(mdvc) #define rsnd_mod_confirm_dvc(mdvc)
#endif #endif
/*
* If you don't need interrupt status debug message,
* define RSND_DEBUG_NO_IRQ_STATUS as 1 on top of src.c/ssi.c
*
* #define RSND_DEBUG_NO_IRQ_STATUS 1
*/
#define rsnd_dbg_irq_status(dev, param...) \
if (!IS_BUILTIN(RSND_DEBUG_NO_IRQ_STATUS)) \
dev_dbg(dev, param)
/*
* If you don't need rsnd_dai_call debug message,
* define RSND_DEBUG_NO_DAI_CALL as 1 on top of core.c
*
* #define RSND_DEBUG_NO_DAI_CALL 1
*/
#define rsnd_dbg_dai_call(dev, param...) \
if (!IS_BUILTIN(RSND_DEBUG_NO_DAI_CALL)) \
dev_dbg(dev, param)
#endif #endif
...@@ -8,6 +8,15 @@ ...@@ -8,6 +8,15 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
/*
* you can enable below define if you don't need
* SSI interrupt status debug message when debugging
* see rsnd_dbg_irq_status()
*
* #define RSND_DEBUG_NO_IRQ_STATUS 1
*/
#include "rsnd.h" #include "rsnd.h"
#define SRC_NAME "src" #define SRC_NAME "src"
...@@ -325,7 +334,10 @@ static void rsnd_src_status_clear(struct rsnd_mod *mod) ...@@ -325,7 +334,10 @@ static void rsnd_src_status_clear(struct rsnd_mod *mod)
static bool rsnd_src_error_occurred(struct rsnd_mod *mod) static bool rsnd_src_error_occurred(struct rsnd_mod *mod)
{ {
struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
struct device *dev = rsnd_priv_to_dev(priv);
u32 val0, val1; u32 val0, val1;
u32 status0, status1;
bool ret = false; bool ret = false;
val0 = val1 = OUF_SRC(rsnd_mod_id(mod)); val0 = val1 = OUF_SRC(rsnd_mod_id(mod));
...@@ -338,9 +350,15 @@ static bool rsnd_src_error_occurred(struct rsnd_mod *mod) ...@@ -338,9 +350,15 @@ static bool rsnd_src_error_occurred(struct rsnd_mod *mod)
if (rsnd_src_sync_is_enabled(mod)) if (rsnd_src_sync_is_enabled(mod))
val0 = val0 & 0xffff; val0 = val0 & 0xffff;
if ((rsnd_mod_read(mod, SCU_SYS_STATUS0) & val0) || status0 = rsnd_mod_read(mod, SCU_SYS_STATUS0);
(rsnd_mod_read(mod, SCU_SYS_STATUS1) & val1)) status1 = rsnd_mod_read(mod, SCU_SYS_STATUS1);
if ((status0 & val0) || (status1 & val1)) {
rsnd_dbg_irq_status(dev, "%s[%d] err status : 0x%08x, 0x%08x\n",
rsnd_mod_name(mod), rsnd_mod_id(mod),
status0, status1);
ret = true; ret = true;
}
return ret; return ret;
} }
......
...@@ -11,6 +11,15 @@ ...@@ -11,6 +11,15 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
/*
* you can enable below define if you don't need
* SSI interrupt status debug message when debugging
* see rsnd_dbg_irq_status()
*
* #define RSND_DEBUG_NO_IRQ_STATUS 1
*/
#include <sound/simple_card_utils.h> #include <sound/simple_card_utils.h>
#include <linux/delay.h> #include <linux/delay.h>
#include "rsnd.h" #include "rsnd.h"
...@@ -603,6 +612,7 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod, ...@@ -603,6 +612,7 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
struct rsnd_dai_stream *io) struct rsnd_dai_stream *io)
{ {
struct rsnd_priv *priv = rsnd_mod_to_priv(mod); struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
struct device *dev = rsnd_priv_to_dev(priv);
int is_dma = rsnd_ssi_is_dma_mode(mod); int is_dma = rsnd_ssi_is_dma_mode(mod);
u32 status; u32 status;
bool elapsed = false; bool elapsed = false;
...@@ -621,8 +631,12 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod, ...@@ -621,8 +631,12 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
elapsed = rsnd_ssi_pio_interrupt(mod, io); elapsed = rsnd_ssi_pio_interrupt(mod, io);
/* DMA only */ /* DMA only */
if (is_dma && (status & (UIRQ | OIRQ))) if (is_dma && (status & (UIRQ | OIRQ))) {
rsnd_dbg_irq_status(dev, "%s[%d] err status : 0x%08x\n",
rsnd_mod_name(mod), rsnd_mod_id(mod), status);
stop = true; stop = true;
}
rsnd_ssi_status_clear(mod); rsnd_ssi_status_clear(mod);
rsnd_ssi_interrupt_out: rsnd_ssi_interrupt_out:
......
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