mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-25 03:50:24 +09:00
Revert "ALSA: usb-audio: Add new quirk FIXED_RATE for JBL Quantum810 Wireless"
This reverts commitf1a68c6a41which is commitfd28941cffupstream. It breaks the Android kernel abi and can be brought back in the future in an abi-safe way if it is really needed. Bug: 161946584 Change-Id: I28617f5a45e886bbb403d55f1eeedc294c00540d Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -133,7 +133,6 @@ struct snd_usb_endpoint {
|
||||
bool lowlatency_playback; /* low-latency playback mode */
|
||||
bool need_setup; /* (re-)need for hw_params? */
|
||||
bool need_prepare; /* (re-)need for prepare? */
|
||||
bool fixed_rate; /* skip rate setup */
|
||||
|
||||
/* for hw constraints */
|
||||
const struct audioformat *cur_audiofmt;
|
||||
|
||||
@@ -776,8 +776,7 @@ struct snd_usb_endpoint *
|
||||
snd_usb_endpoint_open(struct snd_usb_audio *chip,
|
||||
const struct audioformat *fp,
|
||||
const struct snd_pcm_hw_params *params,
|
||||
bool is_sync_ep,
|
||||
bool fixed_rate)
|
||||
bool is_sync_ep)
|
||||
{
|
||||
struct snd_usb_endpoint *ep;
|
||||
int ep_num = is_sync_ep ? fp->sync_ep : fp->endpoint;
|
||||
@@ -833,7 +832,6 @@ snd_usb_endpoint_open(struct snd_usb_audio *chip,
|
||||
ep->implicit_fb_sync = fp->implicit_fb;
|
||||
ep->need_setup = true;
|
||||
ep->need_prepare = true;
|
||||
ep->fixed_rate = fixed_rate;
|
||||
|
||||
usb_audio_dbg(chip, " channels=%d, rate=%d, format=%s, period_bytes=%d, periods=%d, implicit_fb=%d\n",
|
||||
ep->cur_channels, ep->cur_rate,
|
||||
@@ -1420,13 +1418,11 @@ static int init_sample_rate(struct snd_usb_audio *chip,
|
||||
if (clock && !clock->need_setup)
|
||||
return 0;
|
||||
|
||||
if (!ep->fixed_rate) {
|
||||
err = snd_usb_init_sample_rate(chip, ep->cur_audiofmt, rate);
|
||||
if (err < 0) {
|
||||
if (clock)
|
||||
clock->rate = 0; /* reset rate */
|
||||
return err;
|
||||
}
|
||||
err = snd_usb_init_sample_rate(chip, ep->cur_audiofmt, rate);
|
||||
if (err < 0) {
|
||||
if (clock)
|
||||
clock->rate = 0; /* reset rate */
|
||||
return err;
|
||||
}
|
||||
|
||||
if (clock)
|
||||
|
||||
@@ -14,8 +14,7 @@ struct snd_usb_endpoint *
|
||||
snd_usb_endpoint_open(struct snd_usb_audio *chip,
|
||||
const struct audioformat *fp,
|
||||
const struct snd_pcm_hw_params *params,
|
||||
bool is_sync_ep,
|
||||
bool fixed_rate);
|
||||
bool is_sync_ep);
|
||||
void snd_usb_endpoint_close(struct snd_usb_audio *chip,
|
||||
struct snd_usb_endpoint *ep);
|
||||
int snd_usb_endpoint_set_params(struct snd_usb_audio *chip,
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include "usbaudio.h"
|
||||
#include "card.h"
|
||||
#include "helper.h"
|
||||
#include "pcm.h"
|
||||
#include "implicit.h"
|
||||
|
||||
enum {
|
||||
@@ -456,8 +455,7 @@ const struct audioformat *
|
||||
snd_usb_find_implicit_fb_sync_format(struct snd_usb_audio *chip,
|
||||
const struct audioformat *target,
|
||||
const struct snd_pcm_hw_params *params,
|
||||
int stream,
|
||||
bool *fixed_rate)
|
||||
int stream)
|
||||
{
|
||||
struct snd_usb_substream *subs;
|
||||
const struct audioformat *fp, *sync_fmt = NULL;
|
||||
@@ -485,8 +483,6 @@ snd_usb_find_implicit_fb_sync_format(struct snd_usb_audio *chip,
|
||||
}
|
||||
}
|
||||
|
||||
if (fixed_rate)
|
||||
*fixed_rate = snd_usb_pcm_has_fixed_rate(subs);
|
||||
return sync_fmt;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,6 @@ const struct audioformat *
|
||||
snd_usb_find_implicit_fb_sync_format(struct snd_usb_audio *chip,
|
||||
const struct audioformat *target,
|
||||
const struct snd_pcm_hw_params *params,
|
||||
int stream, bool *fixed_rate);
|
||||
int stream);
|
||||
|
||||
#endif /* __USBAUDIO_IMPLICIT_H */
|
||||
|
||||
@@ -166,31 +166,6 @@ find_substream_format(struct snd_usb_substream *subs,
|
||||
true, subs);
|
||||
}
|
||||
|
||||
bool snd_usb_pcm_has_fixed_rate(struct snd_usb_substream *subs)
|
||||
{
|
||||
const struct audioformat *fp;
|
||||
struct snd_usb_audio *chip = subs->stream->chip;
|
||||
int rate = -1;
|
||||
|
||||
if (!(chip->quirk_flags & QUIRK_FLAG_FIXED_RATE))
|
||||
return false;
|
||||
list_for_each_entry(fp, &subs->fmt_list, list) {
|
||||
if (fp->rates & SNDRV_PCM_RATE_CONTINUOUS)
|
||||
return false;
|
||||
if (fp->nr_rates < 1)
|
||||
continue;
|
||||
if (fp->nr_rates > 1)
|
||||
return false;
|
||||
if (rate < 0) {
|
||||
rate = fp->rate_table[0];
|
||||
continue;
|
||||
}
|
||||
if (rate != fp->rate_table[0])
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static int init_pitch_v1(struct snd_usb_audio *chip, int ep)
|
||||
{
|
||||
struct usb_device *dev = chip->dev;
|
||||
@@ -484,14 +459,12 @@ static int snd_usb_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_usb_audio *chip = subs->stream->chip;
|
||||
const struct audioformat *fmt;
|
||||
const struct audioformat *sync_fmt;
|
||||
bool fixed_rate, sync_fixed_rate;
|
||||
int ret;
|
||||
|
||||
ret = snd_media_start_pipeline(subs);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
fixed_rate = snd_usb_pcm_has_fixed_rate(subs);
|
||||
fmt = find_substream_format(subs, hw_params);
|
||||
if (!fmt) {
|
||||
usb_audio_dbg(chip,
|
||||
@@ -505,8 +478,7 @@ static int snd_usb_hw_params(struct snd_pcm_substream *substream,
|
||||
if (fmt->implicit_fb) {
|
||||
sync_fmt = snd_usb_find_implicit_fb_sync_format(chip, fmt,
|
||||
hw_params,
|
||||
!substream->stream,
|
||||
&sync_fixed_rate);
|
||||
!substream->stream);
|
||||
if (!sync_fmt) {
|
||||
usb_audio_dbg(chip,
|
||||
"cannot find sync format: ep=0x%x, iface=%d:%d, format=%s, rate=%d, channels=%d\n",
|
||||
@@ -519,7 +491,6 @@ static int snd_usb_hw_params(struct snd_pcm_substream *substream,
|
||||
}
|
||||
} else {
|
||||
sync_fmt = fmt;
|
||||
sync_fixed_rate = fixed_rate;
|
||||
}
|
||||
|
||||
ret = snd_usb_lock_shutdown(chip);
|
||||
@@ -539,7 +510,7 @@ static int snd_usb_hw_params(struct snd_pcm_substream *substream,
|
||||
close_endpoints(chip, subs);
|
||||
}
|
||||
|
||||
subs->data_endpoint = snd_usb_endpoint_open(chip, fmt, hw_params, false, fixed_rate);
|
||||
subs->data_endpoint = snd_usb_endpoint_open(chip, fmt, hw_params, false);
|
||||
if (!subs->data_endpoint) {
|
||||
ret = -EINVAL;
|
||||
goto unlock;
|
||||
@@ -548,8 +519,7 @@ static int snd_usb_hw_params(struct snd_pcm_substream *substream,
|
||||
if (fmt->sync_ep) {
|
||||
subs->sync_endpoint = snd_usb_endpoint_open(chip, sync_fmt,
|
||||
hw_params,
|
||||
fmt == sync_fmt,
|
||||
sync_fixed_rate);
|
||||
fmt == sync_fmt);
|
||||
if (!subs->sync_endpoint) {
|
||||
ret = -EINVAL;
|
||||
goto unlock;
|
||||
|
||||
@@ -6,8 +6,6 @@ void snd_usb_set_pcm_ops(struct snd_pcm *pcm, int stream);
|
||||
int snd_usb_pcm_suspend(struct snd_usb_stream *as);
|
||||
int snd_usb_pcm_resume(struct snd_usb_stream *as);
|
||||
|
||||
bool snd_usb_pcm_has_fixed_rate(struct snd_usb_substream *as);
|
||||
|
||||
int snd_usb_init_pitch(struct snd_usb_audio *chip,
|
||||
const struct audioformat *fmt);
|
||||
void snd_usb_preallocate_buffer(struct snd_usb_substream *subs);
|
||||
|
||||
@@ -1896,8 +1896,6 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
||||
QUIRK_FLAG_GENERIC_IMPLICIT_FB),
|
||||
DEVICE_FLG(0x0525, 0xa4ad, /* Hamedal C20 usb camero */
|
||||
QUIRK_FLAG_IFACE_SKIP_CLOSE),
|
||||
DEVICE_FLG(0x0ecb, 0x2069, /* JBL Quantum810 Wireless */
|
||||
QUIRK_FLAG_FIXED_RATE),
|
||||
|
||||
/* Vendor matches */
|
||||
VENDOR_FLG(0x045e, /* MS Lifecam */
|
||||
|
||||
@@ -182,9 +182,6 @@ extern bool snd_usb_skip_validation;
|
||||
* QUIRK_FLAG_FORCE_IFACE_RESET
|
||||
* Force an interface reset whenever stopping & restarting a stream
|
||||
* (e.g. after xrun)
|
||||
* QUIRK_FLAG_FIXED_RATE
|
||||
* Do not set PCM rate (frequency) when only one rate is available
|
||||
* for the given endpoint.
|
||||
*/
|
||||
|
||||
#define QUIRK_FLAG_GET_SAMPLE_RATE (1U << 0)
|
||||
@@ -208,6 +205,5 @@ extern bool snd_usb_skip_validation;
|
||||
#define QUIRK_FLAG_SKIP_IMPLICIT_FB (1U << 18)
|
||||
#define QUIRK_FLAG_IFACE_SKIP_CLOSE (1U << 19)
|
||||
#define QUIRK_FLAG_FORCE_IFACE_RESET (1U << 20)
|
||||
#define QUIRK_FLAG_FIXED_RATE (1U << 21)
|
||||
|
||||
#endif /* __USBAUDIO_H */
|
||||
|
||||
Reference in New Issue
Block a user