aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/tvaudio.c
diff options
context:
space:
mode:
authorDaniel Glöckner <daniel-gl@gmx.net>2012-06-09 20:43:57 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-06-18 19:46:41 -0400
commit9e019e075e03814d27c353e5e92a704d10238c13 (patch)
tree8ce79e6d3b11fa816b26de1423c4cef83c1ea778 /drivers/media/video/tvaudio.c
parente21adca897ee3744d15b805321012f9c40d3659c (diff)
[media] tvaudio: support V4L2_TUNER_MODE_LANG1_LANG2
Many of the audio decoders handled by the driver support this mode, so the driver should support it as well. Coding style errors are done to blend into the surrounding code. Signed-off-by: Daniel Glöckner <daniel-gl@gmx.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/tvaudio.c')
-rw-r--r--drivers/media/video/tvaudio.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c
index 04ebdfe30205..f3ce93a7cf79 100644
--- a/drivers/media/video/tvaudio.c
+++ b/drivers/media/video/tvaudio.c
@@ -334,6 +334,11 @@ static int chip_thread(void *data)
334 else if (mode & V4L2_TUNER_SUB_STEREO) 334 else if (mode & V4L2_TUNER_SUB_STEREO)
335 selected = V4L2_TUNER_MODE_STEREO; 335 selected = V4L2_TUNER_MODE_STEREO;
336 break; 336 break;
337 case V4L2_TUNER_MODE_LANG1_LANG2:
338 if (mode & V4L2_TUNER_SUB_LANG2)
339 selected = V4L2_TUNER_MODE_LANG1_LANG2;
340 else if (mode & V4L2_TUNER_SUB_STEREO)
341 selected = V4L2_TUNER_MODE_STEREO;
337 } 342 }
338 desc->setmode(chip, selected); 343 desc->setmode(chip, selected);
339 344
@@ -403,6 +408,9 @@ static void tda9840_setmode(struct CHIPSTATE *chip, int mode)
403 case V4L2_TUNER_MODE_LANG2: 408 case V4L2_TUNER_MODE_LANG2:
404 t |= TDA9840_DUALB; 409 t |= TDA9840_DUALB;
405 break; 410 break;
411 case V4L2_TUNER_MODE_LANG1_LANG2:
412 t |= TDA9840_DUALAB;
413 break;
406 default: 414 default:
407 update = 0; 415 update = 0;
408 } 416 }
@@ -487,6 +495,7 @@ static int tda9840_checkit(struct CHIPSTATE *chip)
487/* 0x06 - C6 - Control 2 in TDA9855, Control 3 in TDA9850 */ 495/* 0x06 - C6 - Control 2 in TDA9855, Control 3 in TDA9850 */
488/* Common to TDA9855 and TDA9850: */ 496/* Common to TDA9855 and TDA9850: */
489#define TDA985x_SAP 3<<6 /* Selects SAP output, mute if not received */ 497#define TDA985x_SAP 3<<6 /* Selects SAP output, mute if not received */
498#define TDA985x_MONOSAP 2<<6 /* Selects Mono on left, SAP on right */
490#define TDA985x_STEREO 1<<6 /* Selects Stereo ouput, mono if not received */ 499#define TDA985x_STEREO 1<<6 /* Selects Stereo ouput, mono if not received */
491#define TDA985x_MONO 0 /* Forces Mono output */ 500#define TDA985x_MONO 0 /* Forces Mono output */
492#define TDA985x_LMU 1<<3 /* Mute (LOR/LOL for 9855, OUTL/OUTR for 9850) */ 501#define TDA985x_LMU 1<<3 /* Mute (LOR/LOL for 9855, OUTL/OUTR for 9850) */
@@ -554,6 +563,9 @@ static void tda985x_setmode(struct CHIPSTATE *chip, int mode)
554 case V4L2_TUNER_MODE_SAP: 563 case V4L2_TUNER_MODE_SAP:
555 c6 |= TDA985x_SAP; 564 c6 |= TDA985x_SAP;
556 break; 565 break;
566 case V4L2_TUNER_MODE_LANG1_LANG2:
567 c6 |= TDA985x_MONOSAP;
568 break;
557 default: 569 default:
558 update = 0; 570 update = 0;
559 } 571 }
@@ -601,6 +613,7 @@ static void tda985x_setmode(struct CHIPSTATE *chip, int mode)
601#define TDA9873_TR_REVERSE ((1 << 3) | (1 << 2)) 613#define TDA9873_TR_REVERSE ((1 << 3) | (1 << 2))
602#define TDA9873_TR_DUALA 1 << 2 614#define TDA9873_TR_DUALA 1 << 2
603#define TDA9873_TR_DUALB 1 << 3 615#define TDA9873_TR_DUALB 1 << 3
616#define TDA9873_TR_DUALAB 0
604 617
605/* output level controls 618/* output level controls
606 * B5: output level switch (0 = reduced gain, 1 = normal gain) 619 * B5: output level switch (0 = reduced gain, 1 = normal gain)
@@ -722,6 +735,9 @@ static void tda9873_setmode(struct CHIPSTATE *chip, int mode)
722 case V4L2_TUNER_MODE_LANG2: 735 case V4L2_TUNER_MODE_LANG2:
723 sw_data |= TDA9873_TR_DUALB; 736 sw_data |= TDA9873_TR_DUALB;
724 break; 737 break;
738 case V4L2_TUNER_MODE_LANG1_LANG2:
739 sw_data |= TDA9873_TR_DUALAB;
740 break;
725 default: 741 default:
726 return; 742 return;
727 } 743 }
@@ -953,6 +969,10 @@ static void tda9874a_setmode(struct CHIPSTATE *chip, int mode)
953 aosr = 0xa0; /* auto-select, dual B/B */ 969 aosr = 0xa0; /* auto-select, dual B/B */
954 mdacosr = (tda9874a_mode) ? 0x83:0x81; 970 mdacosr = (tda9874a_mode) ? 0x83:0x81;
955 break; 971 break;
972 case V4L2_TUNER_MODE_LANG1_LANG2:
973 aosr = 0x00; /* always route L to L and R to R */
974 mdacosr = (tda9874a_mode) ? 0x82:0x80;
975 break;
956 default: 976 default:
957 return; 977 return;
958 } 978 }
@@ -987,6 +1007,10 @@ static void tda9874a_setmode(struct CHIPSTATE *chip, int mode)
987 fmmr = 0x02; /* dual */ 1007 fmmr = 0x02; /* dual */
988 aosr = 0x20; /* dual B/B */ 1008 aosr = 0x20; /* dual B/B */
989 break; 1009 break;
1010 case V4L2_TUNER_MODE_LANG1_LANG2:
1011 fmmr = 0x02; /* dual */
1012 aosr = 0x00; /* dual A/B */
1013 break;
990 default: 1014 default:
991 return; 1015 return;
992 } 1016 }
@@ -1251,6 +1275,10 @@ static void tda8425_setmode(struct CHIPSTATE *chip, int mode)
1251 s1 |= TDA8425_S1_ML_SOUND_B; 1275 s1 |= TDA8425_S1_ML_SOUND_B;
1252 s1 |= TDA8425_S1_STEREO_PSEUDO; 1276 s1 |= TDA8425_S1_STEREO_PSEUDO;
1253 break; 1277 break;
1278 case V4L2_TUNER_MODE_LANG1_LANG2:
1279 s1 |= TDA8425_S1_ML_STEREO;
1280 s1 |= TDA8425_S1_STEREO_LINEAR;
1281 break;
1254 case V4L2_TUNER_MODE_MONO: 1282 case V4L2_TUNER_MODE_MONO:
1255 s1 |= TDA8425_S1_ML_STEREO; 1283 s1 |= TDA8425_S1_ML_STEREO;
1256 s1 |= TDA8425_S1_STEREO_MONO; 1284 s1 |= TDA8425_S1_STEREO_MONO;
@@ -1332,6 +1360,7 @@ static audiocmd ta8874z_stereo = { 2, {0, TA8874Z_SEPARATION_DEFAULT}};
1332static audiocmd ta8874z_mono = {2, { TA8874Z_MONO_SET, TA8874Z_SEPARATION_DEFAULT}}; 1360static audiocmd ta8874z_mono = {2, { TA8874Z_MONO_SET, TA8874Z_SEPARATION_DEFAULT}};
1333static audiocmd ta8874z_main = {2, { 0, TA8874Z_SEPARATION_DEFAULT}}; 1361static audiocmd ta8874z_main = {2, { 0, TA8874Z_SEPARATION_DEFAULT}};
1334static audiocmd ta8874z_sub = {2, { TA8874Z_MODE_SUB, TA8874Z_SEPARATION_DEFAULT}}; 1362static audiocmd ta8874z_sub = {2, { TA8874Z_MODE_SUB, TA8874Z_SEPARATION_DEFAULT}};
1363static audiocmd ta8874z_both = {2, { TA8874Z_MODE_MAIN | TA8874Z_MODE_SUB, TA8874Z_SEPARATION_DEFAULT}};
1335 1364
1336static void ta8874z_setmode(struct CHIPSTATE *chip, int mode) 1365static void ta8874z_setmode(struct CHIPSTATE *chip, int mode)
1337{ 1366{
@@ -1354,6 +1383,9 @@ static void ta8874z_setmode(struct CHIPSTATE *chip, int mode)
1354 case V4L2_TUNER_MODE_LANG2: 1383 case V4L2_TUNER_MODE_LANG2:
1355 t = &ta8874z_sub; 1384 t = &ta8874z_sub;
1356 break; 1385 break;
1386 case V4L2_TUNER_MODE_LANG1_LANG2:
1387 t = &ta8874z_both;
1388 break;
1357 default: 1389 default:
1358 update = 0; 1390 update = 0;
1359 } 1391 }
@@ -1818,9 +1850,7 @@ static int tvaudio_s_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt)
1818 case V4L2_TUNER_MODE_STEREO: 1850 case V4L2_TUNER_MODE_STEREO:
1819 case V4L2_TUNER_MODE_LANG1: 1851 case V4L2_TUNER_MODE_LANG1:
1820 case V4L2_TUNER_MODE_LANG2: 1852 case V4L2_TUNER_MODE_LANG2:
1821 break;
1822 case V4L2_TUNER_MODE_LANG1_LANG2: 1853 case V4L2_TUNER_MODE_LANG1_LANG2:
1823 vt->audmode = V4L2_TUNER_MODE_STEREO;
1824 break; 1854 break;
1825 default: 1855 default:
1826 return -EINVAL; 1856 return -EINVAL;