All of lore.kernel.org
 help / color / mirror / Atom feed
* FAILED: patch "[PATCH] ALSA: usb-audio: Add clock validity quirk for Denon" failed to apply to 5.4-stable tree
@ 2020-02-17 11:50 gregkh
  2020-02-17 13:53 ` Takashi Iwai
  0 siblings, 1 reply; 3+ messages in thread
From: gregkh @ 2020-02-17 11:50 UTC (permalink / raw)
  To: alexander, stable, tiwai, toszlanyi; +Cc: stable


The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm
tree, then please email the backport, including the original git commit
id to <stable@vger.kernel.org>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 9f35a31283775e6f6af73fb2c95c686a4c0acac7 Mon Sep 17 00:00:00 2001
From: Alexander Tsoy <alexander@tsoy.me>
Date: Thu, 13 Feb 2020 02:54:50 +0300
Subject: [PATCH] ALSA: usb-audio: Add clock validity quirk for Denon
 MC7000/MCX8000

It should be safe to ignore clock validity check result if the following
conditions are met:
 - only one single sample rate is supported;
 - the terminal is directly connected to the clock source;
 - the clock type is internal.

This is to deal with some Denon DJ controllers that always reports that
clock is invalid.

Tested-by: Tobias Oszlanyi <toszlanyi@yahoo.de>
Signed-off-by: Alexander Tsoy <alexander@tsoy.me>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20200212235450.697348-1-alexander@tsoy.me
Signed-off-by: Takashi Iwai <tiwai@suse.de>

diff --git a/sound/usb/clock.c b/sound/usb/clock.c
index 018b1ecb5404..a48313dfa967 100644
--- a/sound/usb/clock.c
+++ b/sound/usb/clock.c
@@ -151,8 +151,34 @@ static int uac_clock_selector_set_val(struct snd_usb_audio *chip, int selector_i
 	return ret;
 }
 
+/*
+ * Assume the clock is valid if clock source supports only one single sample
+ * rate, the terminal is connected directly to it (there is no clock selector)
+ * and clock type is internal. This is to deal with some Denon DJ controllers
+ * that always reports that clock is invalid.
+ */
+static bool uac_clock_source_is_valid_quirk(struct snd_usb_audio *chip,
+					    struct audioformat *fmt,
+					    int source_id)
+{
+	if (fmt->protocol == UAC_VERSION_2) {
+		struct uac_clock_source_descriptor *cs_desc =
+			snd_usb_find_clock_source(chip->ctrl_intf, source_id);
+
+		if (!cs_desc)
+			return false;
+
+		return (fmt->nr_rates == 1 &&
+			(fmt->clock & 0xff) == cs_desc->bClockID &&
+			(cs_desc->bmAttributes & 0x3) !=
+				UAC_CLOCK_SOURCE_TYPE_EXT);
+	}
+
+	return false;
+}
+
 static bool uac_clock_source_is_valid(struct snd_usb_audio *chip,
-				      int protocol,
+				      struct audioformat *fmt,
 				      int source_id)
 {
 	int err;
@@ -160,7 +186,7 @@ static bool uac_clock_source_is_valid(struct snd_usb_audio *chip,
 	struct usb_device *dev = chip->dev;
 	u32 bmControls;
 
-	if (protocol == UAC_VERSION_3) {
+	if (fmt->protocol == UAC_VERSION_3) {
 		struct uac3_clock_source_descriptor *cs_desc =
 			snd_usb_find_clock_source_v3(chip->ctrl_intf, source_id);
 
@@ -194,10 +220,14 @@ static bool uac_clock_source_is_valid(struct snd_usb_audio *chip,
 		return false;
 	}
 
-	return data ? true :  false;
+	if (data)
+		return true;
+	else
+		return uac_clock_source_is_valid_quirk(chip, fmt, source_id);
 }
 
-static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
+static int __uac_clock_find_source(struct snd_usb_audio *chip,
+				   struct audioformat *fmt, int entity_id,
 				   unsigned long *visited, bool validate)
 {
 	struct uac_clock_source_descriptor *source;
@@ -217,7 +247,7 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
 	source = snd_usb_find_clock_source(chip->ctrl_intf, entity_id);
 	if (source) {
 		entity_id = source->bClockID;
-		if (validate && !uac_clock_source_is_valid(chip, UAC_VERSION_2,
+		if (validate && !uac_clock_source_is_valid(chip, fmt,
 								entity_id)) {
 			usb_audio_err(chip,
 				"clock source %d is not valid, cannot use\n",
@@ -248,8 +278,9 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
 		}
 
 		cur = ret;
-		ret = __uac_clock_find_source(chip, selector->baCSourceID[ret - 1],
-					       visited, validate);
+		ret = __uac_clock_find_source(chip, fmt,
+					      selector->baCSourceID[ret - 1],
+					      visited, validate);
 		if (!validate || ret > 0 || !chip->autoclock)
 			return ret;
 
@@ -260,8 +291,9 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
 			if (i == cur)
 				continue;
 
-			ret = __uac_clock_find_source(chip, selector->baCSourceID[i - 1],
-				visited, true);
+			ret = __uac_clock_find_source(chip, fmt,
+						      selector->baCSourceID[i - 1],
+						      visited, true);
 			if (ret < 0)
 				continue;
 
@@ -281,14 +313,16 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
 	/* FIXME: multipliers only act as pass-thru element for now */
 	multiplier = snd_usb_find_clock_multiplier(chip->ctrl_intf, entity_id);
 	if (multiplier)
-		return __uac_clock_find_source(chip, multiplier->bCSourceID,
-						visited, validate);
+		return __uac_clock_find_source(chip, fmt,
+					       multiplier->bCSourceID,
+					       visited, validate);
 
 	return -EINVAL;
 }
 
-static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
-				   unsigned long *visited, bool validate)
+static int __uac3_clock_find_source(struct snd_usb_audio *chip,
+				    struct audioformat *fmt, int entity_id,
+				    unsigned long *visited, bool validate)
 {
 	struct uac3_clock_source_descriptor *source;
 	struct uac3_clock_selector_descriptor *selector;
@@ -307,7 +341,7 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
 	source = snd_usb_find_clock_source_v3(chip->ctrl_intf, entity_id);
 	if (source) {
 		entity_id = source->bClockID;
-		if (validate && !uac_clock_source_is_valid(chip, UAC_VERSION_3,
+		if (validate && !uac_clock_source_is_valid(chip, fmt,
 								entity_id)) {
 			usb_audio_err(chip,
 				"clock source %d is not valid, cannot use\n",
@@ -338,7 +372,8 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
 		}
 
 		cur = ret;
-		ret = __uac3_clock_find_source(chip, selector->baCSourceID[ret - 1],
+		ret = __uac3_clock_find_source(chip, fmt,
+					       selector->baCSourceID[ret - 1],
 					       visited, validate);
 		if (!validate || ret > 0 || !chip->autoclock)
 			return ret;
@@ -350,8 +385,9 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
 			if (i == cur)
 				continue;
 
-			ret = __uac3_clock_find_source(chip, selector->baCSourceID[i - 1],
-				visited, true);
+			ret = __uac3_clock_find_source(chip, fmt,
+						       selector->baCSourceID[i - 1],
+						       visited, true);
 			if (ret < 0)
 				continue;
 
@@ -372,7 +408,8 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
 	multiplier = snd_usb_find_clock_multiplier_v3(chip->ctrl_intf,
 						      entity_id);
 	if (multiplier)
-		return __uac3_clock_find_source(chip, multiplier->bCSourceID,
+		return __uac3_clock_find_source(chip, fmt,
+						multiplier->bCSourceID,
 						visited, validate);
 
 	return -EINVAL;
@@ -389,18 +426,18 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
  *
  * Returns the clock source UnitID (>=0) on success, or an error.
  */
-int snd_usb_clock_find_source(struct snd_usb_audio *chip, int protocol,
-			      int entity_id, bool validate)
+int snd_usb_clock_find_source(struct snd_usb_audio *chip,
+			      struct audioformat *fmt, bool validate)
 {
 	DECLARE_BITMAP(visited, 256);
 	memset(visited, 0, sizeof(visited));
 
-	switch (protocol) {
+	switch (fmt->protocol) {
 	case UAC_VERSION_2:
-		return __uac_clock_find_source(chip, entity_id, visited,
+		return __uac_clock_find_source(chip, fmt, fmt->clock, visited,
 					       validate);
 	case UAC_VERSION_3:
-		return __uac3_clock_find_source(chip, entity_id, visited,
+		return __uac3_clock_find_source(chip, fmt, fmt->clock, visited,
 					       validate);
 	default:
 		return -EINVAL;
@@ -501,8 +538,7 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
 	 * automatic clock selection if the current clock is not
 	 * valid.
 	 */
-	clock = snd_usb_clock_find_source(chip, fmt->protocol,
-					  fmt->clock, true);
+	clock = snd_usb_clock_find_source(chip, fmt, true);
 	if (clock < 0) {
 		/* We did not find a valid clock, but that might be
 		 * because the current sample rate does not match an
@@ -510,8 +546,7 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
 		 * and we will do another validation after setting the
 		 * rate.
 		 */
-		clock = snd_usb_clock_find_source(chip, fmt->protocol,
-						  fmt->clock, false);
+		clock = snd_usb_clock_find_source(chip, fmt, false);
 		if (clock < 0)
 			return clock;
 	}
@@ -577,7 +612,7 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
 
 validation:
 	/* validate clock after rate change */
-	if (!uac_clock_source_is_valid(chip, fmt->protocol, clock))
+	if (!uac_clock_source_is_valid(chip, fmt, clock))
 		return -ENXIO;
 	return 0;
 }
diff --git a/sound/usb/clock.h b/sound/usb/clock.h
index 076e31b79ee0..68df0fbe09d0 100644
--- a/sound/usb/clock.h
+++ b/sound/usb/clock.h
@@ -6,7 +6,7 @@ int snd_usb_init_sample_rate(struct snd_usb_audio *chip, int iface,
 			     struct usb_host_interface *alts,
 			     struct audioformat *fmt, int rate);
 
-int snd_usb_clock_find_source(struct snd_usb_audio *chip, int protocol,
-			     int entity_id, bool validate);
+int snd_usb_clock_find_source(struct snd_usb_audio *chip,
+			      struct audioformat *fmt, bool validate);
 
 #endif /* __USBAUDIO_CLOCK_H */
diff --git a/sound/usb/format.c b/sound/usb/format.c
index 50cb183958bf..9f5cb4ed3a0c 100644
--- a/sound/usb/format.c
+++ b/sound/usb/format.c
@@ -336,8 +336,7 @@ static int parse_audio_format_rates_v2v3(struct snd_usb_audio *chip,
 	struct usb_device *dev = chip->dev;
 	unsigned char tmp[2], *data;
 	int nr_triplets, data_size, ret = 0, ret_l6;
-	int clock = snd_usb_clock_find_source(chip, fp->protocol,
-					      fp->clock, false);
+	int clock = snd_usb_clock_find_source(chip, fp, false);
 
 	if (clock < 0) {
 		dev_err(&dev->dev,


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: FAILED: patch "[PATCH] ALSA: usb-audio: Add clock validity quirk for Denon" failed to apply to 5.4-stable tree
  2020-02-17 11:50 FAILED: patch "[PATCH] ALSA: usb-audio: Add clock validity quirk for Denon" failed to apply to 5.4-stable tree gregkh
@ 2020-02-17 13:53 ` Takashi Iwai
  2020-02-17 14:06   ` Greg KH
  0 siblings, 1 reply; 3+ messages in thread
From: Takashi Iwai @ 2020-02-17 13:53 UTC (permalink / raw)
  To: gregkh; +Cc: alexander, stable, toszlanyi

On Mon, 17 Feb 2020 12:50:17 +0100,
<gregkh@linuxfoundation.org> wrote:
> 
> 
> The patch below does not apply to the 5.4-stable tree.
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git commit
> id to <stable@vger.kernel.org>.

Could you cherry-pick the commit
1d4961d9eb1aaa498dfb44779b7e4b95d79112d0
    ALSA: usb-audio: sound: usb: usb true/false for bool return type

as prerequisite?  This is just a bool value replacement that conflicts
with the given patch.


thanks,

Takashi

> 
> thanks,
> 
> greg k-h
> 
> ------------------ original commit in Linus's tree ------------------
> 
> >From 9f35a31283775e6f6af73fb2c95c686a4c0acac7 Mon Sep 17 00:00:00 2001
> From: Alexander Tsoy <alexander@tsoy.me>
> Date: Thu, 13 Feb 2020 02:54:50 +0300
> Subject: [PATCH] ALSA: usb-audio: Add clock validity quirk for Denon
>  MC7000/MCX8000
> 
> It should be safe to ignore clock validity check result if the following
> conditions are met:
>  - only one single sample rate is supported;
>  - the terminal is directly connected to the clock source;
>  - the clock type is internal.
> 
> This is to deal with some Denon DJ controllers that always reports that
> clock is invalid.
> 
> Tested-by: Tobias Oszlanyi <toszlanyi@yahoo.de>
> Signed-off-by: Alexander Tsoy <alexander@tsoy.me>
> Cc: <stable@vger.kernel.org>
> Link: https://lore.kernel.org/r/20200212235450.697348-1-alexander@tsoy.me
> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> 
> diff --git a/sound/usb/clock.c b/sound/usb/clock.c
> index 018b1ecb5404..a48313dfa967 100644
> --- a/sound/usb/clock.c
> +++ b/sound/usb/clock.c
> @@ -151,8 +151,34 @@ static int uac_clock_selector_set_val(struct snd_usb_audio *chip, int selector_i
>  	return ret;
>  }
>  
> +/*
> + * Assume the clock is valid if clock source supports only one single sample
> + * rate, the terminal is connected directly to it (there is no clock selector)
> + * and clock type is internal. This is to deal with some Denon DJ controllers
> + * that always reports that clock is invalid.
> + */
> +static bool uac_clock_source_is_valid_quirk(struct snd_usb_audio *chip,
> +					    struct audioformat *fmt,
> +					    int source_id)
> +{
> +	if (fmt->protocol == UAC_VERSION_2) {
> +		struct uac_clock_source_descriptor *cs_desc =
> +			snd_usb_find_clock_source(chip->ctrl_intf, source_id);
> +
> +		if (!cs_desc)
> +			return false;
> +
> +		return (fmt->nr_rates == 1 &&
> +			(fmt->clock & 0xff) == cs_desc->bClockID &&
> +			(cs_desc->bmAttributes & 0x3) !=
> +				UAC_CLOCK_SOURCE_TYPE_EXT);
> +	}
> +
> +	return false;
> +}
> +
>  static bool uac_clock_source_is_valid(struct snd_usb_audio *chip,
> -				      int protocol,
> +				      struct audioformat *fmt,
>  				      int source_id)
>  {
>  	int err;
> @@ -160,7 +186,7 @@ static bool uac_clock_source_is_valid(struct snd_usb_audio *chip,
>  	struct usb_device *dev = chip->dev;
>  	u32 bmControls;
>  
> -	if (protocol == UAC_VERSION_3) {
> +	if (fmt->protocol == UAC_VERSION_3) {
>  		struct uac3_clock_source_descriptor *cs_desc =
>  			snd_usb_find_clock_source_v3(chip->ctrl_intf, source_id);
>  
> @@ -194,10 +220,14 @@ static bool uac_clock_source_is_valid(struct snd_usb_audio *chip,
>  		return false;
>  	}
>  
> -	return data ? true :  false;
> +	if (data)
> +		return true;
> +	else
> +		return uac_clock_source_is_valid_quirk(chip, fmt, source_id);
>  }
>  
> -static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
> +static int __uac_clock_find_source(struct snd_usb_audio *chip,
> +				   struct audioformat *fmt, int entity_id,
>  				   unsigned long *visited, bool validate)
>  {
>  	struct uac_clock_source_descriptor *source;
> @@ -217,7 +247,7 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
>  	source = snd_usb_find_clock_source(chip->ctrl_intf, entity_id);
>  	if (source) {
>  		entity_id = source->bClockID;
> -		if (validate && !uac_clock_source_is_valid(chip, UAC_VERSION_2,
> +		if (validate && !uac_clock_source_is_valid(chip, fmt,
>  								entity_id)) {
>  			usb_audio_err(chip,
>  				"clock source %d is not valid, cannot use\n",
> @@ -248,8 +278,9 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
>  		}
>  
>  		cur = ret;
> -		ret = __uac_clock_find_source(chip, selector->baCSourceID[ret - 1],
> -					       visited, validate);
> +		ret = __uac_clock_find_source(chip, fmt,
> +					      selector->baCSourceID[ret - 1],
> +					      visited, validate);
>  		if (!validate || ret > 0 || !chip->autoclock)
>  			return ret;
>  
> @@ -260,8 +291,9 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
>  			if (i == cur)
>  				continue;
>  
> -			ret = __uac_clock_find_source(chip, selector->baCSourceID[i - 1],
> -				visited, true);
> +			ret = __uac_clock_find_source(chip, fmt,
> +						      selector->baCSourceID[i - 1],
> +						      visited, true);
>  			if (ret < 0)
>  				continue;
>  
> @@ -281,14 +313,16 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, int entity_id,
>  	/* FIXME: multipliers only act as pass-thru element for now */
>  	multiplier = snd_usb_find_clock_multiplier(chip->ctrl_intf, entity_id);
>  	if (multiplier)
> -		return __uac_clock_find_source(chip, multiplier->bCSourceID,
> -						visited, validate);
> +		return __uac_clock_find_source(chip, fmt,
> +					       multiplier->bCSourceID,
> +					       visited, validate);
>  
>  	return -EINVAL;
>  }
>  
> -static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
> -				   unsigned long *visited, bool validate)
> +static int __uac3_clock_find_source(struct snd_usb_audio *chip,
> +				    struct audioformat *fmt, int entity_id,
> +				    unsigned long *visited, bool validate)
>  {
>  	struct uac3_clock_source_descriptor *source;
>  	struct uac3_clock_selector_descriptor *selector;
> @@ -307,7 +341,7 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
>  	source = snd_usb_find_clock_source_v3(chip->ctrl_intf, entity_id);
>  	if (source) {
>  		entity_id = source->bClockID;
> -		if (validate && !uac_clock_source_is_valid(chip, UAC_VERSION_3,
> +		if (validate && !uac_clock_source_is_valid(chip, fmt,
>  								entity_id)) {
>  			usb_audio_err(chip,
>  				"clock source %d is not valid, cannot use\n",
> @@ -338,7 +372,8 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
>  		}
>  
>  		cur = ret;
> -		ret = __uac3_clock_find_source(chip, selector->baCSourceID[ret - 1],
> +		ret = __uac3_clock_find_source(chip, fmt,
> +					       selector->baCSourceID[ret - 1],
>  					       visited, validate);
>  		if (!validate || ret > 0 || !chip->autoclock)
>  			return ret;
> @@ -350,8 +385,9 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
>  			if (i == cur)
>  				continue;
>  
> -			ret = __uac3_clock_find_source(chip, selector->baCSourceID[i - 1],
> -				visited, true);
> +			ret = __uac3_clock_find_source(chip, fmt,
> +						       selector->baCSourceID[i - 1],
> +						       visited, true);
>  			if (ret < 0)
>  				continue;
>  
> @@ -372,7 +408,8 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
>  	multiplier = snd_usb_find_clock_multiplier_v3(chip->ctrl_intf,
>  						      entity_id);
>  	if (multiplier)
> -		return __uac3_clock_find_source(chip, multiplier->bCSourceID,
> +		return __uac3_clock_find_source(chip, fmt,
> +						multiplier->bCSourceID,
>  						visited, validate);
>  
>  	return -EINVAL;
> @@ -389,18 +426,18 @@ static int __uac3_clock_find_source(struct snd_usb_audio *chip, int entity_id,
>   *
>   * Returns the clock source UnitID (>=0) on success, or an error.
>   */
> -int snd_usb_clock_find_source(struct snd_usb_audio *chip, int protocol,
> -			      int entity_id, bool validate)
> +int snd_usb_clock_find_source(struct snd_usb_audio *chip,
> +			      struct audioformat *fmt, bool validate)
>  {
>  	DECLARE_BITMAP(visited, 256);
>  	memset(visited, 0, sizeof(visited));
>  
> -	switch (protocol) {
> +	switch (fmt->protocol) {
>  	case UAC_VERSION_2:
> -		return __uac_clock_find_source(chip, entity_id, visited,
> +		return __uac_clock_find_source(chip, fmt, fmt->clock, visited,
>  					       validate);
>  	case UAC_VERSION_3:
> -		return __uac3_clock_find_source(chip, entity_id, visited,
> +		return __uac3_clock_find_source(chip, fmt, fmt->clock, visited,
>  					       validate);
>  	default:
>  		return -EINVAL;
> @@ -501,8 +538,7 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
>  	 * automatic clock selection if the current clock is not
>  	 * valid.
>  	 */
> -	clock = snd_usb_clock_find_source(chip, fmt->protocol,
> -					  fmt->clock, true);
> +	clock = snd_usb_clock_find_source(chip, fmt, true);
>  	if (clock < 0) {
>  		/* We did not find a valid clock, but that might be
>  		 * because the current sample rate does not match an
> @@ -510,8 +546,7 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
>  		 * and we will do another validation after setting the
>  		 * rate.
>  		 */
> -		clock = snd_usb_clock_find_source(chip, fmt->protocol,
> -						  fmt->clock, false);
> +		clock = snd_usb_clock_find_source(chip, fmt, false);
>  		if (clock < 0)
>  			return clock;
>  	}
> @@ -577,7 +612,7 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
>  
>  validation:
>  	/* validate clock after rate change */
> -	if (!uac_clock_source_is_valid(chip, fmt->protocol, clock))
> +	if (!uac_clock_source_is_valid(chip, fmt, clock))
>  		return -ENXIO;
>  	return 0;
>  }
> diff --git a/sound/usb/clock.h b/sound/usb/clock.h
> index 076e31b79ee0..68df0fbe09d0 100644
> --- a/sound/usb/clock.h
> +++ b/sound/usb/clock.h
> @@ -6,7 +6,7 @@ int snd_usb_init_sample_rate(struct snd_usb_audio *chip, int iface,
>  			     struct usb_host_interface *alts,
>  			     struct audioformat *fmt, int rate);
>  
> -int snd_usb_clock_find_source(struct snd_usb_audio *chip, int protocol,
> -			     int entity_id, bool validate);
> +int snd_usb_clock_find_source(struct snd_usb_audio *chip,
> +			      struct audioformat *fmt, bool validate);
>  
>  #endif /* __USBAUDIO_CLOCK_H */
> diff --git a/sound/usb/format.c b/sound/usb/format.c
> index 50cb183958bf..9f5cb4ed3a0c 100644
> --- a/sound/usb/format.c
> +++ b/sound/usb/format.c
> @@ -336,8 +336,7 @@ static int parse_audio_format_rates_v2v3(struct snd_usb_audio *chip,
>  	struct usb_device *dev = chip->dev;
>  	unsigned char tmp[2], *data;
>  	int nr_triplets, data_size, ret = 0, ret_l6;
> -	int clock = snd_usb_clock_find_source(chip, fp->protocol,
> -					      fp->clock, false);
> +	int clock = snd_usb_clock_find_source(chip, fp, false);
>  
>  	if (clock < 0) {
>  		dev_err(&dev->dev,
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: FAILED: patch "[PATCH] ALSA: usb-audio: Add clock validity quirk for Denon" failed to apply to 5.4-stable tree
  2020-02-17 13:53 ` Takashi Iwai
@ 2020-02-17 14:06   ` Greg KH
  0 siblings, 0 replies; 3+ messages in thread
From: Greg KH @ 2020-02-17 14:06 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alexander, stable, toszlanyi

On Mon, Feb 17, 2020 at 02:53:02PM +0100, Takashi Iwai wrote:
> On Mon, 17 Feb 2020 12:50:17 +0100,
> <gregkh@linuxfoundation.org> wrote:
> > 
> > 
> > The patch below does not apply to the 5.4-stable tree.
> > If someone wants it applied there, or to any other stable or longterm
> > tree, then please email the backport, including the original git commit
> > id to <stable@vger.kernel.org>.
> 
> Could you cherry-pick the commit
> 1d4961d9eb1aaa498dfb44779b7e4b95d79112d0
>     ALSA: usb-audio: sound: usb: usb true/false for bool return type
> 
> as prerequisite?  This is just a bool value replacement that conflicts
> with the given patch.

That worked, thanks!

greg k-h

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-02-17 14:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-17 11:50 FAILED: patch "[PATCH] ALSA: usb-audio: Add clock validity quirk for Denon" failed to apply to 5.4-stable tree gregkh
2020-02-17 13:53 ` Takashi Iwai
2020-02-17 14:06   ` Greg KH

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.