All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris J Arges <chris.j.arges@canonical.com>
To: alsa-devel@alsa-project.org
Cc: tiwai@suse.de, th55@gmx.de, robin@gareus.org, clemens@ladisch.de,
	david.henningsson@canonical.com
Subject: [PATCH v3 3/4] ALSA: usb-audio: make set_*_mix_values functions public
Date: Wed, 29 Oct 2014 15:56:02 -0500	[thread overview]
Message-ID: <1414616163-14146-4-git-send-email-chris.j.arges@canonical.com> (raw)
In-Reply-To: <1414616163-14146-1-git-send-email-chris.j.arges@canonical.com>

Make the functions set_cur_mix_value and get_cur_mix_value accessible by files
that include mixer.h. In addition make usb_mixer_elem_free accessible.
This allows reuse of these functions by mixers that may require quirks.

The following summarizes the renamed functions:
  - set_cur_mix_value -> snd_usb_set_cur_mix_value
  - get_cur_mix_value -> snd_usb_get_cur_mix_value
  - usb_mixer_elem_free -> snd_usb_mixer_elem_free

Signed-off-by: Chris J Arges <chris.j.arges@canonical.com>
---
 sound/usb/mixer.c        | 34 +++++++++++++++++-----------------
 sound/usb/mixer.h        |  8 ++++++++
 sound/usb/mixer_quirks.c |  9 +--------
 3 files changed, 26 insertions(+), 25 deletions(-)

diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
index 2e4a9db..6b169fb 100644
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -412,7 +412,7 @@ static inline int get_cur_mix_raw(struct usb_mixer_elem_info *cval,
 			     value);
 }
 
