From 917e71fcc85faf652e21b2763e6be23878b96155 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Thu, 7 Sep 2006 20:55:49 +0200 Subject: [PATCH] Fix ADC controls with higher resolution in envy24control Fixed envy24control to handle ADC volumes with higher resolution properly. Also, the bogus sync of gtk_adjustment between ADC and IPGA volumes is fixed in the case no IPGA is detected. --- envy24control/envy24control.c | 2 +- envy24control/envy24control.h | 1 + envy24control/volume.c | 14 +++++++++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/envy24control/envy24control.c b/envy24control/envy24control.c index 9268956..9c6f23c 100644 --- a/envy24control/envy24control.c +++ b/envy24control/envy24control.c @@ -1570,7 +1570,7 @@ static void create_analog_volume(GtkWidget *main, GtkWidget *notebook, int page) gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 6); } - adj = gtk_adjustment_new(0, -127, 0, 1, 16, 0); + adj = gtk_adjustment_new(0, -(envy_adc_max()), 0, 1, 16, 0); av_adc_volume_adj[i] = adj; vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj)); gtk_scale_set_draw_value(GTK_SCALE(vscale), FALSE); diff --git a/envy24control/envy24control.h b/envy24control/envy24control.h index 53b5e70..f5c1e39 100644 --- a/envy24control/envy24control.h +++ b/envy24control/envy24control.h @@ -217,6 +217,7 @@ void analog_volume_postinit(void); int envy_dac_volumes(void); int envy_dac_max(void); int envy_adc_volumes(void); +int envy_adc_max(void); int envy_ipga_volumes(void); int envy_dac_senses(void); int envy_adc_senses(void); diff --git a/envy24control/volume.c b/envy24control/volume.c index f336bbe..226c75c 100644 --- a/envy24control/volume.c +++ b/envy24control/volume.c @@ -33,6 +33,7 @@ static int dac_volumes; static int dac_max = 127; +static int adc_max = 127; static int adc_volumes; static int ipga_volumes; static int dac_senses; @@ -58,6 +59,11 @@ int envy_adc_volumes(void) return adc_volumes; } +int envy_adc_max(void) +{ + return adc_max; +} + int envy_ipga_volumes(void) { return ipga_volumes; @@ -138,8 +144,9 @@ void adc_volume_update(int idx) g_print("Unable to read ipga volume: %s\n", snd_strerror(err)); return; } - gtk_adjustment_set_value(GTK_ADJUSTMENT(av_ipga_volume_adj[idx]), - -0); + if (ipga_volumes > 0) + gtk_adjustment_set_value(GTK_ADJUSTMENT(av_ipga_volume_adj[idx]), + -0); } void ipga_volume_update(int idx) @@ -165,7 +172,7 @@ void ipga_volume_update(int idx) // set ADC volume to max if IPGA volume greater 0 if (ipga_vol) gtk_adjustment_set_value(GTK_ADJUSTMENT(av_adc_volume_adj[idx]), - -127); + -adc_max); } void dac_sense_update(int idx) @@ -342,6 +349,7 @@ void analog_volume_init(void) snd_ctl_elem_info_set_index(info, i); if (snd_ctl_elem_info(ctl, info) < 0) break; + adc_max = snd_ctl_elem_info_get_max(info); } if (i < input_channels - 1) adc_volumes = i; -- 2.47.1