Commit a6cece9d authored by Takashi Iwai's avatar Takashi Iwai

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: default avatarTakashi Iwai <tiwai@suse.de>
parent 4c8c3a4f
...@@ -114,13 +114,11 @@ static struct usb_driver usb_audio_driver; ...@@ -114,13 +114,11 @@ static struct usb_driver usb_audio_driver;
* disconnect streams * disconnect streams
* called from usb_audio_disconnect() * 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; int idx;
struct snd_usb_stream *as;
struct snd_usb_substream *subs; struct snd_usb_substream *subs;
as = list_entry(head, struct snd_usb_stream, list);
for (idx = 0; idx < 2; idx++) { for (idx = 0; idx < 2; idx++) {
subs = &as->substream[idx]; subs = &as->substream[idx];
if (!subs->num_formats) if (!subs->num_formats)
...@@ -307,10 +305,10 @@ static int snd_usb_create_streams(struct snd_usb_audio *chip, int ctrlif) ...@@ -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) 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) list_for_each_entry_safe(ep, n, &chip->ep_list, list)
snd_usb_endpoint_free(p); snd_usb_endpoint_free(ep);
mutex_destroy(&chip->mutex); mutex_destroy(&chip->mutex);
kfree(chip); kfree(chip);
...@@ -609,12 +607,14 @@ static void usb_audio_disconnect(struct usb_interface *intf) ...@@ -609,12 +607,14 @@ static void usb_audio_disconnect(struct usb_interface *intf)
mutex_lock(&register_mutex); mutex_lock(&register_mutex);
chip->num_interfaces--; chip->num_interfaces--;
if (chip->num_interfaces <= 0) { if (chip->num_interfaces <= 0) {
struct snd_usb_stream *as;
struct snd_usb_endpoint *ep; struct snd_usb_endpoint *ep;
struct usb_mixer_interface *mixer;
snd_card_disconnect(card); snd_card_disconnect(card);
/* release the pcm resources */ /* release the pcm resources */
list_for_each(p, &chip->pcm_list) { list_for_each_entry(as, &chip->pcm_list, list) {
snd_usb_stream_disconnect(p); snd_usb_stream_disconnect(as);
} }
/* release the endpoint resources */ /* release the endpoint resources */
list_for_each_entry(ep, &chip->ep_list, list) { list_for_each_entry(ep, &chip->ep_list, list) {
...@@ -625,8 +625,8 @@ static void usb_audio_disconnect(struct usb_interface *intf) ...@@ -625,8 +625,8 @@ static void usb_audio_disconnect(struct usb_interface *intf)
snd_usbmidi_disconnect(p); snd_usbmidi_disconnect(p);
} }
/* release mixer resources */ /* release mixer resources */
list_for_each(p, &chip->mixer_list) { list_for_each_entry(mixer, &chip->mixer_list, list) {
snd_usb_mixer_disconnect(p); snd_usb_mixer_disconnect(mixer);
} }
usb_chip[chip->index] = NULL; usb_chip[chip->index] = NULL;
mutex_unlock(&register_mutex); mutex_unlock(&register_mutex);
......
...@@ -1002,15 +1002,12 @@ void snd_usb_endpoint_release(struct snd_usb_endpoint *ep) ...@@ -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 * 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. * 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); kfree(ep);
} }
......
...@@ -24,7 +24,7 @@ void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *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); int snd_usb_endpoint_activate(struct snd_usb_endpoint *ep);
void snd_usb_endpoint_deactivate(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_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_implicit_feedback_sink(struct snd_usb_endpoint *ep);
int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep); int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep);
......
...@@ -2483,11 +2483,8 @@ int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif, ...@@ -2483,11 +2483,8 @@ int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
return err; 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->urb);
usb_kill_urb(mixer->rc_urb); usb_kill_urb(mixer->rc_urb);
} }
......
...@@ -57,7 +57,7 @@ struct usb_mixer_elem_info { ...@@ -57,7 +57,7 @@ struct usb_mixer_elem_info {
int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif, int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif,
int ignore_error); 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); void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid);
......
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