-static int get_cur_mix_value(struct usb_mixer_elem_info *cval,
+int snd_usb_get_cur_mix_value(struct usb_mixer_elem_info *cval,
 			     int channel, int index, int *value)
 {
 	int err;
@@ -497,7 +497,7 @@ static int set_cur_ctl_value(struct usb_mixer_elem_info *cval,
 	return snd_usb_mixer_set_ctl_value(cval, UAC_SET_CUR, validx, value);
 }
 
-static int set_cur_mix_value(struct usb_mixer_elem_info *cval, int channel,
+int snd_usb_set_cur_mix_value(struct usb_mixer_elem_info *cval, int channel,
 			     int index, int value)
 {
 	int err;
@@ -815,7 +815,7 @@ static struct usb_feature_control_info audio_feature_info[] = {
 };
 
 /* private_free callback */
-static void usb_mixer_elem_free(struct snd_kcontrol *kctl)
+void snd_usb_mixer_elem_free(struct snd_kcontrol *kctl)
 {
 	kfree(kctl->private_data);
 	kctl->private_data = NULL;
@@ -998,7 +998,7 @@ static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval,
 				else
 					test -= cval->res;
 				if (test < cval->min || test > cval->max ||
-				    set_cur_mix_value(cval, minchn, 0, test) ||
+				    snd_usb_set_cur_mix_value(cval, minchn, 0, test) ||
 				    get_cur_mix_raw(cval, minchn, &check)) {
 					cval->res = last_valid_res;
 					break;
@@ -1007,7 +1007,7 @@ static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval,
 					break;
 				cval->res *= 2;
 			}
-			set_cur_mix_value(cval, minchn, 0, saved);
+			snd_usb_set_cur_mix_value(cval, minchn, 0, saved);
 		}
 
 		cval->initialized = 1;
@@ -1086,7 +1086,7 @@ static int mixer_ctl_feature_get(struct snd_kcontrol *kcontrol,
 		for (c = 0; c < MAX_CHANNELS; c++) {
 			if (!(cval->cmask & (1 << c)))
 				continue;
-			err = get_cur_mix_value(cval, c + 1, cnt, &val);
+			err = snd_usb_get_cur_mix_value(cval, c + 1, cnt, &val);
 			if (err < 0)
 				return cval->mixer->ignore_ctl_error ? 0 : err;
 			val = get_relative_value(cval, val);
@@ -1096,7 +1096,7 @@ static int mixer_ctl_feature_get(struct snd_kcontrol *kcontrol,
 		return 0;
 	} else {
 		/* master channel */
-		err = get_cur_mix_value(cval, 0, 0, &val);
+		err = snd_usb_get_cur_mix_value(cval, 0, 0, &val);
 		if (err < 0)
 			return cval->mixer->ignore_ctl_error ? 0 : err;
 		val = get_relative_value(cval, val);
@@ -1118,26 +1118,26 @@ static int mixer_ctl_feature_put(struct snd_kcontrol *kcontrol,
 		for (c = 0; c < MAX_CHANNELS; c++) {
 			if (!(cval->cmask & (1 << c)))
 				continue;
-			err = get_cur_mix_value(cval, c + 1, cnt, &oval);
+			err = snd_usb_get_cur_mix_value(cval, c + 1, cnt, &oval);
 			if (err < 0)
 				return cval->mixer->ignore_ctl_error ? 0 : err;
 			val = ucontrol->value.integer.value[cnt];
 			val = get_abs_value(cval, val);
 			if (oval != val) {
-				set_cur_mix_value(cval, c + 1, cnt, val);
+				snd_usb_set_cur_mix_value(cval, c + 1, cnt, val);
 				changed = 1;
 			}
 			cnt++;
 		}
 	} else {
 		/* master channel */
-		err = get_cur_mix_value(cval, 0, 0, &oval);
+		err = snd_usb_get_cur_mix_value(cval, 0, 0, &oval);
 		if (err < 0)
 			return cval->mixer->ignore_ctl_error ? 0 : err;
 		val = ucontrol->value.integer.value[0];
 		val = get_abs_value(cval, val);
 		if (val != oval) {
-			set_cur_mix_value(cval, 0, 0, val);
+			snd_usb_set_cur_mix_value(cval, 0, 0, val);
 			changed = 1;
 		}
 	}
@@ -1250,7 +1250,7 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
 
 	/*
 	 * If all channels in the mask are marked read-only, make the control
-	 * read-only. set_cur_mix_value() will check the mask again and won't
+	 * read-only. snd_usb_set_cur_mix_value() will check the mask again and won't
 	 * issue write commands to read-only channels.
 	 */
 	if (cval->channels == readonly_mask)
@@ -1263,7 +1263,7 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
 		kfree(cval);
 		return;
 	}
-	kctl->private_free = usb_mixer_elem_free;
+	kctl->private_free = snd_usb_mixer_elem_free;
 
 	len = check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name));
 	mapped_name = len != 0;
@@ -1547,7 +1547,7 @@ static void build_mixer_unit_ctl(struct mixer_build *state,
 		kfree(cval);
 		return;
 	}
-	kctl->private_free = usb_mixer_elem_free;
+	kctl->private_free = snd_usb_mixer_elem_free;
 
 	len = check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name));
 	if (!len)
@@ -1847,7 +1847,7 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
 			kfree(cval);
 			return -ENOMEM;
 		}
-		kctl->private_free = usb_mixer_elem_free;
+		kctl->private_free = snd_usb_mixer_elem_free;
 
 		if (check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name))) {
 			/* nothing */ ;
@@ -2530,7 +2530,7 @@ static int restore_mixer_value(struct usb_mixer_elem_info *cval)
 			if (!(cval->cmask & (1 << c)))
 				continue;
 			if (cval->cached & (1 << c)) {
-				err = set_cur_mix_value(cval, c + 1, idx,
+				err = snd_usb_set_cur_mix_value(cval, c + 1, idx,
 							cval->cache_val[idx]);
 				if (err < 0)
 					return err;
@@ -2540,7 +2540,7 @@ static int restore_mixer_value(struct usb_mixer_elem_info *cval)
 	} else {
 		/* master */
 		if (cval->cached) {
-			err = set_cur_mix_value(cval, 0, 0, *cval->cache_val);
+			err = snd_usb_set_cur_mix_value(cval, 0, 0, *cval->cache_val);
 			if (err < 0)
 				return err;
 		}
diff --git a/sound/usb/mixer.h b/sound/usb/mixer.h
index cf3967a4..af4772e 100644
--- a/sound/usb/mixer.h
+++ b/sound/usb/mixer.h
@@ -82,4 +82,12 @@ int snd_usb_mixer_suspend(struct usb_mixer_interface *mixer);
 int snd_usb_mixer_resume(struct usb_mixer_interface *mixer, bool reset_resume);
 #endif
 
+int snd_usb_set_cur_mix_value(struct usb_mixer_elem_info *cval, int channel,
+                             int index, int value);
+
+int snd_usb_get_cur_mix_value(struct usb_mixer_elem_info *cval,
+                             int channel, int index, int *value);
+
+extern void snd_usb_mixer_elem_free(struct snd_kcontrol *kctl);
+
 #endif /* __USBMIXER_H */
diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
index f119a41..c9665bf 100644
--- a/sound/usb/mixer_quirks.c
+++ b/sound/usb/mixer_quirks.c
@@ -52,13 +52,6 @@ struct std_mono_table {
 	snd_kcontrol_tlv_rw_t *tlv_callback;
 };
 
-/* private_free callback */
-static void usb_mixer_elem_free(struct snd_kcontrol *kctl)
-{
-	kfree(kctl->private_data);
-	kctl->private_data = NULL;
-}
-
 /* This function allows for the creation of standard UAC controls.
  * See the quirks for M-Audio FTUs or Ebox-44.
  * If you don't want to set a TLV callback pass NULL.
@@ -108,7 +101,7 @@ static int snd_create_std_mono_ctl_offset(struct usb_mixer_interface *mixer,
 
 	/* Set name */
 	snprintf(kctl->id.name, sizeof(kctl->id.name), name);
-	kctl->private_free = usb_mixer_elem_free;
+	kctl->private_free = snd_usb_mixer_elem_free;
 
 	/* set TLV */
 	if (tlv_callback) {
-- 
2.1.0

  parent reply	other threads:[~2014-10-29 20:56 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-21 19:46 [PATCH v2] Scarlett mixer interface inclusion Chris J Arges
2014-10-21 19:46 ` [PATCH v2] Scarlett mixer interface for 6i6, 18i6, 18i8 and 18i20 Chris J Arges
2014-10-22  6:49   ` Takashi Iwai
2014-10-22 18:44     ` Chris J Arges
2014-10-29 20:55     ` [PATCH v3 0/4] Scarlett mixer interface inclusion Chris J Arges
2014-10-29 20:56       ` [PATCH v3 1/4] Revert "ALSA: usb-audio: Add quirk for Focusrite Scarlett Chris J Arges
2014-10-29 20:56       ` [PATCH v3 2/4] ALSA: usb-audio: Add usb_mixer_elem_enum_info Chris J Arges
2014-10-30  7:17         ` Takashi Iwai
2014-10-29 20:56       ` Chris J Arges [this message]
2014-10-29 20:56       ` [PATCH v3 4/4] ALSA: usb-audio: Scarlett mixer interface for 6i6, 18i6, 18i8 and 18i20 Chris J Arges
2014-10-30  7:43         ` Takashi Iwai
2014-11-03 17:11           ` Chris J Arges
2014-11-03 17:31             ` Clemens Ladisch
2014-10-30  7:11       ` [PATCH v3 0/4] Scarlett mixer interface inclusion Takashi Iwai
2014-11-03 22:58         ` [PATCH 0/4 v4] " Chris J Arges
2014-11-03 22:58           ` [PATCH 1/4 v4] Revert "ALSA: usb-audio: Add quirk for Focusrite Scarlett Chris J Arges
2014-11-03 22:58           ` [PATCH 2/4 v4] ALSA: usb-audio: Add private_data pointer to usb_mixer_elem_info Chris J Arges
2014-11-03 22:58           ` [PATCH 3/4 v4] ALSA: usb-audio: make set_*_mix_values functions public Chris J Arges
2014-11-03 22:58           ` [PATCH 4/4 v4] ALSA: usb-audio: Scarlett mixer interface for 6i6, 18i6, 18i8 and 18i20 Chris J Arges
2014-11-04 10:18             ` Takashi Iwai
2014-11-04 13:16               ` Tobias Hoffmann
2014-11-04 13:29                 ` Tobias Hoffmann
2014-11-04 19:45                   ` Chris J Arges
2014-11-04 14:00                 ` Takashi Iwai
2014-11-04 19:56                   ` Chris J Arges
2014-11-04 19:51                 ` Chris J Arges
2014-11-05 16:32               ` [PATCH v5] " Chris J Arges
2014-11-06 14:33               ` [PATCH 0/4 v5] Scarlett mixer interface inclusion Chris J Arges
2014-11-06 14:33                 ` [PATCH 1/4 v5] Revert "ALSA: usb-audio: Add quirk for Focusrite Scarlett Chris J Arges
2014-11-06 14:33                 ` [PATCH 2/4 v5] ALSA: usb-audio: Add private_data pointer to usb_mixer_elem_info Chris J Arges
2014-11-06 14:33                 ` [PATCH 3/4 v5] ALSA: usb-audio: make set_*_mix_values functions public Chris J Arges
2014-11-06 14:33                 ` [PATCH 4/4 v5] ALSA: usb-audio: Scarlett mixer interface for 6i6, 18i6, 18i8 and 18i20 Chris J Arges
2014-11-07 10:15                   ` Takashi Iwai
2014-11-10 18:59                     ` [PATCH 0/4 v6] Scarlett mixer interface inclusion Chris J Arges
2014-11-10 18:59                       ` [PATCH 1/4 v6] Revert "ALSA: usb-audio: Add quirk for Focusrite Scarlett Chris J Arges
2014-11-10 18:59                       ` [PATCH 2/4 v6] ALSA: usb-audio: Add private_data pointer to usb_mixer_elem_info Chris J Arges
2014-11-10 18:59                       ` [PATCH 3/4 v6] ALSA: usb-audio: make set_*_mix_values functions public Chris J Arges
2014-11-10 18:59                       ` [PATCH 4/4 v6] ALSA: usb-audio: Scarlett mixer interface for 6i6, 18i6, 18i8 and 18i20 Chris J Arges
2014-11-10 19:24                         ` Takashi Iwai
2014-11-10 22:00                           ` Chris J Arges
2014-11-11  7:33                             ` Takashi Iwai
2014-11-12 18:06                           ` [PATCH 0/4 v7] Scarlett mixer interface inclusion Chris J Arges
2014-11-12 18:06                             ` [PATCH 1/4 v7] Revert "ALSA: usb-audio: Add quirk for Focusrite Scarlett Chris J Arges
2014-11-12 18:07                             ` [PATCH 2/4 v7] ALSA: usb-audio: Add private_data pointer to usb_mixer_elem_info Chris J Arges
2014-11-12 18:07                             ` [PATCH 3/4 v7] ALSA: usb-audio: make set_*_mix_values functions public Chris J Arges
2014-11-12 18:07                             ` [PATCH 4/4 v7] ALSA: usb-audio: Scarlett mixer interface for 6i6, 18i6, 18i8 and 18i20 Chris J Arges
2014-11-13  6:36                             ` [PATCH 0/4 v7] Scarlett mixer interface inclusion Takashi Iwai
2014-11-13  6:38                               ` David Henningsson
2014-11-13 13:01                               ` Chris J Arges
2014-11-04 20:11             ` [PATCH 4/4 v4] ALSA: usb-audio: Scarlett mixer interface for 6i6, 18i6, 18i8 and 18i20 David Henningsson
2014-11-04 20:18               ` Chris J Arges
2014-11-05  9:55                 ` David Henningsson
2014-11-02 19:00       ` [PATCH v3 0/4] Scarlett mixer interface inclusion Dominik Haumann
2014-11-03 15:49         ` Chris J Arges
2014-11-03 22:31           ` Chris J Arges
2014-10-22  6:36 ` [PATCH v2] " Takashi Iwai
2014-11-05 11:33   ` Takashi Iwai
2014-11-05 12:39     ` Takashi Iwai
2014-11-05 14:20       ` Takashi Iwai
2014-11-05 14:30       ` Chris J Arges

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1414616163-14146-4-git-send-email-chris.j.arges@canonical.com \
    --to=chris.j.arges@canonical.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=clemens@ladisch.de \
    --cc=david.henningsson@canonical.com \
    --cc=robin@gareus.org \
    --cc=th55@gmx.de \
    --cc=tiwai@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.