mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-28 01:54:33 +00:00
Merge branch 'fix/asoc' into for-linus
This commit is contained in:
commit
05e205429d
11 changed files with 47 additions and 31 deletions
|
@ -848,9 +848,10 @@ int atmel_ssc_set_audio(int ssc_id)
|
||||||
if (IS_ERR(ssc))
|
if (IS_ERR(ssc))
|
||||||
pr_warn("Unable to parent ASoC SSC DAI on SSC: %ld\n",
|
pr_warn("Unable to parent ASoC SSC DAI on SSC: %ld\n",
|
||||||
PTR_ERR(ssc));
|
PTR_ERR(ssc));
|
||||||
else
|
else {
|
||||||
ssc_pdev->dev.parent = &(ssc->pdev->dev);
|
ssc_pdev->dev.parent = &(ssc->pdev->dev);
|
||||||
ssc_free(ssc);
|
ssc_free(ssc);
|
||||||
|
}
|
||||||
|
|
||||||
ret = platform_device_add(ssc_pdev);
|
ret = platform_device_add(ssc_pdev);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
@ -75,7 +75,7 @@ static struct snd_soc_dai_link bf5xx_ad1836_dai[] = {
|
||||||
.cpu_dai_name = "bfin-tdm.0",
|
.cpu_dai_name = "bfin-tdm.0",
|
||||||
.codec_dai_name = "ad1836-hifi",
|
.codec_dai_name = "ad1836-hifi",
|
||||||
.platform_name = "bfin-tdm-pcm-audio",
|
.platform_name = "bfin-tdm-pcm-audio",
|
||||||
.codec_name = "ad1836.0",
|
.codec_name = "spi0.4",
|
||||||
.ops = &bf5xx_ad1836_ops,
|
.ops = &bf5xx_ad1836_ops,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -84,7 +84,7 @@ static struct snd_soc_dai_link bf5xx_ad1836_dai[] = {
|
||||||
.cpu_dai_name = "bfin-tdm.1",
|
.cpu_dai_name = "bfin-tdm.1",
|
||||||
.codec_dai_name = "ad1836-hifi",
|
.codec_dai_name = "ad1836-hifi",
|
||||||
.platform_name = "bfin-tdm-pcm-audio",
|
.platform_name = "bfin-tdm-pcm-audio",
|
||||||
.codec_name = "ad1836.0",
|
.codec_name = "spi0.4",
|
||||||
.ops = &bf5xx_ad1836_ops,
|
.ops = &bf5xx_ad1836_ops,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -145,22 +145,22 @@ static int ad1836_hw_params(struct snd_pcm_substream *substream,
|
||||||
/* bit size */
|
/* bit size */
|
||||||
switch (params_format(params)) {
|
switch (params_format(params)) {
|
||||||
case SNDRV_PCM_FORMAT_S16_LE:
|
case SNDRV_PCM_FORMAT_S16_LE:
|
||||||
word_len = 3;
|
word_len = AD1836_WORD_LEN_16;
|
||||||
break;
|
break;
|
||||||
case SNDRV_PCM_FORMAT_S20_3LE:
|
case SNDRV_PCM_FORMAT_S20_3LE:
|
||||||
word_len = 1;
|
word_len = AD1836_WORD_LEN_20;
|
||||||
break;
|
break;
|
||||||
case SNDRV_PCM_FORMAT_S24_LE:
|
case SNDRV_PCM_FORMAT_S24_LE:
|
||||||
case SNDRV_PCM_FORMAT_S32_LE:
|
case SNDRV_PCM_FORMAT_S32_LE:
|
||||||
word_len = 0;
|
word_len = AD1836_WORD_LEN_24;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
snd_soc_update_bits(codec, AD1836_DAC_CTRL1,
|
snd_soc_update_bits(codec, AD1836_DAC_CTRL1, AD1836_DAC_WORD_LEN_MASK,
|
||||||
AD1836_DAC_WORD_LEN_MASK, word_len);
|
word_len << AD1836_DAC_WORD_LEN_OFFSET);
|
||||||
|
|
||||||
snd_soc_update_bits(codec, AD1836_ADC_CTRL2,
|
snd_soc_update_bits(codec, AD1836_ADC_CTRL2, AD1836_ADC_WORD_LEN_MASK,
|
||||||
AD1836_ADC_WORD_LEN_MASK, word_len);
|
word_len << AD1836_ADC_WORD_OFFSET);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#define AD1836_DAC_SERFMT_PCK256 (0x4 << 5)
|
#define AD1836_DAC_SERFMT_PCK256 (0x4 << 5)
|
||||||
#define AD1836_DAC_SERFMT_PCK128 (0x5 << 5)
|
#define AD1836_DAC_SERFMT_PCK128 (0x5 << 5)
|
||||||
#define AD1836_DAC_WORD_LEN_MASK 0x18
|
#define AD1836_DAC_WORD_LEN_MASK 0x18
|
||||||
|
#define AD1836_DAC_WORD_LEN_OFFSET 3
|
||||||
|
|
||||||
#define AD1836_DAC_CTRL2 1
|
#define AD1836_DAC_CTRL2 1
|
||||||
#define AD1836_DACL1_MUTE 0
|
#define AD1836_DACL1_MUTE 0
|
||||||
|
@ -51,6 +52,7 @@
|
||||||
#define AD1836_ADCL2_MUTE 2
|
#define AD1836_ADCL2_MUTE 2
|
||||||
#define AD1836_ADCR2_MUTE 3
|
#define AD1836_ADCR2_MUTE 3
|
||||||
#define AD1836_ADC_WORD_LEN_MASK 0x30
|
#define AD1836_ADC_WORD_LEN_MASK 0x30
|
||||||
|
#define AD1836_ADC_WORD_OFFSET 5
|
||||||
#define AD1836_ADC_SERFMT_MASK (7 << 6)
|
#define AD1836_ADC_SERFMT_MASK (7 << 6)
|
||||||
#define AD1836_ADC_SERFMT_PCK256 (0x4 << 6)
|
#define AD1836_ADC_SERFMT_PCK256 (0x4 << 6)
|
||||||
#define AD1836_ADC_SERFMT_PCK128 (0x5 << 6)
|
#define AD1836_ADC_SERFMT_PCK128 (0x5 << 6)
|
||||||
|
@ -60,4 +62,8 @@
|
||||||
|
|
||||||
#define AD1836_NUM_REGS 16
|
#define AD1836_NUM_REGS 16
|
||||||
|
|
||||||
|
#define AD1836_WORD_LEN_24 0x0
|
||||||
|
#define AD1836_WORD_LEN_20 0x1
|
||||||
|
#define AD1836_WORD_LEN_16 0x2
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -680,20 +680,25 @@ static struct snd_soc_dai_ops wm8804_dai_ops = {
|
||||||
#define WM8804_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
|
#define WM8804_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
|
||||||
SNDRV_PCM_FMTBIT_S24_LE)
|
SNDRV_PCM_FMTBIT_S24_LE)
|
||||||
|
|
||||||
|
#define WM8804_RATES (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
|
||||||
|
SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_64000 | \
|
||||||
|
SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | \
|
||||||
|
SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000)
|
||||||
|
|
||||||
static struct snd_soc_dai_driver wm8804_dai = {
|
static struct snd_soc_dai_driver wm8804_dai = {
|
||||||
.name = "wm8804-spdif",
|
.name = "wm8804-spdif",
|
||||||
.playback = {
|
.playback = {
|
||||||
.stream_name = "Playback",
|
.stream_name = "Playback",
|
||||||
.channels_min = 2,
|
.channels_min = 2,
|
||||||
.channels_max = 2,
|
.channels_max = 2,
|
||||||
.rates = SNDRV_PCM_RATE_8000_192000,
|
.rates = WM8804_RATES,
|
||||||
.formats = WM8804_FORMATS,
|
.formats = WM8804_FORMATS,
|
||||||
},
|
},
|
||||||
.capture = {
|
.capture = {
|
||||||
.stream_name = "Capture",
|
.stream_name = "Capture",
|
||||||
.channels_min = 2,
|
.channels_min = 2,
|
||||||
.channels_max = 2,
|
.channels_max = 2,
|
||||||
.rates = SNDRV_PCM_RATE_8000_192000,
|
.rates = WM8804_RATES,
|
||||||
.formats = WM8804_FORMATS,
|
.formats = WM8804_FORMATS,
|
||||||
},
|
},
|
||||||
.ops = &wm8804_dai_ops,
|
.ops = &wm8804_dai_ops,
|
||||||
|
|
|
@ -1839,7 +1839,7 @@ static int wm8915_set_sysclk(struct snd_soc_dai *dai,
|
||||||
int old;
|
int old;
|
||||||
|
|
||||||
/* Disable SYSCLK while we reconfigure */
|
/* Disable SYSCLK while we reconfigure */
|
||||||
old = snd_soc_read(codec, WM8915_AIF_CLOCKING_1);
|
old = snd_soc_read(codec, WM8915_AIF_CLOCKING_1) & WM8915_SYSCLK_ENA;
|
||||||
snd_soc_update_bits(codec, WM8915_AIF_CLOCKING_1,
|
snd_soc_update_bits(codec, WM8915_AIF_CLOCKING_1,
|
||||||
WM8915_SYSCLK_ENA, 0);
|
WM8915_SYSCLK_ENA, 0);
|
||||||
|
|
||||||
|
@ -2038,6 +2038,7 @@ static int wm8915_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
|
||||||
break;
|
break;
|
||||||
case WM8915_FLL_MCLK2:
|
case WM8915_FLL_MCLK2:
|
||||||
reg = 1;
|
reg = 1;
|
||||||
|
break;
|
||||||
case WM8915_FLL_DACLRCLK1:
|
case WM8915_FLL_DACLRCLK1:
|
||||||
reg = 2;
|
reg = 2;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1999,12 +1999,12 @@ static int wm8962_put_hp_sw(struct snd_kcontrol *kcontrol,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* If the left PGA is enabled hit that VU bit... */
|
/* If the left PGA is enabled hit that VU bit... */
|
||||||
if (reg_cache[WM8962_PWR_MGMT_2] & WM8962_HPOUTL_PGA_ENA)
|
if (snd_soc_read(codec, WM8962_PWR_MGMT_2) & WM8962_HPOUTL_PGA_ENA)
|
||||||
return snd_soc_write(codec, WM8962_HPOUTL_VOLUME,
|
return snd_soc_write(codec, WM8962_HPOUTL_VOLUME,
|
||||||
reg_cache[WM8962_HPOUTL_VOLUME]);
|
reg_cache[WM8962_HPOUTL_VOLUME]);
|
||||||
|
|
||||||
/* ...otherwise the right. The VU is stereo. */
|
/* ...otherwise the right. The VU is stereo. */
|
||||||
if (reg_cache[WM8962_PWR_MGMT_2] & WM8962_HPOUTR_PGA_ENA)
|
if (snd_soc_read(codec, WM8962_PWR_MGMT_2) & WM8962_HPOUTR_PGA_ENA)
|
||||||
return snd_soc_write(codec, WM8962_HPOUTR_VOLUME,
|
return snd_soc_write(codec, WM8962_HPOUTR_VOLUME,
|
||||||
reg_cache[WM8962_HPOUTR_VOLUME]);
|
reg_cache[WM8962_HPOUTR_VOLUME]);
|
||||||
|
|
||||||
|
|
|
@ -310,7 +310,7 @@ static int fsl_dma_new(struct snd_card *card, struct snd_soc_dai *dai,
|
||||||
* should allocate a DMA buffer only for the streams that are valid.
|
* should allocate a DMA buffer only for the streams that are valid.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (dai->driver->playback.channels_min) {
|
if (pcm->streams[0].substream) {
|
||||||
ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, card->dev,
|
ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, card->dev,
|
||||||
fsl_dma_hardware.buffer_bytes_max,
|
fsl_dma_hardware.buffer_bytes_max,
|
||||||
&pcm->streams[0].substream->dma_buffer);
|
&pcm->streams[0].substream->dma_buffer);
|
||||||
|
@ -320,13 +320,13 @@ static int fsl_dma_new(struct snd_card *card, struct snd_soc_dai *dai,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dai->driver->capture.channels_min) {
|
if (pcm->streams[1].substream) {
|
||||||
ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, card->dev,
|
ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, card->dev,
|
||||||
fsl_dma_hardware.buffer_bytes_max,
|
fsl_dma_hardware.buffer_bytes_max,
|
||||||
&pcm->streams[1].substream->dma_buffer);
|
&pcm->streams[1].substream->dma_buffer);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
snd_dma_free_pages(&pcm->streams[0].substream->dma_buffer);
|
|
||||||
dev_err(card->dev, "can't alloc capture dma buffer\n");
|
dev_err(card->dev, "can't alloc capture dma buffer\n");
|
||||||
|
snd_dma_free_pages(&pcm->streams[0].substream->dma_buffer);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -449,7 +449,8 @@ static int fsl_dma_open(struct snd_pcm_substream *substream)
|
||||||
dma_private->ld_buf_phys = ld_buf_phys;
|
dma_private->ld_buf_phys = ld_buf_phys;
|
||||||
dma_private->dma_buf_phys = substream->dma_buffer.addr;
|
dma_private->dma_buf_phys = substream->dma_buffer.addr;
|
||||||
|
|
||||||
ret = request_irq(dma_private->irq, fsl_dma_isr, 0, "DMA", dma_private);
|
ret = request_irq(dma_private->irq, fsl_dma_isr, 0, "fsldma-audio",
|
||||||
|
dma_private);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "can't register ISR for IRQ %u (ret=%i)\n",
|
dev_err(dev, "can't register ISR for IRQ %u (ret=%i)\n",
|
||||||
dma_private->irq, ret);
|
dma_private->irq, ret);
|
||||||
|
|
|
@ -191,7 +191,7 @@ static inline bool tx_active(struct i2s_dai *i2s)
|
||||||
if (!i2s)
|
if (!i2s)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
active = readl(i2s->addr + I2SMOD);
|
active = readl(i2s->addr + I2SCON);
|
||||||
|
|
||||||
if (is_secondary(i2s))
|
if (is_secondary(i2s))
|
||||||
active &= CON_TXSDMA_ACTIVE;
|
active &= CON_TXSDMA_ACTIVE;
|
||||||
|
@ -223,7 +223,7 @@ static inline bool rx_active(struct i2s_dai *i2s)
|
||||||
if (!i2s)
|
if (!i2s)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
active = readl(i2s->addr + I2SMOD) & CON_RXDMA_ACTIVE;
|
active = readl(i2s->addr + I2SCON) & CON_RXDMA_ACTIVE;
|
||||||
|
|
||||||
return active ? true : false;
|
return active ? true : false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -466,6 +466,9 @@ static bool snd_soc_set_cache_val(void *base, unsigned int idx,
|
||||||
static unsigned int snd_soc_get_cache_val(const void *base, unsigned int idx,
|
static unsigned int snd_soc_get_cache_val(const void *base, unsigned int idx,
|
||||||
unsigned int word_size)
|
unsigned int word_size)
|
||||||
{
|
{
|
||||||
|
if (!base)
|
||||||
|
return -1;
|
||||||
|
|
||||||
switch (word_size) {
|
switch (word_size) {
|
||||||
case 1: {
|
case 1: {
|
||||||
const u8 *cache = base;
|
const u8 *cache = base;
|
||||||
|
|
|
@ -350,9 +350,9 @@ static int dapm_is_shared_kcontrol(struct snd_soc_dapm_context *dapm,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* create new dapm mixer control */
|
/* create new dapm mixer control */
|
||||||
static int dapm_new_mixer(struct snd_soc_dapm_context *dapm,
|
static int dapm_new_mixer(struct snd_soc_dapm_widget *w)
|
||||||
struct snd_soc_dapm_widget *w)
|
|
||||||
{
|
{
|
||||||
|
struct snd_soc_dapm_context *dapm = w->dapm;
|
||||||
int i, ret = 0;
|
int i, ret = 0;
|
||||||
size_t name_len, prefix_len;
|
size_t name_len, prefix_len;
|
||||||
struct snd_soc_dapm_path *path;
|
struct snd_soc_dapm_path *path;
|
||||||
|
@ -450,9 +450,9 @@ static int dapm_new_mixer(struct snd_soc_dapm_context *dapm,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* create new dapm mux control */
|
/* create new dapm mux control */
|
||||||
static int dapm_new_mux(struct snd_soc_dapm_context *dapm,
|
static int dapm_new_mux(struct snd_soc_dapm_widget *w)
|
||||||
struct snd_soc_dapm_widget *w)
|
|
||||||
{
|
{
|
||||||
|
struct snd_soc_dapm_context *dapm = w->dapm;
|
||||||
struct snd_soc_dapm_path *path = NULL;
|
struct snd_soc_dapm_path *path = NULL;
|
||||||
struct snd_kcontrol *kcontrol;
|
struct snd_kcontrol *kcontrol;
|
||||||
struct snd_card *card = dapm->card->snd_card;
|
struct snd_card *card = dapm->card->snd_card;
|
||||||
|
@ -535,8 +535,7 @@ static int dapm_new_mux(struct snd_soc_dapm_context *dapm,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* create new dapm volume control */
|
/* create new dapm volume control */
|
||||||
static int dapm_new_pga(struct snd_soc_dapm_context *dapm,
|
static int dapm_new_pga(struct snd_soc_dapm_widget *w)
|
||||||
struct snd_soc_dapm_widget *w)
|
|
||||||
{
|
{
|
||||||
if (w->num_kcontrols)
|
if (w->num_kcontrols)
|
||||||
dev_err(w->dapm->dev,
|
dev_err(w->dapm->dev,
|
||||||
|
@ -1826,13 +1825,13 @@ int snd_soc_dapm_new_widgets(struct snd_soc_dapm_context *dapm)
|
||||||
case snd_soc_dapm_mixer:
|
case snd_soc_dapm_mixer:
|
||||||
case snd_soc_dapm_mixer_named_ctl:
|
case snd_soc_dapm_mixer_named_ctl:
|
||||||
w->power_check = dapm_generic_check_power;
|
w->power_check = dapm_generic_check_power;
|
||||||
dapm_new_mixer(dapm, w);
|
dapm_new_mixer(w);
|
||||||
break;
|
break;
|
||||||
case snd_soc_dapm_mux:
|
case snd_soc_dapm_mux:
|
||||||
case snd_soc_dapm_virt_mux:
|
case snd_soc_dapm_virt_mux:
|
||||||
case snd_soc_dapm_value_mux:
|
case snd_soc_dapm_value_mux:
|
||||||
w->power_check = dapm_generic_check_power;
|
w->power_check = dapm_generic_check_power;
|
||||||
dapm_new_mux(dapm, w);
|
dapm_new_mux(w);
|
||||||
break;
|
break;
|
||||||
case snd_soc_dapm_adc:
|
case snd_soc_dapm_adc:
|
||||||
case snd_soc_dapm_aif_out:
|
case snd_soc_dapm_aif_out:
|
||||||
|
@ -1845,7 +1844,7 @@ int snd_soc_dapm_new_widgets(struct snd_soc_dapm_context *dapm)
|
||||||
case snd_soc_dapm_pga:
|
case snd_soc_dapm_pga:
|
||||||
case snd_soc_dapm_out_drv:
|
case snd_soc_dapm_out_drv:
|
||||||
w->power_check = dapm_generic_check_power;
|
w->power_check = dapm_generic_check_power;
|
||||||
dapm_new_pga(dapm, w);
|
dapm_new_pga(w);
|
||||||
break;
|
break;
|
||||||
case snd_soc_dapm_input:
|
case snd_soc_dapm_input:
|
||||||
case snd_soc_dapm_output:
|
case snd_soc_dapm_output:
|
||||||
|
|
Loading…
Add table
Reference in a new issue