Commit 381cce59 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'sound-4.13-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
 "Three regression fixes that should be addressed before the final
  release: a missing mutex call in OSS PCM emulation ioctl, ASoC rt5670
  headset detection breakage, and a regression in simple-card parser
  code"

* tag 'sound-4.13-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ASoC: simple_card_utils: fix fallback when "label" property isn't present
  ALSA: pcm: Fix power lock unbalance via OSS emulation
  ASoC: rt5670: Fix GPIO headset detection regression
parents bba2a5b8 83b033bd
...@@ -3064,6 +3064,7 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream, ...@@ -3064,6 +3064,7 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream,
{ {
snd_pcm_uframes_t *frames = arg; snd_pcm_uframes_t *frames = arg;
snd_pcm_sframes_t result; snd_pcm_sframes_t result;
int err;
switch (cmd) { switch (cmd) {
case SNDRV_PCM_IOCTL_FORWARD: case SNDRV_PCM_IOCTL_FORWARD:
...@@ -3083,7 +3084,10 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream, ...@@ -3083,7 +3084,10 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream,
case SNDRV_PCM_IOCTL_START: case SNDRV_PCM_IOCTL_START:
return snd_pcm_start_lock_irq(substream); return snd_pcm_start_lock_irq(substream);
case SNDRV_PCM_IOCTL_DRAIN: case SNDRV_PCM_IOCTL_DRAIN:
return snd_pcm_drain(substream, NULL); snd_power_lock(substream->pcm->card);
err = snd_pcm_drain(substream, NULL);
snd_power_unlock(substream->pcm->card);
return err;
case SNDRV_PCM_IOCTL_DROP: case SNDRV_PCM_IOCTL_DROP:
return snd_pcm_drop(substream); return snd_pcm_drop(substream);
case SNDRV_PCM_IOCTL_DELAY: case SNDRV_PCM_IOCTL_DELAY:
......
...@@ -567,7 +567,7 @@ int rt5670_set_jack_detect(struct snd_soc_codec *codec, ...@@ -567,7 +567,7 @@ int rt5670_set_jack_detect(struct snd_soc_codec *codec,
rt5670->jack = jack; rt5670->jack = jack;
rt5670->hp_gpio.gpiod_dev = codec->dev; rt5670->hp_gpio.gpiod_dev = codec->dev;
rt5670->hp_gpio.name = "headphone detect"; rt5670->hp_gpio.name = "headset";
rt5670->hp_gpio.report = SND_JACK_HEADSET | rt5670->hp_gpio.report = SND_JACK_HEADSET |
SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_BTN_2; SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_BTN_2;
rt5670->hp_gpio.debounce_time = 150; rt5670->hp_gpio.debounce_time = 150;
......
...@@ -132,7 +132,7 @@ int asoc_simple_card_parse_card_name(struct snd_soc_card *card, ...@@ -132,7 +132,7 @@ int asoc_simple_card_parse_card_name(struct snd_soc_card *card,
/* Parse the card name from DT */ /* Parse the card name from DT */
ret = snd_soc_of_parse_card_name(card, "label"); ret = snd_soc_of_parse_card_name(card, "label");
if (ret < 0) { if (ret < 0 || !card->name) {
char prop[128]; char prop[128];
snprintf(prop, sizeof(prop), "%sname", prefix); snprintf(prop, sizeof(prop), "%sname", prefix);
......
...@@ -184,6 +184,13 @@ static int cht_aif1_hw_params(struct snd_pcm_substream *substream, ...@@ -184,6 +184,13 @@ static int cht_aif1_hw_params(struct snd_pcm_substream *substream,
return 0; return 0;
} }
static const struct acpi_gpio_params headset_gpios = { 0, 0, false };
static const struct acpi_gpio_mapping cht_rt5672_gpios[] = {
{ "headset-gpios", &headset_gpios, 1 },
{},
};
static int cht_codec_init(struct snd_soc_pcm_runtime *runtime) static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
{ {
int ret; int ret;
...@@ -191,6 +198,9 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime) ...@@ -191,6 +198,9 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_codec *codec = codec_dai->codec;
struct cht_mc_private *ctx = snd_soc_card_get_drvdata(runtime->card); struct cht_mc_private *ctx = snd_soc_card_get_drvdata(runtime->card);
if (devm_acpi_dev_add_driver_gpios(codec->dev, cht_rt5672_gpios))
dev_warn(runtime->dev, "Unable to add GPIO mapping table\n");
/* TDM 4 slots 24 bit, set Rx & Tx bitmask to 4 active slots */ /* TDM 4 slots 24 bit, set Rx & Tx bitmask to 4 active slots */
ret = snd_soc_dai_set_tdm_slot(codec_dai, 0xF, 0xF, 4, 24); ret = snd_soc_dai_set_tdm_slot(codec_dai, 0xF, 0xF, 4, 24);
if (ret < 0) { if (ret < 0) {
......
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