mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
Revert "ANDROID: sound: usb: Add vendor's hooking interface"
This reverts commit 1eb185541d.
USB offload will end up coming back in a much different way in future
releases, not in a sound-specific manner, but rather in a USB-specific
way. So revert this change for now, it is no longer needed and is
causing merge issues.
Bug: 156315379
Cc: JaeHun Jung <jh0801.jung@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Ia65be0092d6b9ce395634cf3a01808188e06e379
This commit is contained in:
121
sound/usb/card.c
121
sound/usb/card.c
@@ -112,119 +112,6 @@ static DEFINE_MUTEX(register_mutex);
|
||||
static struct snd_usb_audio *usb_chip[SNDRV_CARDS];
|
||||
static struct usb_driver usb_audio_driver;
|
||||
|
||||
static struct snd_usb_audio_vendor_ops *usb_vendor_ops;
|
||||
|
||||
int snd_vendor_set_ops(struct snd_usb_audio_vendor_ops *ops)
|
||||
{
|
||||
if ((!ops->connect) ||
|
||||
(!ops->disconnect) ||
|
||||
(!ops->set_interface) ||
|
||||
(!ops->set_rate) ||
|
||||
(!ops->set_pcm_buf) ||
|
||||
(!ops->set_pcm_intf) ||
|
||||
(!ops->set_pcm_connection) ||
|
||||
(!ops->set_pcm_binterval) ||
|
||||
(!ops->usb_add_ctls))
|
||||
return -EINVAL;
|
||||
|
||||
usb_vendor_ops = ops;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_vendor_set_ops);
|
||||
|
||||
struct snd_usb_audio_vendor_ops *snd_vendor_get_ops(void)
|
||||
{
|
||||
return usb_vendor_ops;
|
||||
}
|
||||
|
||||
static int snd_vendor_connect(struct usb_interface *intf)
|
||||
{
|
||||
struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
|
||||
|
||||
if (ops)
|
||||
return ops->connect(intf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void snd_vendor_disconnect(struct usb_interface *intf)
|
||||
{
|
||||
struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
|
||||
|
||||
if (ops)
|
||||
ops->disconnect(intf);
|
||||
}
|
||||
|
||||
int snd_vendor_set_interface(struct usb_device *udev,
|
||||
struct usb_host_interface *intf,
|
||||
int iface, int alt)
|
||||
{
|
||||
struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
|
||||
|
||||
if (ops)
|
||||
return ops->set_interface(udev, intf, iface, alt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int snd_vendor_set_rate(struct usb_interface *intf, int iface, int rate,
|
||||
int alt)
|
||||
{
|
||||
struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
|
||||
|
||||
if (ops)
|
||||
return ops->set_rate(intf, iface, rate, alt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int snd_vendor_set_pcm_buf(struct usb_device *udev, int iface)
|
||||
{
|
||||
struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
|
||||
|
||||
if (ops)
|
||||
ops->set_pcm_buf(udev, iface);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int snd_vendor_set_pcm_intf(struct usb_interface *intf, int iface, int alt,
|
||||
int direction)
|
||||
{
|
||||
struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
|
||||
|
||||
if (ops)
|
||||
return ops->set_pcm_intf(intf, iface, alt, direction);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int snd_vendor_set_pcm_connection(struct usb_device *udev,
|
||||
enum snd_vendor_pcm_open_close onoff,
|
||||
int direction)
|
||||
{
|
||||
struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
|
||||
|
||||
if (ops)
|
||||
return ops->set_pcm_connection(udev, onoff, direction);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int snd_vendor_set_pcm_binterval(struct audioformat *fp,
|
||||
struct audioformat *found,
|
||||
int *cur_attr, int *attr)
|
||||
{
|
||||
struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
|
||||
|
||||
if (ops)
|
||||
return ops->set_pcm_binterval(fp, found, cur_attr, attr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int snd_vendor_usb_add_ctls(struct snd_usb_audio *chip)
|
||||
{
|
||||
struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
|
||||
|
||||
if (ops)
|
||||
return ops->usb_add_ctls(chip);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* disconnect streams
|
||||
* called from usb_audio_disconnect()
|
||||
@@ -830,10 +717,6 @@ static int usb_audio_probe(struct usb_interface *intf,
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = snd_vendor_connect(intf);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/*
|
||||
* found a config. now register to ALSA
|
||||
*/
|
||||
@@ -895,8 +778,6 @@ static int usb_audio_probe(struct usb_interface *intf,
|
||||
|
||||
dev_set_drvdata(&dev->dev, chip);
|
||||
|
||||
snd_vendor_usb_add_ctls(chip);
|
||||
|
||||
/*
|
||||
* For devices with more than one control interface, we assume the
|
||||
* first contains the audio controls. We might need a more specific
|
||||
@@ -982,8 +863,6 @@ static void usb_audio_disconnect(struct usb_interface *intf)
|
||||
|
||||
card = chip->card;
|
||||
|
||||
snd_vendor_disconnect(intf);
|
||||
|
||||
mutex_lock(®ister_mutex);
|
||||
if (atomic_inc_return(&chip->shutdown) == 1) {
|
||||
struct snd_usb_stream *as;
|
||||
|
||||
@@ -182,21 +182,4 @@ struct snd_usb_stream {
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
int snd_vendor_set_ops(struct snd_usb_audio_vendor_ops *vendor_ops);
|
||||
struct snd_usb_audio_vendor_ops *snd_vendor_get_ops(void);
|
||||
int snd_vendor_set_interface(struct usb_device *udev,
|
||||
struct usb_host_interface *alts,
|
||||
int iface, int alt);
|
||||
int snd_vendor_set_rate(struct usb_interface *intf, int iface, int rate,
|
||||
int alt);
|
||||
int snd_vendor_set_pcm_buf(struct usb_device *udev, int iface);
|
||||
int snd_vendor_set_pcm_intf(struct usb_interface *intf, int iface, int alt,
|
||||
int direction);
|
||||
int snd_vendor_set_pcm_connection(struct usb_device *udev,
|
||||
enum snd_vendor_pcm_open_close onoff,
|
||||
int direction);
|
||||
int snd_vendor_set_pcm_binterval(struct audioformat *fp,
|
||||
struct audioformat *found,
|
||||
int *cur_attr, int *attr);
|
||||
|
||||
#endif /* __USBAUDIO_CARD_H */
|
||||
|
||||
@@ -642,13 +642,8 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
|
||||
* interface is active. */
|
||||
if (rate != prev_rate) {
|
||||
usb_set_interface(dev, iface, 0);
|
||||
|
||||
snd_vendor_set_interface(dev, alts, iface, 0);
|
||||
|
||||
snd_usb_set_interface_quirk(dev);
|
||||
usb_set_interface(dev, iface, fmt->altsetting);
|
||||
|
||||
snd_vendor_set_interface(dev, alts, iface, fmt->altsetting);
|
||||
snd_usb_set_interface_quirk(dev);
|
||||
}
|
||||
|
||||
|
||||
@@ -134,8 +134,6 @@ static struct audioformat *find_format(struct snd_usb_substream *subs)
|
||||
found = fp;
|
||||
cur_attr = attr;
|
||||
}
|
||||
|
||||
snd_vendor_set_pcm_binterval(fp, found, &cur_attr, &attr);
|
||||
}
|
||||
return found;
|
||||
}
|
||||
@@ -590,10 +588,6 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
|
||||
}
|
||||
dev_dbg(&dev->dev, "setting usb interface %d:%d\n",
|
||||
fmt->iface, fmt->altsetting);
|
||||
err = snd_vendor_set_pcm_intf(iface, fmt->iface,
|
||||
fmt->altsetting, subs->direction);
|
||||
if (err)
|
||||
return err;
|
||||
snd_usb_set_interface_quirk(dev);
|
||||
}
|
||||
|
||||
@@ -917,10 +911,6 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
|
||||
struct usb_interface *iface;
|
||||
int ret;
|
||||
|
||||
ret = snd_vendor_set_pcm_buf(subs->dev, subs->cur_audiofmt->iface);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (! subs->cur_audiofmt) {
|
||||
dev_err(&subs->dev->dev, "no format is specified!\n");
|
||||
return -ENXIO;
|
||||
@@ -954,17 +944,6 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
|
||||
if (ret < 0)
|
||||
goto unlock;
|
||||
|
||||
if (snd_vendor_get_ops()) {
|
||||
ret = snd_vendor_set_rate(iface,
|
||||
subs->cur_audiofmt->iface,
|
||||
subs->cur_rate,
|
||||
subs->cur_audiofmt->altsetting);
|
||||
if (!ret) {
|
||||
subs->need_setup_ep = false;
|
||||
goto unlock;
|
||||
}
|
||||
}
|
||||
|
||||
ret = configure_endpoint(subs);
|
||||
if (ret < 0)
|
||||
goto unlock;
|
||||
@@ -1374,11 +1353,6 @@ static int snd_usb_pcm_open(struct snd_pcm_substream *substream)
|
||||
struct snd_usb_substream *subs = &as->substream[direction];
|
||||
int ret;
|
||||
|
||||
ret = snd_vendor_set_pcm_connection(subs->dev, SOUND_PCM_OPEN,
|
||||
direction);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
subs->interface = -1;
|
||||
subs->altset_idx = 0;
|
||||
runtime->hw = snd_usb_hardware;
|
||||
@@ -1407,23 +1381,12 @@ static int snd_usb_pcm_close(struct snd_pcm_substream *substream)
|
||||
struct snd_usb_substream *subs = &as->substream[direction];
|
||||
int ret;
|
||||
|
||||
ret = snd_vendor_set_pcm_connection(subs->dev, SOUND_PCM_CLOSE,
|
||||
direction);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
snd_media_stop_pipeline(subs);
|
||||
|
||||
if (!as->chip->keep_iface &&
|
||||
subs->interface >= 0 &&
|
||||
!snd_usb_lock_shutdown(subs->stream->chip)) {
|
||||
usb_set_interface(subs->dev, subs->interface, 0);
|
||||
ret = snd_vendor_set_pcm_intf(usb_ifnum_to_if(subs->dev,
|
||||
subs->interface),
|
||||
subs->interface, 0,
|
||||
direction);
|
||||
if (ret)
|
||||
return ret;
|
||||
subs->interface = -1;
|
||||
ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D1);
|
||||
snd_usb_unlock_shutdown(subs->stream->chip);
|
||||
|
||||
@@ -126,50 +126,4 @@ void snd_usb_unlock_shutdown(struct snd_usb_audio *chip);
|
||||
extern bool snd_usb_use_vmalloc;
|
||||
extern bool snd_usb_skip_validation;
|
||||
|
||||
struct audioformat;
|
||||
|
||||
enum snd_vendor_pcm_open_close {
|
||||
SOUND_PCM_CLOSE = 0,
|
||||
SOUND_PCM_OPEN,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct snd_usb_audio_vendor_ops - function callbacks for USB audio accelerators
|
||||
* @connect: called when a new interface is found
|
||||
* @disconnect: called when an interface is removed
|
||||
* @set_interface: called when an interface is initialized
|
||||
* @set_rate: called when the rate is set
|
||||
* @set_pcm_buf: called when the pcm buffer is set
|
||||
* @set_pcm_intf: called when the pcm interface is set
|
||||
* @set_pcm_connection: called when pcm is opened/closed
|
||||
* @set_pcm_binterval: called when the pcm binterval is set
|
||||
* @usb_add_ctls: called when USB controls are added
|
||||
*
|
||||
* Set of callbacks for some accelerated USB audio streaming hardware.
|
||||
*
|
||||
* TODO: make this USB host-controller specific, right now this only works for
|
||||
* one USB controller in the system at a time, which is only realistic for
|
||||
* self-contained systems like phones.
|
||||
*/
|
||||
struct snd_usb_audio_vendor_ops {
|
||||
int (*connect)(struct usb_interface *intf);
|
||||
void (*disconnect)(struct usb_interface *intf);
|
||||
|
||||
int (*set_interface)(struct usb_device *udev,
|
||||
struct usb_host_interface *alts,
|
||||
int iface, int alt);
|
||||
int (*set_rate)(struct usb_interface *intf, int iface, int rate,
|
||||
int alt);
|
||||
int (*set_pcm_buf)(struct usb_device *udev, int iface);
|
||||
int (*set_pcm_intf)(struct usb_interface *intf, int iface, int alt,
|
||||
int direction);
|
||||
int (*set_pcm_connection)(struct usb_device *udev,
|
||||
enum snd_vendor_pcm_open_close onoff,
|
||||
int direction);
|
||||
int (*set_pcm_binterval)(struct audioformat *fp,
|
||||
struct audioformat *found,
|
||||
int *cur_attr, int *attr);
|
||||
int (*usb_add_ctls)(struct snd_usb_audio *chip);
|
||||
};
|
||||
|
||||
#endif /* __USBAUDIO_H */
|
||||
|
||||
Reference in New Issue
Block a user