ALSA: usb-audio: Pass direct struct pointer instead of list_head
Some functions in mixer.c and endpoint.c receive list_head instead of the object itself. This is not obvious and rather error-prone. Let's pass the proper object directly instead. The functions in midi.c still receive list_head and this can't be changed since the object definition isn't exposed to the outside of midi.c, so left as is. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
4c8c3a4fcc
Коммит
a6cece9d81
|
@ -114,13 +114,11 @@ static struct usb_driver usb_audio_driver;
|
|||
* disconnect streams
|
||||
* called from usb_audio_disconnect()
|
||||
*/
|
||||
static void snd_usb_stream_disconnect(struct list_head *head)
|
||||
static void snd_usb_stream_disconnect(struct snd_usb_stream *as)
|
||||
{
|
||||
int idx;
|
||||
struct snd_usb_stream *as;
|
||||
struct snd_usb_substream *subs;
|
||||
|
||||
as = list_entry(head, struct snd_usb_stream, list);
|
||||
for (idx = 0; idx < 2; idx++) {
|
||||
subs = &as->substream[idx];
|
||||
if (!subs->num_formats)
|
||||
|
@ -307,10 +305,10 @@ static int snd_usb_create_streams(struct snd_usb_audio *chip, int ctrlif)
|
|||
|
||||
static int snd_usb_audio_free(struct snd_usb_audio *chip)
|
||||
{
|
||||
struct list_head *p, *n;
|
||||
struct snd_usb_endpoint *ep, *n;
|
||||
|
||||
list_for_each_safe(p, n, &chip->ep_list)
|
||||
snd_usb_endpoint_free(p);
|
||||
list_for_each_entry_safe(ep, n, &chip->ep_list, list)
|
||||
snd_usb_endpoint_free(ep);
|
||||
|
||||
mutex_destroy(&chip->mutex);
|
||||
kfree(chip);
|
||||
|
@ -609,12 +607,14 @@ static void usb_audio_disconnect(struct usb_interface *intf)
|
|||
mutex_lock(®ister_mutex);
|
||||
chip->num_interfaces--;
|
||||
if (chip->num_interfaces <= 0) {
|
||||
struct snd_usb_stream *as;
|
||||
struct snd_usb_endpoint *ep;
|
||||
struct usb_mixer_interface *mixer;
|
||||
|
||||
snd_card_disconnect(card);
|
||||
/* release the pcm resources */
|
||||
list_for_each(p, &chip->pcm_list) {
|
||||
snd_usb_stream_disconnect(p);
|
||||
list_for_each_entry(as, &chip->pcm_list, list) {
|
||||
snd_usb_stream_disconnect(as);
|
||||
}
|
||||
/* release the endpoint resources */
|
||||
list_for_each_entry(ep, &chip->ep_list, list) {
|
||||
|
@ -625,8 +625,8 @@ static void usb_audio_disconnect(struct usb_interface *intf)
|
|||
snd_usbmidi_disconnect(p);
|
||||
}
|
||||
/* release mixer resources */
|
||||
list_for_each(p, &chip->mixer_list) {
|
||||
snd_usb_mixer_disconnect(p);
|
||||
list_for_each_entry(mixer, &chip->mixer_list, list) {
|
||||
snd_usb_mixer_disconnect(mixer);
|
||||
}
|
||||
usb_chip[chip->index] = NULL;
|
||||
mutex_unlock(®ister_mutex);
|
||||
|
|
|
@ -1002,15 +1002,12 @@ void snd_usb_endpoint_release(struct snd_usb_endpoint *ep)
|
|||
/**
|
||||
* snd_usb_endpoint_free: Free the resources of an snd_usb_endpoint
|
||||
*
|
||||
* @ep: the list header of the endpoint to free
|
||||
* @ep: the endpoint to free
|
||||
*
|
||||
* This free all resources of the given ep.
|
||||
*/
|
||||
void snd_usb_endpoint_free(struct list_head *head)
|
||||
void snd_usb_endpoint_free(struct snd_usb_endpoint *ep)
|
||||
{
|
||||
struct snd_usb_endpoint *ep;
|
||||
|
||||
ep = list_entry(head, struct snd_usb_endpoint, list);
|
||||
kfree(ep);
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep);
|
|||
int snd_usb_endpoint_activate(struct snd_usb_endpoint *ep);
|
||||
void snd_usb_endpoint_deactivate(struct snd_usb_endpoint *ep);
|
||||
void snd_usb_endpoint_release(struct snd_usb_endpoint *ep);
|
||||
void snd_usb_endpoint_free(struct list_head *head);
|
||||
void snd_usb_endpoint_free(struct snd_usb_endpoint *ep);
|
||||
|
||||
int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep);
|
||||
int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep);
|
||||
|
|
|
@ -2483,11 +2483,8 @@ _error:
|
|||
return err;
|
||||
}
|
||||
|
||||
void snd_usb_mixer_disconnect(struct list_head *p)
|
||||
void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer)
|
||||
{
|
||||
struct usb_mixer_interface *mixer;
|
||||
|
||||
mixer = list_entry(p, struct usb_mixer_interface, list);
|
||||
usb_kill_urb(mixer->urb);
|
||||
usb_kill_urb(mixer->rc_urb);
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ struct usb_mixer_elem_info {
|
|||
|
||||
int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
|
||||
int ignore_error);
|
||||
void snd_usb_mixer_disconnect(struct list_head *p);
|
||||
void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer);
|
||||
|
||||
void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче