@@ -430,6 +430,7 @@ static int rt721_sdca_set_gain_get(struct snd_kcontrol *kcontrol,
430
430
unsigned int read_l , read_r , ctl_l = 0 , ctl_r = 0 ;
431
431
unsigned int adc_vol_flag = 0 ;
432
432
const unsigned int interval_offset = 0xc0 ;
433
+ const unsigned int tendA = 0x200 ;
433
434
const unsigned int tendB = 0xa00 ;
434
435
435
436
if (strstr (ucontrol -> id .name , "FU1E Capture Volume" ) ||
@@ -439,19 +440,33 @@ static int rt721_sdca_set_gain_get(struct snd_kcontrol *kcontrol,
439
440
regmap_read (rt721 -> mbq_regmap , mc -> reg , & read_l );
440
441
regmap_read (rt721 -> mbq_regmap , mc -> rreg , & read_r );
441
442
442
- if (mc -> shift == 8 ) /* boost gain */
443
+ if (mc -> shift == 8 ) {
444
+ /* boost gain */
443
445
ctl_l = read_l / tendB ;
444
- else {
446
+ } else if (mc -> shift == 1 ) {
447
+ /* FU33 boost gain */
448
+ if (read_l == 0x8000 || read_l == 0xfe00 )
449
+ ctl_l = 0 ;
450
+ else
451
+ ctl_l = read_l / tendA + 1 ;
452
+ } else {
445
453
if (adc_vol_flag )
446
454
ctl_l = mc -> max - (((0x1e00 - read_l ) & 0xffff ) / interval_offset );
447
455
else
448
456
ctl_l = mc -> max - (((0 - read_l ) & 0xffff ) / interval_offset );
449
457
}
450
458
451
459
if (read_l != read_r ) {
452
- if (mc -> shift == 8 ) /* boost gain */
460
+ if (mc -> shift == 8 ) {
461
+ /* boost gain */
453
462
ctl_r = read_r / tendB ;
454
- else { /* ADC/DAC gain */
463
+ } else if (mc -> shift == 1 ) {
464
+ /* FU33 boost gain */
465
+ if (read_r == 0x8000 || read_r == 0xfe00 )
466
+ ctl_r = 0 ;
467
+ else
468
+ ctl_r = read_r / tendA + 1 ;
469
+ } else { /* ADC/DAC gain */
455
470
if (adc_vol_flag )
456
471
ctl_r = mc -> max - (((0x1e00 - read_r ) & 0xffff ) / interval_offset );
457
472
else
0 commit comments