Merge branch 'asoc-5.1' into asoc-linus
This commit is contained in:
commit
7f5a466f2e
|
@ -1305,7 +1305,10 @@ static int da7213_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
|
|||
/* By default only 64 BCLK per WCLK is supported */
|
||||
dai_clk_mode |= DA7213_DAI_BCLKS_PER_WCLK_64;
|
||||
|
||||
snd_soc_component_write(component, DA7213_DAI_CLK_MODE, dai_clk_mode);
|
||||
snd_soc_component_update_bits(component, DA7213_DAI_CLK_MODE,
|
||||
DA7213_DAI_BCLKS_PER_WCLK_MASK |
|
||||
DA7213_DAI_CLK_POL_MASK | DA7213_DAI_WCLK_POL_MASK,
|
||||
dai_clk_mode);
|
||||
snd_soc_component_update_bits(component, DA7213_DAI_CTRL, DA7213_DAI_FORMAT_MASK,
|
||||
dai_ctrl);
|
||||
snd_soc_component_write(component, DA7213_DAI_OFFSET, dai_offset);
|
||||
|
|
|
@ -181,7 +181,9 @@
|
|||
#define DA7213_DAI_BCLKS_PER_WCLK_256 (0x3 << 0)
|
||||
#define DA7213_DAI_BCLKS_PER_WCLK_MASK (0x3 << 0)
|
||||
#define DA7213_DAI_CLK_POL_INV (0x1 << 2)
|
||||
#define DA7213_DAI_CLK_POL_MASK (0x1 << 2)
|
||||
#define DA7213_DAI_WCLK_POL_INV (0x1 << 3)
|
||||
#define DA7213_DAI_WCLK_POL_MASK (0x1 << 3)
|
||||
#define DA7213_DAI_CLK_EN_MASK (0x1 << 7)
|
||||
|
||||
/* DA7213_DAI_CTRL = 0x29 */
|
||||
|
|
|
@ -1583,20 +1583,26 @@ static const struct snd_soc_dai_ops da7219_dai_ops = {
|
|||
#define DA7219_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
|
||||
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
|
||||
|
||||
#define DA7219_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
|
||||
SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |\
|
||||
SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |\
|
||||
SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 |\
|
||||
SNDRV_PCM_RATE_96000)
|
||||
|
||||
static struct snd_soc_dai_driver da7219_dai = {
|
||||
.name = "da7219-hifi",
|
||||
.playback = {
|
||||
.stream_name = "Playback",
|
||||
.channels_min = 1,
|
||||
.channels_max = DA7219_DAI_CH_NUM_MAX,
|
||||
.rates = SNDRV_PCM_RATE_8000_96000,
|
||||
.rates = DA7219_RATES,
|
||||
.formats = DA7219_FORMATS,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Capture",
|
||||
.channels_min = 1,
|
||||
.channels_max = DA7219_DAI_CH_NUM_MAX,
|
||||
.rates = SNDRV_PCM_RATE_8000_96000,
|
||||
.rates = DA7219_RATES,
|
||||
.formats = DA7219_FORMATS,
|
||||
},
|
||||
.ops = &da7219_dai_ops,
|
||||
|
|
|
@ -1854,6 +1854,17 @@ static int hdmi_codec_probe(struct snd_soc_component *component)
|
|||
/* Imp: Store the card pointer in hda_codec */
|
||||
hdmi->card = dapm->card->snd_card;
|
||||
|
||||
/*
|
||||
* Setup a device_link between card device and HDMI codec device.
|
||||
* The card device is the consumer and the HDMI codec device is
|
||||
* the supplier. With this setting, we can make sure that the audio
|
||||
* domain in display power will be always turned on before operating
|
||||
* on the HDMI audio codec registers.
|
||||
* Let's use the flag DL_FLAG_AUTOREMOVE_CONSUMER. This can make
|
||||
* sure the device link is freed when the machine driver is removed.
|
||||
*/
|
||||
device_link_add(component->card->dev, &hdev->dev, DL_FLAG_RPM_ACTIVE |
|
||||
DL_FLAG_AUTOREMOVE_CONSUMER);
|
||||
/*
|
||||
* hdac_device core already sets the state to active and calls
|
||||
* get_noresume. So enable runtime and set the device to suspend.
|
||||
|
|
|
@ -439,9 +439,13 @@ static int hdmi_codec_startup(struct snd_pcm_substream *substream,
|
|||
if (!ret) {
|
||||
ret = snd_pcm_hw_constraint_eld(substream->runtime,
|
||||
hcp->eld);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
mutex_lock(&hcp->current_stream_lock);
|
||||
hcp->current_stream = NULL;
|
||||
mutex_unlock(&hcp->current_stream_lock);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
/* Select chmap supported */
|
||||
hdmi_codec_eld_chmap(hcp);
|
||||
}
|
||||
|
|
|
@ -2588,6 +2588,7 @@ static int rt5682_i2c_probe(struct i2c_client *i2c,
|
|||
|
||||
rt5682_reset(rt5682->regmap);
|
||||
|
||||
mutex_init(&rt5682->calibrate_mutex);
|
||||
rt5682_calibrate(rt5682);
|
||||
|
||||
ret = regmap_multi_reg_write(rt5682->regmap, patch_list,
|
||||
|
@ -2654,7 +2655,6 @@ static int rt5682_i2c_probe(struct i2c_client *i2c,
|
|||
INIT_DELAYED_WORK(&rt5682->jd_check_work,
|
||||
rt5682_jd_check_handler);
|
||||
|
||||
mutex_init(&rt5682->calibrate_mutex);
|
||||
|
||||
if (i2c->irq) {
|
||||
ret = devm_request_threaded_irq(&i2c->dev, i2c->irq, NULL,
|
||||
|
|
|
@ -193,13 +193,13 @@ static const u8 table_msbc_silence[SCO_PACKET_180] = {
|
|||
static void mtk_btcvsd_snd_irq_enable(struct mtk_btcvsd_snd *bt)
|
||||
{
|
||||
regmap_update_bits(bt->infra, bt->infra_misc_offset,
|
||||
bt->conn_bt_cvsd_mask, bt->conn_bt_cvsd_mask);
|
||||
bt->conn_bt_cvsd_mask, 0);
|
||||
}
|
||||
|
||||
static void mtk_btcvsd_snd_irq_disable(struct mtk_btcvsd_snd *bt)
|
||||
{
|
||||
regmap_update_bits(bt->infra, bt->infra_misc_offset,
|
||||
bt->conn_bt_cvsd_mask, 0);
|
||||
bt->conn_bt_cvsd_mask, bt->conn_bt_cvsd_mask);
|
||||
}
|
||||
|
||||
static void mtk_btcvsd_snd_set_state(struct mtk_btcvsd_snd *bt,
|
||||
|
|
|
@ -300,6 +300,18 @@ int rsnd_runtime_channel_after_ctu_with_params(struct rsnd_dai_stream *io,
|
|||
return chan;
|
||||
}
|
||||
|
||||
int rsnd_channel_normalization(int chan)
|
||||
{
|
||||
if ((chan > 8) || (chan < 0))
|
||||
return 0;
|
||||
|
||||
/* TDM Extend Mode needs 8ch */
|
||||
if (chan == 6)
|
||||
chan = 8;
|
||||
|
||||
return chan;
|
||||
}
|
||||
|
||||
int rsnd_runtime_channel_for_ssi_with_params(struct rsnd_dai_stream *io,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
|
@ -312,11 +324,7 @@ int rsnd_runtime_channel_for_ssi_with_params(struct rsnd_dai_stream *io,
|
|||
if (rsnd_runtime_is_multi_ssi(io))
|
||||
chan /= rsnd_rdai_ssi_lane_get(rdai);
|
||||
|
||||
/* TDM Extend Mode needs 8ch */
|
||||
if (chan == 6)
|
||||
chan = 8;
|
||||
|
||||
return chan;
|
||||
return rsnd_channel_normalization(chan);
|
||||
}
|
||||
|
||||
int rsnd_runtime_is_multi_ssi(struct rsnd_dai_stream *io)
|
||||
|
|
|
@ -446,6 +446,7 @@ void rsnd_parse_connect_common(struct rsnd_dai *rdai,
|
|||
struct device_node *playback,
|
||||
struct device_node *capture);
|
||||
|
||||
int rsnd_channel_normalization(int chan);
|
||||
#define rsnd_runtime_channel_original(io) \
|
||||
rsnd_runtime_channel_original_with_params(io, NULL)
|
||||
int rsnd_runtime_channel_original_with_params(struct rsnd_dai_stream *io,
|
||||
|
|
|
@ -303,6 +303,8 @@ static int rsnd_ssi_master_clk_start(struct rsnd_mod *mod,
|
|||
if (rsnd_runtime_is_tdm_split(io))
|
||||
chan = rsnd_io_converted_chan(io);
|
||||
|
||||
chan = rsnd_channel_normalization(chan);
|
||||
|
||||
main_rate = rsnd_ssi_clk_query(rdai, rate, chan, &idx);
|
||||
if (!main_rate) {
|
||||
dev_err(dev, "unsupported clock rate\n");
|
||||
|
|
|
@ -883,6 +883,7 @@ static int dapm_create_or_share_kcontrol(struct snd_soc_dapm_widget *w,
|
|||
case snd_soc_dapm_switch:
|
||||
case snd_soc_dapm_mixer:
|
||||
case snd_soc_dapm_pga:
|
||||
case snd_soc_dapm_effect:
|
||||
case snd_soc_dapm_out_drv:
|
||||
wname_in_long_name = true;
|
||||
kcname_in_long_name = true;
|
||||
|
@ -2370,6 +2371,7 @@ static ssize_t dapm_widget_show_component(struct snd_soc_component *cmpnt,
|
|||
case snd_soc_dapm_dac:
|
||||
case snd_soc_dapm_adc:
|
||||
case snd_soc_dapm_pga:
|
||||
case snd_soc_dapm_effect:
|
||||
case snd_soc_dapm_out_drv:
|
||||
case snd_soc_dapm_mixer:
|
||||
case snd_soc_dapm_mixer_named_ctl:
|
||||
|
@ -3197,6 +3199,7 @@ int snd_soc_dapm_new_widgets(struct snd_soc_card *card)
|
|||
dapm_new_mux(w);
|
||||
break;
|
||||
case snd_soc_dapm_pga:
|
||||
case snd_soc_dapm_effect:
|
||||
case snd_soc_dapm_out_drv:
|
||||
dapm_new_pga(w);
|
||||
break;
|
||||
|
|
|
@ -43,8 +43,8 @@ static bool snd_soc_dai_stream_valid(struct snd_soc_dai *dai, int stream)
|
|||
else
|
||||
codec_stream = &dai->driver->capture;
|
||||
|
||||
/* If the codec specifies any rate at all, it supports the stream. */
|
||||
return codec_stream->rates;
|
||||
/* If the codec specifies any channels at all, it supports the stream */
|
||||
return codec_stream->channels_min;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1033,6 +1033,9 @@ interface_err:
|
|||
|
||||
codec_err:
|
||||
for_each_rtd_codec_dai_rollback(rtd, i, codec_dai) {
|
||||
if (!snd_soc_dai_stream_valid(codec_dai, substream->stream))
|
||||
continue;
|
||||
|
||||
if (codec_dai->driver->ops->hw_free)
|
||||
codec_dai->driver->ops->hw_free(substream, codec_dai);
|
||||
codec_dai->rate = 0;
|
||||
|
@ -1090,6 +1093,9 @@ static int soc_pcm_hw_free(struct snd_pcm_substream *substream)
|
|||
|
||||
/* now free hw params for the DAIs */
|
||||
for_each_rtd_codec_dai(rtd, i, codec_dai) {
|
||||
if (!snd_soc_dai_stream_valid(codec_dai, substream->stream))
|
||||
continue;
|
||||
|
||||
if (codec_dai->driver->ops->hw_free)
|
||||
codec_dai->driver->ops->hw_free(substream, codec_dai);
|
||||
}
|
||||
|
|
|
@ -845,8 +845,9 @@ static int stm32_i2s_parse_dt(struct platform_device *pdev,
|
|||
/* Get irqs */
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq < 0) {
|
||||
if (irq != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev, "no irq for node %s\n", pdev->name);
|
||||
return -ENOENT;
|
||||
return irq;
|
||||
}
|
||||
|
||||
ret = devm_request_irq(&pdev->dev, irq, stm32_i2s_isr, IRQF_ONESHOT,
|
||||
|
|
Loading…
Reference in New Issue