Merge existing fixes from asoc/for-5.17 into new branch
This commit is contained in:
Коммит
6cbff4b3a1
|
@ -1667,6 +1667,8 @@ static int cpcap_codec_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct device_node *codec_node =
|
||||
of_get_child_by_name(pdev->dev.parent->of_node, "audio-codec");
|
||||
if (!codec_node)
|
||||
return -ENODEV;
|
||||
|
||||
pdev->dev.of_node = codec_node;
|
||||
|
||||
|
|
|
@ -64,7 +64,8 @@ static int speaker_gain_control_put(struct snd_kcontrol *kcontrol,
|
|||
struct snd_soc_component *c = snd_soc_kcontrol_component(kcontrol);
|
||||
struct max9759 *priv = snd_soc_component_get_drvdata(c);
|
||||
|
||||
if (ucontrol->value.integer.value[0] > 3)
|
||||
if (ucontrol->value.integer.value[0] < 0 ||
|
||||
ucontrol->value.integer.value[0] > 3)
|
||||
return -EINVAL;
|
||||
|
||||
priv->gain = ucontrol->value.integer.value[0];
|
||||
|
|
|
@ -28,6 +28,30 @@ static const struct snd_soc_ops simple_ops = {
|
|||
.hw_params = asoc_simple_hw_params,
|
||||
};
|
||||
|
||||
static int asoc_simple_parse_platform(struct device_node *node,
|
||||
struct snd_soc_dai_link_component *dlc)
|
||||
{
|
||||
struct of_phandle_args args;
|
||||
int ret;
|
||||
|
||||
if (!node)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Get node via "sound-dai = <&phandle port>"
|
||||
* it will be used as xxx_of_node on soc_bind_dai_link()
|
||||
*/
|
||||
ret = of_parse_phandle_with_args(node, DAI, CELL, 0, &args);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* dai_name is not required and may not exist for plat component */
|
||||
|
||||
dlc->of_node = args.np;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int asoc_simple_parse_dai(struct device_node *node,
|
||||
struct snd_soc_dai_link_component *dlc,
|
||||
int *is_single_link)
|
||||
|
@ -289,7 +313,7 @@ static int simple_dai_link_of(struct asoc_simple_priv *priv,
|
|||
if (ret < 0)
|
||||
goto dai_link_of_err;
|
||||
|
||||
ret = asoc_simple_parse_dai(plat, platforms, NULL);
|
||||
ret = asoc_simple_parse_platform(plat, platforms);
|
||||
if (ret < 0)
|
||||
goto dai_link_of_err;
|
||||
|
||||
|
|
|
@ -216,7 +216,7 @@ config SND_SOC_MT8195_MT6359_RT1019_RT5682
|
|||
|
||||
config SND_SOC_MT8195_MT6359_RT1011_RT5682
|
||||
tristate "ASoC Audio driver for MT8195 with MT6359 RT1011 RT5682 codec"
|
||||
depends on I2C
|
||||
depends on I2C && GPIOLIB
|
||||
depends on SND_SOC_MT8195 && MTK_PMIC_WRAP
|
||||
select SND_SOC_MT6359
|
||||
select SND_SOC_RT1011
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#define XLNX_AUD_XFER_COUNT 0x28
|
||||
#define XLNX_AUD_CH_STS_START 0x2C
|
||||
#define XLNX_BYTES_PER_CH 0x44
|
||||
#define XLNX_AUD_ALIGN_BYTES 64
|
||||
|
||||
#define AUD_STS_IOC_IRQ_MASK BIT(31)
|
||||
#define AUD_STS_CH_STS_MASK BIT(29)
|
||||
|
@ -368,12 +369,32 @@ static int xlnx_formatter_pcm_open(struct snd_soc_component *component,
|
|||
snd_soc_set_runtime_hwparams(substream, &xlnx_pcm_hardware);
|
||||
runtime->private_data = stream_data;
|
||||
|
||||
/* Resize the period size divisible by 64 */
|
||||
/* Resize the period bytes as divisible by 64 */
|
||||
err = snd_pcm_hw_constraint_step(runtime, 0,
|
||||
SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 64);
|
||||
SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
|
||||
XLNX_AUD_ALIGN_BYTES);
|
||||
if (err) {
|
||||
dev_err(component->dev,
|
||||
"unable to set constraint on period bytes\n");
|
||||
"Unable to set constraint on period bytes\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Resize the buffer bytes as divisible by 64 */
|
||||
err = snd_pcm_hw_constraint_step(runtime, 0,
|
||||
SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
|
||||
XLNX_AUD_ALIGN_BYTES);
|
||||
if (err) {
|
||||
dev_err(component->dev,
|
||||
"Unable to set constraint on buffer bytes\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Set periods as integer multiple */
|
||||
err = snd_pcm_hw_constraint_integer(runtime,
|
||||
SNDRV_PCM_HW_PARAM_PERIODS);
|
||||
if (err < 0) {
|
||||
dev_err(component->dev,
|
||||
"Unable to set constraint on periods to be integer\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче