From: Takashi Iwai <tiwai@suse.de>
To: alsa-devel@alsa-project.org
Subject: [PATCH 082/112] ALSA: hda - Revive snd_hda_get_conn_list()
Date: Tue, 8 Jan 2013 12:39:15 +0100 [thread overview]
Message-ID: <1357645185-7645-83-git-send-email-tiwai@suse.de> (raw)
In-Reply-To: <1357645185-7645-1-git-send-email-tiwai@suse.de>
Manage the connection list cache using linked lists instead of
snd_array, and revive snd_hda_get_conn_list() again, so that we don't
have to keep the expanded values locally.
This will reduce the stack usage by recursive call of
snd_hda_get_conn_index() or parse_nid_path() of the generic parser.
The list management doesn't include any mutex protection, thus the
caller needs to take care of race appropriately.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
sound/pci/hda/hda_codec.c | 164 ++++++++++++++++++++++++++------------------
sound/pci/hda/hda_codec.h | 4 +-
sound/pci/hda/hda_generic.c | 8 +--
3 files changed, 106 insertions(+), 70 deletions(-)
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 380c9ed..cd318e4 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -334,20 +334,51 @@ int snd_hda_get_sub_nodes(struct hda_codec *codec, hda_nid_t nid,
}
EXPORT_SYMBOL_HDA(snd_hda_get_sub_nodes);
+/* connection list element */
+struct hda_conn_list {
+ struct list_head list;
+ int len;
+ hda_nid_t nid;
+ hda_nid_t conns[0];
+};
+
/* look up the cached results */
-static hda_nid_t *lookup_conn_list(struct snd_array *array, hda_nid_t nid)
+static struct hda_conn_list *
+lookup_conn_list(struct hda_codec *codec, hda_nid_t nid)
{
- int i, len;
- for (i = 0; i < array->used; ) {
- hda_nid_t *p = snd_array_elem(array, i);
- if (nid == *p)
+ struct hda_conn_list *p;
+ list_for_each_entry(p, &codec->conn_list, list) {
+ if (p->nid == nid)
return p;
- len = p[1];
- i += len + 2;
}
return NULL;
}
+static int add_conn_list(struct hda_codec *codec, hda_nid_t nid, int len,
+ const hda_nid_t *list)
+{
+ struct hda_conn_list *p;
+
+ p = kmalloc(sizeof(*p) + len * sizeof(hda_nid_t), GFP_KERNEL);
+ if (!p)
+ return -ENOMEM;
+ p->len = len;
+ p->nid = nid;
+ memcpy(p->conns, list, len * sizeof(hda_nid_t));
+ list_add(&p->list, &codec->conn_list);
+ return 0;
+}
+
+static void remove_conn_list(struct hda_codec *codec)
+{
+ while (!list_empty(&codec->conn_list)) {
+ struct hda_conn_list *p;
+ p = list_first_entry(&codec->conn_list, typeof(*p), list);
+ list_del(&p->list);
+ kfree(p);
+ }
+}
+
/* read the connection and add to the cache */
static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid)
{
@@ -361,6 +392,49 @@ static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid)
}
/**
+ * snd_hda_get_conn_list - get connection list
+ * @codec: the HDA codec
+ * @nid: NID to parse
+ * @len: number of connection list entries
+ * @listp: the pointer to store NID list
+ *
+ * Parses the connection list of the given widget and stores the pointer
+ * to the list of NIDs.
+ *
+ * Returns the number of connections, or a negative error code.
+ *
+ * Note that the returned pointer isn't protected against the list
+ * modification. If snd_hda_override_conn_list() might be called
+ * concurrently, protect with a mutex appropriately.
+ */
+int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid,
+ const hda_nid_t **listp)
+{
+ bool added = false;
+
+ for (;;) {
+ int err;
+ const struct hda_conn_list *p;
+
+ /* if the connection-list is already cached, read it */
+ p = lookup_conn_list(codec, nid);
+ if (p) {
+ if (listp)
+ *listp = p->conns;
+ return p->len;
+ }
+ if (snd_BUG_ON(added))
+ return -EINVAL;
+
+ err = read_and_add_raw_conns(codec, nid);
+ if (err < 0)
+ return err;
+ added = true;
+ }
+}
+EXPORT_SYMBOL_HDA(snd_hda_get_conn_list);
+
+/**
* snd_hda_get_connections - copy connection list
* @codec: the HDA codec
* @nid: NID to parse
@@ -375,39 +449,20 @@ static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid)
int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,
hda_nid_t *conn_list, int max_conns)
{
- struct snd_array *array = &codec->conn_lists;
- int len;
- hda_nid_t *p;
- bool added = false;
+ const hda_nid_t *list;
+ int len = snd_hda_get_conn_list(codec, nid, &list);
- again:
- mutex_lock(&codec->hash_mutex);
- len = -1;
- /* if the connection-list is already cached, read it */
- p = lookup_conn_list(array, nid);
- if (p) {
- len = p[1];
- if (conn_list && len > max_conns) {
+ if (len > 0 && conn_list) {
+ if (len > max_conns) {
snd_printk(KERN_ERR "hda_codec: "
"Too many connections %d for NID 0x%x\n",
len, nid);
- mutex_unlock(&codec->hash_mutex);
return -EINVAL;
}
- if (conn_list && len)
- memcpy(conn_list, p + 2, len * sizeof(hda_nid_t));
+ memcpy(conn_list, list, len * sizeof(hda_nid_t));
}
- mutex_unlock(&codec->hash_mutex);
- if (len >= 0)
- return len;
- if (snd_BUG_ON(added))
- return -EINVAL;
- len = read_and_add_raw_conns(codec, nid);
- if (len < 0)
- return len;
- added = true;
- goto again;
+ return len;
}
EXPORT_SYMBOL_HDA(snd_hda_get_connections);
@@ -519,15 +574,6 @@ int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid,
return conns;
}
-static bool add_conn_list(struct snd_array *array, hda_nid_t nid)
-{
- hda_nid_t *p = snd_array_new(array);
- if (!p)
- return false;
- *p = nid;
- return true;
-}
-
/**
* snd_hda_override_conn_list - add/modify the connection-list to cache
* @codec: the HDA codec
@@ -543,28 +589,15 @@ static bool add_conn_list(struct snd_array *array, hda_nid_t nid)
int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, int len,
const hda_nid_t *list)
{
- struct snd_array *array = &codec->conn_lists;
- hda_nid_t *p;
- int i, old_used;
+ struct hda_conn_list *p;
- mutex_lock(&codec->hash_mutex);
- p = lookup_conn_list(array, nid);
- if (p)
- *p = -1; /* invalidate the old entry */
-
- old_used = array->used;
- if (!add_conn_list(array, nid) || !add_conn_list(array, len))
- goto error_add;
- for (i = 0; i < len; i++)
- if (!add_conn_list(array, list[i]))
- goto error_add;
- mutex_unlock(&codec->hash_mutex);
- return 0;
+ p = lookup_conn_list(codec, nid);
+ if (p) {
+ list_del(&p->list);
+ kfree(p);
+ }
- error_add:
- array->used = old_used;
- mutex_unlock(&codec->hash_mutex);
- return -ENOMEM;
+ return add_conn_list(codec, nid, len, list);
}
EXPORT_SYMBOL_HDA(snd_hda_override_conn_list);
@@ -582,10 +615,10 @@ EXPORT_SYMBOL_HDA(snd_hda_override_conn_list);
int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux,
hda_nid_t nid, int recursive)
{
- hda_nid_t conn[HDA_MAX_NUM_INPUTS];
+ const hda_nid_t *conn;
int i, nums;
- nums = snd_hda_get_connections(codec, mux, conn, ARRAY_SIZE(conn));
+ nums = snd_hda_get_conn_list(codec, mux, &conn);
for (i = 0; i < nums; i++)
if (conn[i] == nid)
return i;
@@ -1186,8 +1219,8 @@ static void snd_hda_codec_free(struct hda_codec *codec)
snd_array_free(&codec->mixers);
snd_array_free(&codec->nids);
snd_array_free(&codec->cvt_setups);
- snd_array_free(&codec->conn_lists);
snd_array_free(&codec->spdif_out);
+ remove_conn_list(codec);
codec->bus->caddr_tbl[codec->addr] = NULL;
if (codec->patch_ops.free)
codec->patch_ops.free(codec);
@@ -1257,10 +1290,11 @@ int snd_hda_codec_new(struct hda_bus *bus,
snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16);
snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16);
snd_array_init(&codec->cvt_setups, sizeof(struct hda_cvt_setup), 8);
- snd_array_init(&codec->conn_lists, sizeof(hda_nid_t), 64);
snd_array_init(&codec->spdif_out, sizeof(struct hda_spdif_out), 16);
snd_array_init(&codec->jacktbl, sizeof(struct hda_jack_tbl), 16);
snd_array_init(&codec->verbs, sizeof(struct hda_verb *), 8);
+ INIT_LIST_HEAD(&codec->conn_list);
+
INIT_DELAYED_WORK(&codec->jackpoll_work, hda_jackpoll_work);
#ifdef CONFIG_PM
diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
index 9f241d1..93ec747 100644
--- a/sound/pci/hda/hda_codec.h
+++ b/sound/pci/hda/hda_codec.h
@@ -831,7 +831,7 @@ struct hda_codec {
struct hda_cache_rec amp_cache; /* cache for amp access */
struct hda_cache_rec cmd_cache; /* cache for other commands */
- struct snd_array conn_lists; /* connection-list array */
+ struct list_head conn_list; /* linked-list of connection-list */
struct mutex spdif_mutex;
struct mutex control_mutex;
@@ -944,6 +944,8 @@ snd_hda_get_num_conns(struct hda_codec *codec, hda_nid_t nid)
}
int snd_hda_get_raw_connections(struct hda_codec *codec, hda_nid_t nid,
hda_nid_t *conn_list, int max_conns);
+int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid,
+ const hda_nid_t **listp);
int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, int nums,
const hda_nid_t *list);
int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux,
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
index 18daa8f..f69f2ab 100644
--- a/sound/pci/hda/hda_generic.c
+++ b/sound/pci/hda/hda_generic.c
@@ -208,7 +208,7 @@ static bool __parse_nid_path(struct hda_codec *codec,
int with_aa_mix, struct nid_path *path, int depth)
{
struct hda_gen_spec *spec = codec->spec;
- hda_nid_t conn[16];
+ const hda_nid_t *conn;
int i, nums;
if (to_nid == spec->mixer_nid) {
@@ -217,7 +217,7 @@ static bool __parse_nid_path(struct hda_codec *codec,
with_aa_mix = HDA_PARSE_ALL; /* mark aa-mix is included */
}
- nums = snd_hda_get_connections(codec, to_nid, conn, ARRAY_SIZE(conn));
+ nums = snd_hda_get_conn_list(codec, to_nid, &conn);
for (i = 0; i < nums; i++) {
if (conn[i] != from_nid) {
/* special case: when from_nid is 0,
@@ -481,12 +481,12 @@ static void activate_amp_in(struct hda_codec *codec, struct nid_path *path,
int i, bool enable, bool add_aamix)
{
struct hda_gen_spec *spec = codec->spec;
- hda_nid_t conn[16];
+ const hda_nid_t *conn;
int n, nums, idx;
int type;
hda_nid_t nid = path->path[i];
- nums = snd_hda_get_connections(codec, nid, conn, ARRAY_SIZE(conn));
+ nums = snd_hda_get_conn_list(codec, nid, &conn);
type = get_wcaps_type(get_wcaps(codec, nid));
if (type == AC_WID_PIN ||
(type == AC_WID_AUD_IN && codec->single_adc_amp)) {
--
1.8.0.1
next prev parent reply other threads:[~2013-01-08 11:40 UTC|newest]
Thread overview: 123+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-08 11:37 [PATCH RFC 000/112] HD-audio generic parser improvements Takashi Iwai
2013-01-08 11:37 ` [PATCH 001/112] ALSA: hda/realtek - Simplify alc_auto_is_dac_reachable() Takashi Iwai
2013-01-08 11:37 ` [PATCH 002/112] ALSA: hda/realtek - List up all available DACs Takashi Iwai
2013-01-08 11:37 ` [PATCH 003/112] ALSA: hda/realtek - Add output path parser Takashi Iwai
2013-01-08 11:37 ` [PATCH 004/112] ALSA: hda/realtek - Manage mixer controls in out_path list Takashi Iwai
2013-01-08 11:37 ` [PATCH 005/112] ALSA: hda - Fix mono amp values in proc output Takashi Iwai
2013-01-08 11:37 ` [PATCH 006/112] ALSA: hda/realtek - Reduce vol/mute ctl lookups at parsing codec Takashi Iwai
2013-01-08 11:38 ` [PATCH 007/112] ALSA: hda/realtek - Simplify the output volume initialization Takashi Iwai
2013-01-08 11:38 ` [PATCH 008/112] ALSA: hda/realtek - Make path->idx[] and path->multi[] consistent Takashi Iwai
2013-01-08 11:38 ` [PATCH 009/112] ALSA: hda/realtek - Parse input paths Takashi Iwai
2013-01-08 11:38 ` [PATCH 010/112] ALSA: hda/realtek - Parse analog loopback paths more generically Takashi Iwai
2013-01-08 11:38 ` [PATCH 011/112] ALSA: hda/realtek - Check amp capabilities of aa-mixer widget Takashi Iwai
2013-01-08 11:38 ` [PATCH 012/112] ALSA: hda/realtek - Fix initialization of input amps in output paths Takashi Iwai
2013-01-08 11:38 ` [PATCH 013/112] ALSA: hda - Remove snd_hda_codec_amp_update() call from patch_*.c Takashi Iwai
2013-01-08 11:38 ` [PATCH 014/112] ALSA: hda - Introduce cache & flush cmd / amp writes Takashi Iwai
2013-01-08 11:38 ` [PATCH 015/112] ALSA: hda - Introduce snd_hda_codec_amp_init*() Takashi Iwai
2013-01-08 11:38 ` [PATCH 016/112] ALSA: hda/realtek - Remove non-standard automute mode Takashi Iwai
2013-01-08 11:38 ` [PATCH 017/112] ALSA: hda/realtek - Add path active flag Takashi Iwai
2013-01-08 11:38 ` [PATCH 018/112] ALSA: hda/realtek - Consolidate is_reachable_path() Takashi Iwai
2013-01-08 11:38 ` [PATCH 019/112] ALSA: hda/realtek - Consolidate to a single path list Takashi Iwai
2013-01-08 11:38 ` [PATCH 020/112] ALSA: hda/realtek - Use path-based parser for digital outputs Takashi Iwai
2013-01-08 11:38 ` [PATCH 021/112] ALSA: hda/realtek - Rename get_out_path() to get_nid_path() Takashi Iwai
2013-01-08 11:38 ` [PATCH 022/112] ALSA: hda/realtek - Fix the initialization of pin amp-in Takashi Iwai
2013-01-08 11:38 ` [PATCH 023/112] ALSA: hda/realtek - Add missing initialization of multi-io routes Takashi Iwai
2013-01-08 11:38 ` [PATCH 024/112] ALSA: hda/realtek - Add boost volumes to path list Takashi Iwai
2013-01-08 11:38 ` [PATCH 025/112] ALSA: hda/realtek - Initialize loopback paths properly Takashi Iwai
2013-01-08 11:38 ` [PATCH 026/112] ALSA: hda/realtek - Don't change connection at path deactivation Takashi Iwai
2013-01-08 11:38 ` [PATCH 027/112] ALSA: hda/realtek - Make input path parser more generic Takashi Iwai
2013-01-08 11:38 ` [PATCH 028/112] ALSA: hda/realtek - Clean up some spec fields Takashi Iwai
2013-01-08 11:38 ` [PATCH 029/112] ALSA: hda/realtek - Remove superfluous input amp init Takashi Iwai
2013-01-08 11:38 ` [PATCH 030/112] ALSA: hda/realtek - Rename add_new_out_path() with add_new_nid_path() Takashi Iwai
2013-01-08 11:38 ` [PATCH 031/112] ALSA: hda/realtek - Parse digital input path Takashi Iwai
2013-01-08 11:38 ` [PATCH 032/112] ALSA: hda/realtek - Allow different pins for shared hp/mic vref check Takashi Iwai
2013-01-08 11:38 ` [PATCH 033/112] ALSA: hda/realtek - Drop auto_mic_valid_imux flag Takashi Iwai
2013-01-08 11:38 ` [PATCH 034/112] ALSA: hda/realtek - Remove unused fields and macro definitions Takashi Iwai
2013-01-08 11:38 ` [PATCH 035/112] ALSA: hda/realtek - Handle vmaster hook in the parser side Takashi Iwai
2013-01-08 11:38 ` [PATCH 036/112] ALSA: hda/realtek - Assign Master mixer when possible Takashi Iwai
2013-01-08 11:38 ` [PATCH 037/112] ALSA: hda/realtek - Merge a few split functions Takashi Iwai
2013-01-08 11:38 ` [PATCH 038/112] ALSA: hda/realtek - Allow passing name=NULL to alc_kcontrol_new() Takashi Iwai
2013-01-08 11:38 ` [PATCH 039/112] ALSA: hda/realtek - Allow multiple individual capture volume/switch controls Takashi Iwai
2013-01-08 11:38 ` [PATCH 040/112] ALSA: hda/realtek - Add conexant-style inverted dmic handling Takashi Iwai
2013-01-08 11:38 ` [PATCH 041/112] ALSA: hda - Move fixup code into struct hda_codec Takashi Iwai
2013-01-08 11:38 ` [PATCH 042/112] ALSA: hda/realtek - Fix split stereo dmic code Takashi Iwai
2013-01-08 11:38 ` [PATCH 043/112] ALSA: hda - Rearrange INPUT_PIN_ATTR_* Takashi Iwai
2013-01-08 11:38 ` [PATCH 044/112] ALSA: hda - More generic auto-mic switching for Realtek codecs Takashi Iwai
2013-01-10 0:41 ` Raymond Yau
2013-01-10 15:08 ` Takashi Iwai
2013-01-17 2:47 ` FF
2013-01-08 11:38 ` [PATCH 045/112] ALSA: hda/realtek - Remove redundant argument from alc_mux_select() Takashi Iwai
2013-01-08 11:38 ` [PATCH 046/112] ALSA: hda - Merge Realtek parser code to generic parser Takashi Iwai
2013-01-08 11:38 ` [PATCH 047/112] ALSA: hda - Add EAPD control " Takashi Iwai
2013-01-08 11:38 ` [PATCH 048/112] ALSA: hda - Export snd_hda_gen_add_kctl() Takashi Iwai
2013-01-08 11:38 ` [PATCH 049/112] ALSA: hda - Move the call of snd_hda_parse_pin_defcfg() from snd_hda_gen_parse_auto_config() Takashi Iwai
2013-01-08 11:38 ` [PATCH 050/112] ALSA: hda - Fix NULL dereference in snd_hda_gen_build_controls() Takashi Iwai
2013-01-08 11:38 ` [PATCH 051/112] ALSA: hda - Export standard jack event handlers for generic parser Takashi Iwai
2013-01-08 11:38 ` [PATCH 052/112] ALSA: hda - Use generic parser codes for Realtek driver Takashi Iwai
2013-01-08 11:38 ` [PATCH 053/112] ALSA: hda - Use "Capture Source" for single sources Takashi Iwai
2013-01-08 11:38 ` [PATCH 054/112] ALSA: hda - Allow one chance for zero NID in connection list Takashi Iwai
2013-01-08 11:38 ` [PATCH 055/112] ALSA: hda - Clear dirty flag upon cache write Takashi Iwai
2013-01-08 11:38 ` [PATCH 056/112] ALSA: hda - Clear cached_write flag in snd_hda_codec_resume_*() Takashi Iwai
2013-01-08 11:38 ` [PATCH 057/112] ALSA: hda - Check CORB overflow Takashi Iwai
2013-01-08 11:38 ` [PATCH 058/112] ALSA: hda - Flush dirty amp caches before writing inv_dmic fix Takashi Iwai
2013-01-08 11:38 ` [PATCH 059/112] ALSA: hda - Add snd_hda_codec_flush_*_cache() aliases Takashi Iwai
2013-01-08 11:38 ` [PATCH 060/112] ALSA: hda - Add missing amp cache flush for bound capture vol/sw ctls Takashi Iwai
2013-01-08 11:38 ` [PATCH 061/112] ALSA: hda - Add / fix comments about capture vol/sw controls in hda_generic.c Takashi Iwai
2013-01-08 11:38 ` [PATCH 062/112] ALSA: hda - Do sequential writes in snd_hda_gen_init() Takashi Iwai
2013-01-08 11:38 ` [PATCH 063/112] ALSA: hda - Fix wrong dirty check in snd_hda_codec_resume_amp() Takashi Iwai
2013-01-08 11:38 ` [PATCH 064/112] ALSA: hda - Avoid access of amp cache element outside mutex Takashi Iwai
2013-01-08 11:38 ` [PATCH 065/112] ALSA: hda - Increase the max depth of widget connections Takashi Iwai
2013-01-08 11:38 ` [PATCH 066/112] ALSA: hda - Begin HDA_GEN_* event tag from 1 Takashi Iwai
2013-01-08 11:39 ` [PATCH 067/112] ALSA: hda - Add spec->vmaster_mute_enum flag to generic parser Takashi Iwai
2013-01-08 11:39 ` [PATCH 068/112] ALSA: hda - Clear unsol enable bits on unused pins in " Takashi Iwai
2013-01-08 11:39 ` [PATCH 069/112] ALSA: hda - Refactor init_extra_out() in hda_generic.c Takashi Iwai
2013-01-08 11:39 ` [PATCH 070/112] ALSA: hda - Fix initialization of primary outputs " Takashi Iwai
2013-01-08 11:39 ` [PATCH 071/112] ALSA: hda - Dynamically turn on/off EAPD in generic codec driver Takashi Iwai
2013-01-08 11:39 ` [PATCH 072/112] ALSA: hda - Use cached version for changing pins in hda_generic.c Takashi Iwai
2013-01-08 11:39 ` [PATCH 073/112] ALSA: hda - Fix PCM name string for generic parser Takashi Iwai
2013-01-08 11:39 ` [PATCH 074/112] ALSA: hda - Drop spec->channel_mode field from hda_gen_spec Takashi Iwai
2013-01-08 11:39 ` [PATCH 075/112] ALSA: hda - Add more debug prints about new paths Takashi Iwai
2013-01-08 11:39 ` [PATCH 076/112] ALSA: hda - Fix typos in debug_show_configs() Takashi Iwai
2013-01-08 11:39 ` [PATCH 077/112] ALSA: hda - Define HDA_PARSE_* for snd_hda_parse_nid_path() argument Takashi Iwai
2013-01-08 11:39 ` [PATCH 078/112] ALSA: hda - Allow aamix in the primary output path Takashi Iwai
2013-01-08 11:39 ` [PATCH 079/112] ALSA: hda - Implement independent HP control Takashi Iwai
2013-01-08 11:39 ` [PATCH 080/112] ALSA: hda - Add inv_eapd flag to struct hda_codec Takashi Iwai
2013-01-08 11:39 ` [PATCH 081/112] ALSA: hda - Add codec->inv_jack_detect flag Takashi Iwai
2013-01-08 11:39 ` Takashi Iwai [this message]
2013-01-08 11:39 ` [PATCH 083/112] ALSA: hda - Add hooks for HP/line/mic auto switching Takashi Iwai
2013-01-08 11:39 ` [PATCH 084/112] ALSA: hda - Don't skip amp init for activated paths Takashi Iwai
2013-01-08 11:39 ` [PATCH 085/112] ALSA: hda - Initialize output paths with current active states Takashi Iwai
2013-01-08 11:39 ` [PATCH 086/112] ALSA: hda - Avoid duplicated path creations Takashi Iwai
2013-01-08 11:39 ` [PATCH 087/112] ALSA: hda - Check the existing path in snd_hda_add_new_path() Takashi Iwai
2013-01-08 11:39 ` [PATCH 088/112] ALSA: hda - Simplify the multi-io assignment with multi speakers Takashi Iwai
2013-01-08 11:39 ` [PATCH 089/112] ALSA: hda - Fix multi-io pin assignment in create_multi_out_ctls() Takashi Iwai
2013-01-08 11:39 ` [PATCH 090/112] ALSA: hda - Manage using output/loopback path indices Takashi Iwai
2013-01-08 11:39 ` [PATCH 091/112] ALSA: hda - Initialize digital-input path properly Takashi Iwai
2013-01-08 11:39 ` [PATCH 092/112] ALSA: hda - Correct aamix output paths Takashi Iwai
2013-01-08 11:39 ` [PATCH 093/112] ALSA: hda - Add Loopback Mixing control Takashi Iwai
2013-01-08 11:39 ` [PATCH 094/112] ALSA: hda - Fix truncated control names Takashi Iwai
2013-01-08 11:39 ` [PATCH 095/112] ALSA: hda - Prefer binding the primary CLFE output Takashi Iwai
2013-01-08 11:39 ` [PATCH 096/112] ALSA: hda - Add missing slave names for Speaker Surround, etc Takashi Iwai
2013-01-08 11:39 ` [PATCH 097/112] ALSA: hda - Drop unneeded pin argument from set_output_and_unmute() Takashi Iwai
2013-01-08 11:39 ` [PATCH 098/112] ALSA: hda - Drop bind-volume workaround Takashi Iwai
2013-01-08 11:39 ` [PATCH 099/112] ALSA: hda - Add pcm_playback_hook to hda_gen_spec Takashi Iwai
2013-01-08 11:39 ` [PATCH 100/112] ALSA: hda - Allow jack detection when polling is enabled Takashi Iwai
2013-01-08 11:39 ` [PATCH 101/112] ALSA: hda - Add snd_hda_gen_free() and snd_hda_gen_check_power_status() Takashi Iwai
2013-01-08 11:39 ` [PATCH 102/112] ALSA: hda - Remove dead HDA_CTL_BIND_VOL and HDA_CTL_BIND_SW codes Takashi Iwai
2013-01-08 11:39 ` [PATCH 103/112] ALSA: hda - Add brief comments to exported snd_hda_gen_*_() functions Takashi Iwai
2013-01-08 11:39 ` [PATCH 104/112] ALSA: hda - Clear path indices properly at each re-evaluation Takashi Iwai
2013-01-08 11:39 ` [PATCH 105/112] ALSA: hda - Use direct path reference in assign_out_path_ctls() Takashi Iwai
2013-01-08 11:39 ` [PATCH 106/112] ALSA: hda - Remove unused dac reference in create_multi_out_ctls() Takashi Iwai
2013-01-08 11:39 ` [PATCH 107/112] ALSA: hda - Don't set up active streams twice Takashi Iwai
2013-01-08 11:39 ` [PATCH 108/112] ALSA: hda - Fix multi-io channel mode management Takashi Iwai
2013-02-21 8:03 ` Raymond Yau
2013-01-08 11:39 ` [PATCH 109/112] ALSA: hda - Manage input paths via path indices Takashi Iwai
2013-01-08 11:39 ` [PATCH 110/112] ALSA: hda - Re-define snd_hda_parse_nid_path() Takashi Iwai
2013-01-08 11:39 ` [PATCH 111/112] ALSA: hda - Handle BOTH jack port as a fixed output Takashi Iwai
2013-01-08 11:39 ` [PATCH 112/112] ALSA: hda - Add a flag to suppress mic auto-switch Takashi Iwai
2013-01-08 11:47 ` [PATCH RFC 000/112] HD-audio generic parser improvements Takashi Iwai
2013-01-08 12:20 ` David Henningsson
2013-01-08 12:44 ` Takashi Iwai
2013-01-08 13:03 ` Jaroslav Kysela
2013-01-08 13:20 ` Takashi Iwai
2013-01-08 14:10 ` Jaroslav Kysela
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=1357645185-7645-83-git-send-email-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=alsa-devel@alsa-project.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).