aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2014-05-09 12:24:52 +0200
committerTakashi Iwai <tiwai@suse.de>2014-05-09 12:24:52 +0200
commit1b51e7aa927aa1643feaedb485f24a372b27357c (patch)
tree239cdf44130c90a057b42e188c4d3916e2609431
parent85fad2210a04529f132b44076b139489ffd2e7d6 (diff)
downloadhda-emu-1b51e7aa927aa1643feaedb485f24a372b27357c.tar.gz
encode-pincfg: Don't override assoc, seq and misc numbers
When the base value is given via -b option, don't override assoc, seq and misc numbers but keep the original bits.
-rw-r--r--hda-decode-pincfg.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/hda-decode-pincfg.c b/hda-decode-pincfg.c
index e829090..4e9a7a6 100644
--- a/hda-decode-pincfg.c
+++ b/hda-decode-pincfg.c
@@ -316,12 +316,18 @@ static unsigned int encode(const char *jack,
caps &= ~AC_DEFCFG_COLOR;
caps |= parse_jack_color(color) << AC_DEFCFG_COLOR_SHIFT;
}
- caps &= ~AC_DEFCFG_MISC;
- caps |= (misc << AC_DEFCFG_MISC_SHIFT) & AC_DEFCFG_MISC;
- caps &= ~AC_DEFCFG_DEF_ASSOC;
- caps |= (assoc << AC_DEFCFG_ASSOC_SHIFT) & AC_DEFCFG_DEF_ASSOC;
- caps &= ~AC_DEFCFG_SEQUENCE;
- caps |= seq & AC_DEFCFG_SEQUENCE;
+ if (misc >= 0) {
+ caps &= ~AC_DEFCFG_MISC;
+ caps |= (misc << AC_DEFCFG_MISC_SHIFT) & AC_DEFCFG_MISC;
+ }
+ if (assoc >= 0) {
+ caps &= ~AC_DEFCFG_DEF_ASSOC;
+ caps |= (assoc << AC_DEFCFG_ASSOC_SHIFT) & AC_DEFCFG_DEF_ASSOC;
+ }
+ if (seq >= 0) {
+ caps &= ~AC_DEFCFG_SEQUENCE;
+ caps |= seq & AC_DEFCFG_SEQUENCE;
+ }
return caps;
}
@@ -334,7 +340,7 @@ int main(int argc, char **argv)
const char *location = NULL;
const char *connection = NULL;
const char *color = NULL;
- int assoc = 0, seq = 0, misc = 0, base = 0;
+ int assoc = -1, seq = -1, misc = -1, base = 0;
unsigned int val;
hda_log_init(NULL, 0);