Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

V4L/DVB (3577): Cleanup audio input handling

Cleanup audio input handling in bttv and tvaudio:
- inputs were specified that were never used
- mute was handled as a special input which led to confusing code
- confusing naming made it difficult to see if the setting was for
i2c or gpio.
The old audiochip.h input names moved to tvaudio.h. Currently this
is used both by tvaudio and msp3400 until the msp3400 implements the
new msp3400-specific inputs.
Detect in bttv the tvaudio and msp3400 i2c clients and use these
client pointers to set the inputs directly instead of broadcasting the
command.
Removed AUDC_SET_INPUT. Now replaced by VIDIOC_S_AUDIO. This will be
replaced again later by the new ROUTING commands.
Removed VIDIOC_G_AUDIO implementations in i2c drivers: this command is
a user level command and not to be used internally. It wasn't called at
all anyway.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>

authored by

Hans Verkuil and committed by
Mauro Carvalho Chehab
8bf2f8e7 ae62e3d4

+349 -340
-1
drivers/media/video/bt8xx/bt832.c
··· 30 30 #include <linux/init.h> 31 31 #include <linux/errno.h> 32 32 #include <linux/slab.h> 33 - #include <media/audiochip.h> 34 33 #include <media/v4l2-common.h> 35 34 36 35 #include "bttv.h"
+183 -116
drivers/media/video/bt8xx/bttv-cards.c
··· 39 39 40 40 #include "bttvp.h" 41 41 #include <media/v4l2-common.h> 42 + #include <media/tvaudio.h> 42 43 43 44 /* fwd decl */ 44 45 static void boot_msp34xx(struct bttv *btv, int pin); ··· 337 336 .svhs = 2, 338 337 .gpiomask = 15, 339 338 .muxsel = { 2, 3, 1, 1 }, 340 - .audiomux = { 2, 0, 0, 0, 10 }, 339 + .gpiomux = { 2, 0, 0, 0 }, 340 + .gpiomute = 10, 341 341 .needs_tvaudio = 1, 342 342 .tuner_type = -1, 343 343 .tuner_addr = ADDR_UNSET, ··· 352 350 .svhs = 2, 353 351 .gpiomask = 7, 354 352 .muxsel = { 2, 3, 1, 1 }, 355 - .audiomux = { 0, 1, 2, 3, 4 }, 353 + .gpiomux = { 0, 1, 2, 3 }, 354 + .gpiomute = 4, 356 355 .needs_tvaudio = 1, 357 356 .tuner_type = -1, 358 357 .tuner_addr = ADDR_UNSET, ··· 367 364 .svhs = 2, 368 365 .gpiomask = 7, 369 366 .muxsel = { 2, 3, 1, 1 }, 370 - .audiomux = { 4, 0, 2, 3, 1 }, 367 + .gpiomux = { 4, 0, 2, 3 }, 368 + .gpiomute = 1, 371 369 .no_msp34xx = 1, 372 370 .needs_tvaudio = 1, 373 371 .tuner_type = TUNER_PHILIPS_NTSC, ··· 387 383 .svhs = 2, 388 384 .gpiomask = 0, 389 385 .muxsel = { 2, 3, 1, 1 }, 390 - .audiomux = { 0 }, 386 + .gpiomux = { 0 }, 391 387 .needs_tvaudio = 0, 392 388 .tuner_type = 4, 393 389 .tuner_addr = ADDR_UNSET, ··· 401 397 .svhs = 2, 402 398 .gpiomask = 3, 403 399 .muxsel = { 2, 3, 1, 0 }, 404 - .audiomux = { 0, 1, 0, 1, 3 }, 400 + .gpiomux = { 0, 1, 0, 1 }, 401 + .gpiomute = 3, 405 402 .needs_tvaudio = 1, 406 403 .tuner_type = -1, 407 404 .tuner_addr = ADDR_UNSET, ··· 416 411 .svhs = 3, 417 412 .muxsel = { 2, 3, 1, 1 }, 418 413 .gpiomask = 0x0f, 419 - .audiomux = { 0x0c, 0x04, 0x08, 0x04, 0 }, 414 + .gpiomux = { 0x0c, 0x04, 0x08, 0x04 }, 420 415 /* 0x04 for some cards ?? */ 421 416 .needs_tvaudio = 1, 422 417 .tuner_type = -1, ··· 433 428 .svhs = 3, 434 429 .gpiomask = 0, 435 430 .muxsel = { 2, 3, 1, 0, 0 }, 436 - .audiomux = { 0 }, 431 + .gpiomux = { 0 }, 437 432 .needs_tvaudio = 1, 438 433 .tuner_type = -1, 439 434 .tuner_addr = ADDR_UNSET, ··· 449 444 .svhs = 2, 450 445 .gpiomask = 0xc00, 451 446 .muxsel = { 2, 3, 1, 1 }, 452 - .audiomux = { 0, 0xc00, 0x800, 0x400, 0xc00, 0 }, 447 + .gpiomux = { 0, 0xc00, 0x800, 0x400 }, 448 + .gpiomute = 0xc00, 453 449 .needs_tvaudio = 1, 454 450 .pll = PLL_28, 455 451 .tuner_type = -1, ··· 465 459 .svhs = 2, 466 460 .gpiomask = 3, 467 461 .muxsel = { 2, 3, 1, 1 }, 468 - .audiomux = { 1, 1, 2, 3, 0 }, 462 + .gpiomux = { 1, 1, 2, 3 }, 469 463 .needs_tvaudio = 0, 470 464 .pll = PLL_28, 471 465 .tuner_type = TUNER_TEMIC_PAL, ··· 480 474 .svhs = 2, 481 475 .gpiomask = 0x0f, /* old: 7 */ 482 476 .muxsel = { 2, 0, 1, 1 }, 483 - .audiomux = { 0, 1, 2, 3, 4 }, 477 + .gpiomux = { 0, 1, 2, 3 }, 478 + .gpiomute = 4, 484 479 .needs_tvaudio = 1, 485 480 .pll = PLL_28, 486 481 .tuner_type = -1, ··· 496 489 .svhs = 2, 497 490 .gpiomask = 0x3014f, 498 491 .muxsel = { 2, 3, 1, 1 }, 499 - .audiomux = { 0x20001,0x10001, 0, 0,10 }, 492 + .gpiomux = { 0x20001,0x10001, 0, 0 }, 493 + .gpiomute = 10, 500 494 .needs_tvaudio = 1, 501 495 .tuner_type = -1, 502 496 .tuner_addr = ADDR_UNSET, ··· 513 505 .svhs = 2, 514 506 .gpiomask = 15, 515 507 .muxsel = { 2, 3, 1, 1 }, 516 - .audiomux = { 13, 14, 11, 7, 0, 0 }, 508 + .gpiomux = { 13, 14, 11, 7 }, 517 509 .needs_tvaudio = 1, 518 510 .tuner_type = -1, 519 511 .tuner_addr = ADDR_UNSET, ··· 527 519 .svhs = 2, 528 520 .gpiomask = 15, 529 521 .muxsel = { 2, 3, 1, 1 }, 530 - .audiomux = { 13, 14, 11, 7, 0, 0 }, 522 + .gpiomux = { 13, 14, 11, 7 }, 531 523 .needs_tvaudio = 1, 532 524 .msp34xx_alt = 1, 533 525 .pll = PLL_28, ··· 545 537 .svhs = 2, 546 538 .gpiomask = 7, 547 539 .muxsel = { 2, 3, 1, 1 }, 548 - .audiomux = { 0, 2, 1, 3, 4 }, /* old: {0, 1, 2, 3, 4} */ 540 + .gpiomux = { 0, 2, 1, 3 }, /* old: {0, 1, 2, 3, 4} */ 541 + .gpiomute = 4, 549 542 .needs_tvaudio = 1, 550 543 .pll = PLL_28, 551 544 .tuner_type = -1, ··· 561 552 .svhs = 2, 562 553 .gpiomask = 15, 563 554 .muxsel = { 2, 3, 1, 1 }, 564 - .audiomux = { 0 , 0, 1 , 0, 10 }, 555 + .gpiomux = { 0, 0, 1, 0 }, 556 + .gpiomute = 10, 565 557 .needs_tvaudio = 1, 566 558 .tuner_type = -1, 567 559 .tuner_addr = ADDR_UNSET, ··· 580 570 .muxsel = { 2, 3, 1, 1 }, 581 571 #if 0 582 572 /* old */ 583 - .audiomux = { 0x01c000, 0, 0x018000, 0x014000, 0x002000, 0 }, 573 + .gpiomux = { 0x01c000, 0, 0x018000, 0x014000, 0x002000 }, 584 574 #else 585 575 /* 2003-10-20 by "Anton A. Arapov" <arapov@mail.ru> */ 586 - .audiomux = { 0x001e00, 0, 0x018000, 0x014000, 0x002000, 0 }, 576 + .gpiomux = { 0x001e00, 0, 0x018000, 0x014000 }, 577 + .gpiomute = 0x002000, 587 578 #endif 588 579 .needs_tvaudio = 1, 589 580 .pll = PLL_28, ··· 598 587 .svhs = 2, 599 588 .gpiomask = 0x8300f8, 600 589 .muxsel = { 2, 3, 1, 1,0 }, 601 - .audiomux = { 0x4fa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007 }, 590 + .gpiomux = { 0x4fa007,0xcfa007,0xcfa007,0xcfa007 }, 591 + .gpiomute = 0xcfa007, 602 592 .needs_tvaudio = 1, 603 593 .tuner_type = -1, 604 594 .tuner_addr = ADDR_UNSET, ··· 615 603 .svhs = 2, 616 604 .gpiomask = 0, 617 605 .muxsel = { 2, 3, 1, 1 }, 618 - .audiomux = { 1, 0, 0, 0, 0 }, 606 + .gpiomux = { 1, 0, 0, 0 }, 619 607 .needs_tvaudio = 1, 620 608 .tuner_type = -1, 621 609 .tuner_addr = ADDR_UNSET, ··· 629 617 .svhs = -1, 630 618 .gpiomask = 0x8dff00, 631 619 .muxsel = { 2, 3, 1, 1 }, 632 - .audiomux = { 0 }, 620 + .gpiomux = { 0 }, 633 621 .no_msp34xx = 1, 634 622 .tuner_type = -1, 635 623 .tuner_addr = ADDR_UNSET, ··· 656 644 .svhs = 2, 657 645 .gpiomask = 0x1800, 658 646 .muxsel = { 2, 3, 1, 1 }, 659 - .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800 }, 647 + .gpiomux = { 0, 0x800, 0x1000, 0x1000 }, 648 + .gpiomute = 0x1800, 660 649 .pll = PLL_28, 661 650 .tuner_type = TUNER_PHILIPS_PAL_I, 662 651 .tuner_addr = ADDR_UNSET, ··· 671 658 .svhs = 2, 672 659 .gpiomask = 0xc00, 673 660 .muxsel = { 2, 3, 1, 1 }, 674 - .audiomux = { 0, 1, 0x800, 0x400, 0xc00, 0 }, 661 + .gpiomux = { 0, 1, 0x800, 0x400 }, 662 + .gpiomute = 0xc00, 675 663 .needs_tvaudio = 1, 676 664 .pll = PLL_28, 677 665 .tuner_type = -1, ··· 688 674 .gpiomask = 7, 689 675 .muxsel = { 2, 3, -1 }, 690 676 .digital_mode = DIGITAL_MODE_CAMERA, 691 - .audiomux = { 0, 0, 0, 0, 0 }, 677 + .gpiomux = { 0, 0, 0, 0 }, 692 678 .no_msp34xx = 1, 693 679 .pll = PLL_28, 694 680 .tuner_type = TUNER_ALPS_TSBB5_PAL_I, ··· 705 691 .svhs = 2, 706 692 .gpiomask = 0xe00, 707 693 .muxsel = { 2, 3, 1, 1 }, 708 - .audiomux = {0x400, 0x400, 0x400, 0x400, 0xc00 }, 694 + .gpiomux = {0x400, 0x400, 0x400, 0x400 }, 695 + .gpiomute = 0xc00, 709 696 .needs_tvaudio = 1, 710 697 .pll = PLL_28, 711 698 .tuner_type = -1, ··· 722 707 .svhs = 2, 723 708 .gpiomask = 0x1f0fff, 724 709 .muxsel = { 2, 3, 1, 1 }, 725 - .audiomux = { 0x20000, 0x30000, 0x10000, 0, 0x40000 }, 710 + .gpiomux = { 0x20000, 0x30000, 0x10000, 0 }, 711 + .gpiomute = 0x40000, 726 712 .needs_tvaudio = 0, 727 713 .tuner_type = TUNER_PHILIPS_PAL, 728 714 .tuner_addr = ADDR_UNSET, ··· 738 722 .svhs = 3, 739 723 .gpiomask = 7, 740 724 .muxsel = { 2, 0, 1, 1 }, 741 - .audiomux = { 0, 1, 2, 3, 4 }, 725 + .gpiomux = { 0, 1, 2, 3 }, 726 + .gpiomute = 4, 742 727 .needs_tvaudio = 1, 743 728 .tuner_type = -1, 744 729 .tuner_addr = ADDR_UNSET, ··· 753 736 .svhs = 2, 754 737 .gpiomask = 0x1800, 755 738 .muxsel = { 2, 3, 1, 1 }, 756 - .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800 }, 739 + .gpiomux = { 0, 0x800, 0x1000, 0x1000 }, 740 + .gpiomute = 0x1800, 757 741 .pll = PLL_28, 758 742 .tuner_type = TUNER_PHILIPS_SECAM, 759 743 .tuner_addr = ADDR_UNSET, ··· 770 752 .svhs = 2, 771 753 .gpiomask = 0x1f0fff, 772 754 .muxsel = { 2, 3, 1, 1 }, 773 - .audiomux = { 0x20000, 0x30000, 0x10000, 0x00000, 0x40000 }, 755 + .gpiomux = { 0x20000, 0x30000, 0x10000, 0x00000 }, 756 + .gpiomute = 0x40000, 774 757 .needs_tvaudio = 0, 775 758 .tuner_type = TUNER_PHILIPS_PAL, 776 759 .tuner_addr = ADDR_UNSET, ··· 818 799 .svhs = 1, /* was: 4 */ 819 800 .gpiomask = 0, 820 801 .muxsel = { 2, 3, 1, 0, 0}, 821 - .audiomux = { 0 }, 802 + .gpiomux = { 0 }, 822 803 .needs_tvaudio = 1, 823 804 .tuner_type = -1, 824 805 .tuner_addr = ADDR_UNSET, ··· 834 815 .svhs = 2, 835 816 .gpiomask = 0x1800, /* 0x8dfe00 */ 836 817 .muxsel = { 2, 3, 1, 1 }, 837 - .audiomux = { 0, 0x0800, 0x1000, 0x1000, 0x1800, 0 }, 818 + .gpiomux = { 0, 0x0800, 0x1000, 0x1000 }, 819 + .gpiomute = 0x1800, 838 820 .pll = PLL_28, 839 821 .tuner_type = -1, 840 822 .tuner_addr = ADDR_UNSET, ··· 849 829 .svhs = 3, 850 830 .gpiomask = 1, 851 831 .muxsel = { 2, 3, 1, 1 }, 852 - .audiomux = { 1, 0, 0, 0, 0 }, 832 + .gpiomux = { 1, 0, 0, 0 }, 853 833 .pll = PLL_28, 854 834 .tuner_type = TUNER_PHILIPS_PAL, 855 835 .tuner_addr = ADDR_UNSET, ··· 865 845 .svhs = 2, 866 846 .gpiomask = 0, 867 847 .muxsel = { 2, 3, 1, 1 }, 868 - .audiomux = { 0 }, 848 + .gpiomux = { 0 }, 869 849 .needs_tvaudio = 0, 870 850 .tuner_type = 4, 871 851 .tuner_addr = ADDR_UNSET, ··· 879 859 .svhs = 2, 880 860 .gpiomask = 0xffff00, 881 861 .muxsel = { 2, 3, 1, 1 }, 882 - .audiomux = { 0x500, 0, 0x300, 0x900, 0x900 }, 862 + .gpiomux = { 0x500, 0, 0x300, 0x900 }, 863 + .gpiomute = 0x900, 883 864 .needs_tvaudio = 1, 884 865 .pll = PLL_28, 885 866 .tuner_type = TUNER_PHILIPS_PAL, ··· 896 875 .muxsel = { 2, 3, 1, 1, 0 }, /* TV, CVid, SVid, CVid over SVid connector */ 897 876 #if 0 898 877 .gpiomask = 0xc33000, 899 - .audiomux = { 0x422000,0x1000,0x0000,0x620000,0x800000 }, 878 + .gpiomux = { 0x422000,0x1000,0x0000,0x620000,0x800000 }, 900 879 #else 901 880 /* Alexander Varakin <avarakin@hotmail.com> [stereo version] */ 902 881 .gpiomask = 0xb33000, 903 - .audiomux = { 0x122000,0x1000,0x0000,0x620000,0x800000 }, 882 + .gpiomux = { 0x122000,0x1000,0x0000,0x620000 }, 883 + .gpiomute = 0x800000, 904 884 #endif 905 885 /* Audio Routing for "WinFast 2000 XP" (no tv stereo !) 906 886 gpio23 -- hef4052:nEnable (0x800000) ··· 931 909 .svhs = 2, 932 910 .gpiomask = 0x1800, 933 911 .muxsel = { 2, 3, 1, 1 }, 934 - .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800 }, 912 + .gpiomux = { 0, 0x800, 0x1000, 0x1000 }, 913 + .gpiomute = 0x1800, 935 914 .pll = PLL_28, 936 915 .tuner_type = -1, 937 916 .tuner_addr = ADDR_UNSET, ··· 948 925 .svhs = 2, 949 926 .gpiomask = 0x1800, 950 927 .muxsel = { 2, 3, 1, 1 }, 951 - .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800, 0 }, 928 + .gpiomux = { 0, 0x800, 0x1000, 0x1000 }, 929 + .gpiomute = 0x1800, 952 930 .pll = PLL_28, 953 931 .tuner_type = -1, 954 932 .tuner_addr = ADDR_UNSET, ··· 964 940 .svhs = 2, 965 941 .gpiomask = 0xff, 966 942 .muxsel = { 2, 3, 1, 1 }, 967 - .audiomux = { 0x21, 0x20, 0x24, 0x2c, 0x29, 0x29 }, 943 + .gpiomux = { 0x21, 0x20, 0x24, 0x2c }, 944 + .gpiomute = 0x29, 968 945 .no_msp34xx = 1, 969 946 .pll = PLL_28, 970 947 .tuner_type = -1, ··· 980 955 .svhs = 2, 981 956 .gpiomask = 0x551e00, 982 957 .muxsel = { 2, 3, 1, 0 }, 983 - .audiomux = { 0x551400, 0x551200, 0, 0, 0x551c00, 0x551200 }, 958 + .gpiomux = { 0x551400, 0x551200, 0, 0 }, 959 + .gpiomute = 0x551c00, 984 960 .needs_tvaudio = 1, 985 961 .pll = PLL_28, 986 962 .tuner_type = 1, ··· 997 971 .svhs = 2, 998 972 .gpiomask = 0x03000F, 999 973 .muxsel = { 2, 3, 1, 1 }, 1000 - .audiomux = { 2, 0xd0001, 0, 0, 1 }, 974 + .gpiomux = { 2, 0xd0001, 0, 0 }, 975 + .gpiomute = 1, 1001 976 .needs_tvaudio = 0, 1002 977 .pll = PLL_28, 1003 978 .tuner_type = -1, ··· 1015 988 .svhs = 2, 1016 989 .gpiomask = 7, 1017 990 .muxsel = { 2, 3, 1, 1 }, 1018 - .audiomux = { 4, 0, 2, 3, 1 }, 991 + .gpiomux = { 4, 0, 2, 3 }, 992 + .gpiomute = 1, 1019 993 .no_msp34xx = 1, 1020 994 .needs_tvaudio = 1, 1021 995 .tuner_type = TUNER_PHILIPS_NTSC, ··· 1033 1005 .svhs = 2, 1034 1006 .gpiomask = 15, 1035 1007 .muxsel = { 2, 3, 1, 1 }, 1036 - .audiomux = { 13, 4, 11, 7, 0, 0 }, 1008 + .gpiomux = { 13, 4, 11, 7 }, 1037 1009 .needs_tvaudio = 1, 1038 1010 .pll = PLL_28, 1039 1011 .tuner_type = -1, ··· 1050 1022 .svhs = 2, 1051 1023 .gpiomask = 0, 1052 1024 .muxsel = { 2, 3, 1, 1}, 1053 - .audiomux = { 0, 0, 0, 0, 0}, 1025 + .gpiomux = { 0, 0, 0, 0}, 1054 1026 .needs_tvaudio = 1, 1055 1027 .no_msp34xx = 1, 1056 1028 .pll = PLL_28, ··· 1066 1038 .svhs = 2, 1067 1039 .gpiomask = 0xe00b, 1068 1040 .muxsel = { 2, 3, 1, 1 }, 1069 - .audiomux = { 0xff9ff6, 0xff9ff6, 0xff1ff7, 0, 0xff3ffc }, 1041 + .gpiomux = { 0xff9ff6, 0xff9ff6, 0xff1ff7, 0 }, 1042 + .gpiomute = 0xff3ffc, 1070 1043 .no_msp34xx = 1, 1071 1044 .tuner_type = -1, 1072 1045 .tuner_addr = ADDR_UNSET, ··· 1083 1054 .svhs = -1, 1084 1055 .gpiomask = 3, 1085 1056 .muxsel = { 2, 3, 1, 1 }, 1086 - .audiomux = { 1, 1, 0, 2, 3 }, 1057 + .gpiomux = { 1, 1, 0, 2 }, 1058 + .gpiomute = 3, 1087 1059 .no_msp34xx = 1, 1088 1060 .pll = PLL_NONE, 1089 1061 .tuner_type = -1, ··· 1099 1069 .svhs = 3, 1100 1070 .gpiomask = 0, 1101 1071 .muxsel = { 2, 3, 1, 0, 0 }, 1102 - .audiomux = { 0 }, 1072 + .gpiomux = { 0 }, 1103 1073 .no_msp34xx = 1, 1104 1074 .pll = PLL_28, 1105 1075 .tuner_type = -1, ··· 1114 1084 .svhs = 2, 1115 1085 .gpiomask = 0xbcf03f, 1116 1086 .muxsel = { 2, 3, 1, 1 }, 1117 - .audiomux = { 0xbc803f, 0xbc903f, 0xbcb03f, 0, 0xbcb03f }, 1087 + .gpiomux = { 0xbc803f, 0xbc903f, 0xbcb03f, 0 }, 1088 + .gpiomute = 0xbcb03f, 1118 1089 .no_msp34xx = 1, 1119 1090 .pll = PLL_28, 1120 1091 .tuner_type = 21, ··· 1130 1099 .svhs = 2, 1131 1100 .gpiomask = 0x70000, 1132 1101 .muxsel = { 2, 3, 1, 1 }, 1133 - .audiomux = { 0x20000, 0x30000, 0x10000, 0, 0x40000, 0x20000 }, 1102 + .gpiomux = { 0x20000, 0x30000, 0x10000, 0 }, 1103 + .gpiomute = 0x40000, 1134 1104 .needs_tvaudio = 1, 1135 1105 .no_msp34xx = 1, 1136 1106 .pll = PLL_35, ··· 1150 1118 .svhs = 2, 1151 1119 .gpiomask = 15, 1152 1120 .muxsel = { 2, 3, 1, 1 }, 1153 - .audiomux = {2,0,0,0,1 }, 1121 + .gpiomux = {2,0,0,0 }, 1122 + .gpiomute = 1, 1154 1123 .needs_tvaudio = 1, 1155 1124 .pll = PLL_28, 1156 1125 .tuner_type = -1, ··· 1166 1133 .svhs = 2, 1167 1134 .gpiomask = 0x010f00, 1168 1135 .muxsel = {2, 3, 0, 0 }, 1169 - .audiomux = {0x10000, 0, 0x10000, 0, 0, 0 }, 1136 + .gpiomux = {0x10000, 0, 0x10000, 0 }, 1170 1137 .no_msp34xx = 1, 1171 1138 .pll = PLL_28, 1172 1139 .tuner_type = TUNER_ALPS_TSHC6_NTSC, ··· 1183 1150 .gpiomask = 0xAA0000, 1184 1151 .muxsel = { 2,3,1,1,-1 }, 1185 1152 .digital_mode = DIGITAL_MODE_CAMERA, 1186 - .audiomux = { 0x20000, 0, 0x80000, 0x80000, 0xa8000, 0x46000 }, 1153 + .gpiomux = { 0x20000, 0, 0x80000, 0x80000 }, 1154 + .gpiomute = 0xa8000, 1187 1155 .no_msp34xx = 1, 1188 1156 .pll = PLL_28, 1189 1157 .tuner_type = TUNER_PHILIPS_PAL_I, ··· 1209 1175 .svhs = 2, 1210 1176 .gpiomask = 7, 1211 1177 .muxsel = { 2, 0, 1, 1 }, 1212 - .audiomux = { 0, 1, 2, 3, 4 }, 1178 + .gpiomux = { 0, 1, 2, 3 }, 1179 + .gpiomute = 4, 1213 1180 .pll = PLL_28, 1214 1181 .tuner_type = -1 /* TUNER_ALPS_TMDH2_NTSC */, 1215 1182 .tuner_addr = ADDR_UNSET, ··· 1227 1192 .svhs = 3, 1228 1193 .gpiomask = 0x03000F, 1229 1194 .muxsel = { 2, 3, 1, 1 }, 1230 - .audiomux = { 1, 0xd0001, 0, 0, 10 }, 1195 + .gpiomux = { 1, 0xd0001, 0, 0 }, 1196 + .gpiomute = 10, 1231 1197 /* sound path (5 sources): 1232 1198 MUX1 (mask 0x03), Enable Pin 0x08 (0=enable, 1=disable) 1233 1199 0= ext. Audio IN ··· 1254 1218 .svhs = 2, 1255 1219 .gpiomask = 0x1c, 1256 1220 .muxsel = { 2, 3, 1, 1 }, 1257 - .audiomux = { 0, 0, 0x10, 8, 4 }, 1221 + .gpiomux = { 0, 0, 0x10, 8 }, 1222 + .gpiomute = 4, 1258 1223 .needs_tvaudio = 1, 1259 1224 .pll = PLL_28, 1260 1225 .tuner_type = TUNER_PHILIPS_PAL, ··· 1267 1230 /* Tim R�stermundt <rosterm@uni-muenster.de> 1268 1231 in de.comp.os.unix.linux.hardware: 1269 1232 options bttv card=0 pll=1 radio=1 gpiomask=0x18e0 1270 - audiomux=0x44c71f,0x44d71f,0,0x44d71f,0x44dfff 1233 + gpiomux =0x44c71f,0x44d71f,0,0x44d71f,0x44dfff 1271 1234 options tuner type=5 */ 1272 1235 .name = "Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90]", 1273 1236 .video_inputs = 4, ··· 1276 1239 .svhs = 2, 1277 1240 .gpiomask = 0x18e0, 1278 1241 .muxsel = { 2, 3, 1, 1 }, 1279 - .audiomux = { 0x0000,0x0800,0x1000,0x1000,0x18e0 }, 1242 + .gpiomux = { 0x0000,0x0800,0x1000,0x1000 }, 1243 + .gpiomute = 0x18e0, 1280 1244 /* For cards with tda9820/tda9821: 1281 1245 0x0000: Tuner normal stereo 1282 1246 0x0080: Tuner A2 SAP (second audio program = Zweikanalton) ··· 1297 1259 .svhs = 2, 1298 1260 .gpiomask = 0xF, 1299 1261 .muxsel = { 2, 3, 1, 0 }, 1300 - .audiomux = { 2, 0, 0, 0, 10 }, 1262 + .gpiomux = { 2, 0, 0, 0 }, 1263 + .gpiomute = 10, 1301 1264 .needs_tvaudio = 0, 1302 1265 .pll = PLL_28, 1303 1266 .tuner_type = TUNER_TEMIC_PAL, ··· 1316 1277 .svhs = 2, 1317 1278 .gpiomask = 0x1800, 1318 1279 .muxsel = { 2, 3, 1, 1 }, 1319 - .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800, 0 }, 1280 + .gpiomux = { 0, 0x800, 0x1000, 0x1000 }, 1281 + .gpiomute = 0x1800, 1320 1282 .pll = PLL_28, 1321 1283 .tuner_type = 5, 1322 1284 .tuner_addr = ADDR_UNSET, ··· 1334 1294 .svhs = 1, 1335 1295 .gpiomask = 0, 1336 1296 .muxsel = { 3, 1 }, 1337 - .audiomux = { 0 }, 1297 + .gpiomux = { 0 }, 1338 1298 .needs_tvaudio = 0, 1339 1299 .no_msp34xx = 1, 1340 1300 .pll = PLL_35, ··· 1351 1311 .svhs = 2, 1352 1312 .gpiomask = 0xe00, 1353 1313 .muxsel = { 2, 3, 1, 1}, 1354 - .audiomux = { 0x400, 0x400, 0x400, 0x400, 0x800, 0x400 }, 1314 + .gpiomux = { 0x400, 0x400, 0x400, 0x400 }, 1315 + .gpiomute = 0x800, 1355 1316 .needs_tvaudio = 1, 1356 1317 .pll = PLL_28, 1357 1318 .tuner_type = TUNER_TEMIC_4036FY5_NTSC, ··· 1368 1327 .svhs = 2, 1369 1328 .gpiomask = 0x03000F, 1370 1329 .muxsel = { 2, 3, 1, 0 }, 1371 - .audiomux = { 2, 0, 0, 0, 1 }, 1330 + .gpiomux = { 2, 0, 0, 0 }, 1331 + .gpiomute = 1, 1372 1332 .pll = PLL_28, 1373 1333 .tuner_type = 0, 1374 1334 .tuner_addr = ADDR_UNSET, ··· 1386 1344 .svhs = -1, 1387 1345 .gpiomask = 11, 1388 1346 .muxsel = { 2, 3, 1, 1 }, 1389 - .audiomux = { 2, 0, 0, 1, 8 }, 1347 + .gpiomux = { 2, 0, 0, 1 }, 1348 + .gpiomute = 8, 1390 1349 .pll = PLL_35, 1391 1350 .tuner_type = TUNER_TEMIC_PAL, 1392 1351 .tuner_addr = ADDR_UNSET, ··· 1402 1359 .svhs = 1, 1403 1360 .gpiomask = 0xF, 1404 1361 .muxsel = { 2, 2 }, 1405 - .audiomux = { }, 1362 + .gpiomux = { }, 1406 1363 .no_msp34xx = 1, 1407 1364 .needs_tvaudio = 0, 1408 1365 .pll = PLL_28, ··· 1421 1378 .svhs = 2, 1422 1379 .gpiomask = 0xFF, 1423 1380 .muxsel = { 2, 3, 1, 0 }, 1424 - .audiomux = { 1, 0, 4, 4, 9 }, 1381 + .gpiomux = { 1, 0, 4, 4 }, 1382 + .gpiomute = 9, 1425 1383 .needs_tvaudio = 0, 1426 1384 .pll = PLL_28, 1427 1385 .tuner_type = TUNER_PHILIPS_PAL, ··· 1438 1394 .svhs = 2, 1439 1395 .gpiomask = 0xf03f, 1440 1396 .muxsel = { 2, 3, 1, 0 }, 1441 - .audiomux = { 0xbffe, 0, 0xbfff, 0, 0xbffe }, 1397 + .gpiomux = { 0xbffe, 0, 0xbfff, 0 }, 1398 + .gpiomute = 0xbffe, 1442 1399 .pll = PLL_28, 1443 1400 .tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL, 1444 1401 .tuner_addr = ADDR_UNSET, ··· 1456 1411 .svhs = -1, 1457 1412 .gpiomask = 1, 1458 1413 .muxsel = { 2, 3, 0, 1 }, 1459 - .audiomux = { 0, 0, 1, 0, 0 }, 1414 + .gpiomux = { 0, 0, 1, 0 }, 1460 1415 .no_msp34xx = 1, 1461 1416 .pll = PLL_28, 1462 1417 .tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL, ··· 1475 1430 /* Radio changed from 1e80 to 0x800 to make 1476 1431 FlyVideo2000S in .hu happy (gm)*/ 1477 1432 /* -dk-???: set mute=0x1800 for tda9874h daughterboard */ 1478 - .audiomux = { 0x0000,0x0800,0x1000,0x1000,0x1800, 0x1080 }, 1433 + .gpiomux = { 0x0000,0x0800,0x1000,0x1000 }, 1434 + .gpiomute = 0x1800, 1479 1435 .audio_hook = fv2000s_audio, 1480 1436 .no_msp34xx = 1, 1481 1437 .no_tda9875 = 1, ··· 1494 1448 .svhs = 2, 1495 1449 .gpiomask = 0xffff00, 1496 1450 .muxsel = { 2, 3, 1, 1 }, 1497 - .audiomux = { 0x500, 0x500, 0x300, 0x900, 0x900 }, 1451 + .gpiomux = { 0x500, 0x500, 0x300, 0x900 }, 1452 + .gpiomute = 0x900, 1498 1453 .needs_tvaudio = 1, 1499 1454 .pll = PLL_28, 1500 1455 .tuner_type = TUNER_PHILIPS_PAL, ··· 1512 1465 .svhs = 2, 1513 1466 .gpiomask = 0x010f00, 1514 1467 .muxsel = {2, 3, 0, 0 }, 1515 - .audiomux = {0x10000, 0, 0x10000, 0, 0, 0 }, 1468 + .gpiomux = {0x10000, 0, 0x10000, 0 }, 1516 1469 .no_msp34xx = 1, 1517 1470 .pll = PLL_28, 1518 1471 .tuner_type = TUNER_SHARP_2U5JF5540_NTSC, ··· 1533 1486 .gpiomask = 0x4f8a00, 1534 1487 /* 0x100000: 1=MSP enabled (0=disable again) 1535 1488 * 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) */ 1536 - .audiomux = {0x947fff, 0x987fff,0x947fff,0x947fff, 0x947fff}, 1489 + .gpiomux = {0x947fff, 0x987fff,0x947fff,0x947fff }, 1490 + .gpiomute = 0x947fff, 1537 1491 /* tvtuner, radio, external,internal, mute, stereo 1538 1492 * tuner, Composit, SVid, Composit-on-Svid-adapter */ 1539 1493 .muxsel = { 2, 3 ,0 ,1 }, ··· 1566 1518 .svhs = 2, 1567 1519 .gpiomask = 15, 1568 1520 .muxsel = { 2, 3, 1, 1 }, 1569 - .audiomux = { 0, 0, 11, 7, 13, 0 }, /* TV and Radio with same GPIO ! */ 1521 + .gpiomux = { 0, 0, 11, 7 }, /* TV and Radio with same GPIO ! */ 1522 + .gpiomute = 13, 1570 1523 .needs_tvaudio = 1, 1571 1524 .pll = PLL_28, 1572 1525 .tuner_type = 25, ··· 1606 1557 .svhs = 2, 1607 1558 .gpiomask = 0x3f, 1608 1559 .muxsel = { 2, 3, 1, 1 }, 1609 - .audiomux = { 0x01, 0x00, 0x03, 0x03, 0x09, 0x02 }, 1560 + .gpiomux = { 0x01, 0x00, 0x03, 0x03 }, 1561 + .gpiomute = 0x09, 1610 1562 .needs_tvaudio = 1, 1611 1563 .no_msp34xx = 1, 1612 1564 .no_tda9875 = 1, ··· 1636 1586 .svhs = 4, 1637 1587 .gpiomask = 0, 1638 1588 .muxsel = { 2, 3, 1, 0, 0 }, 1639 - .audiomux = { 0 }, 1589 + .gpiomux = { 0 }, 1640 1590 .needs_tvaudio = 0, 1641 1591 .tuner_type = -1, 1642 1592 .tuner_addr = ADDR_UNSET, ··· 1668 1618 .svhs = 2, 1669 1619 .gpiomask = 0x1C800F, /* Bit0-2: Audio select, 8-12:remote control 14:remote valid 15:remote reset */ 1670 1620 .muxsel = { 2, 1, 1, }, 1671 - .audiomux = { 0, 1, 2, 2, 4 }, 1621 + .gpiomux = { 0, 1, 2, 2 }, 1622 + .gpiomute = 4, 1672 1623 .needs_tvaudio = 0, 1673 1624 .tuner_type = TUNER_PHILIPS_PAL, 1674 1625 .tuner_addr = ADDR_UNSET, ··· 1688 1637 .svhs = 2, 1689 1638 .gpiomask = 0x140007, 1690 1639 .muxsel = { 2, 3, 1, 1 }, 1691 - .audiomux = { 0, 1, 2, 3, 4, 0 }, 1640 + .gpiomux = { 0, 1, 2, 3 }, 1641 + .gpiomute = 4, 1692 1642 .tuner_type = TUNER_PHILIPS_NTSC, 1693 1643 .tuner_addr = ADDR_UNSET, 1694 1644 .radio_addr = ADDR_UNSET, ··· 1703 1651 .svhs = -1, 1704 1652 .gpiomask = 0, 1705 1653 .muxsel = { 2, 3, 1, 0 }, 1706 - .audiomux = { 0 }, 1654 + .gpiomux = { 0 }, 1707 1655 .needs_tvaudio = 0, 1708 1656 .no_msp34xx = 1, 1709 1657 .pll = PLL_28, ··· 1719 1667 .svhs = 2, 1720 1668 .gpiomask = 7, 1721 1669 .muxsel = { 2, 3, 1, 1 }, /* Tuner, SVid, SVHS, SVid to SVHS connector */ 1722 - .audiomux = { 0 ,0 ,4, 4,4,4},/* Yes, this tuner uses the same audio output for TV and FM radio! 1670 + .gpiomux = { 0, 0, 4, 4 },/* Yes, this tuner uses the same audio output for TV and FM radio! 1723 1671 * This card lacks external Audio In, so we mute it on Ext. & Int. 1724 1672 * The PCB can take a sbx1637/sbx1673, wiring unknown. 1725 1673 * This card lacks PCI subsystem ID, sigh. 1726 - * audiomux=1: lower volume, 2+3: mute 1674 + * gpiomux =1: lower volume, 2+3: mute 1727 1675 * btwincap uses 0x80000/0x80003 1728 1676 */ 1677 + .gpiomute = 4, 1729 1678 .needs_tvaudio = 0, 1730 1679 .no_msp34xx = 1, 1731 1680 .pll = PLL_28, ··· 1773 1720 .radio_addr = ADDR_UNSET, 1774 1721 1775 1722 .gpiomask = 7, 1776 - .audiomux = {7}, 1723 + .gpiomux = {7}, 1777 1724 }, 1778 1725 [BTTV_BOARD_GVBCTV5PCI] = { 1779 1726 .name = "IODATA GV-BCTV5/PCI", ··· 1783 1730 .svhs = 2, 1784 1731 .gpiomask = 0x0f0f80, 1785 1732 .muxsel = {2, 3, 1, 0 }, 1786 - .audiomux = {0x030000, 0x010000, 0, 0, 0x020000, 0}, 1733 + .gpiomux = {0x030000, 0x010000, 0, 0 }, 1734 + .gpiomute = 0x020000, 1787 1735 .no_msp34xx = 1, 1788 1736 .pll = PLL_28, 1789 1737 .tuner_type = TUNER_PHILIPS_NTSC_M, ··· 2014 1960 .gpiomask = 2, 2015 1961 /* TV, Comp1, Composite over SVID con, SVID */ 2016 1962 .muxsel = { 2, 3, 1, 1 }, 2017 - .audiomux = { 2, 2, 0, 0, 0 }, 1963 + .gpiomux = { 2, 2, 0, 0 }, 2018 1964 .pll = PLL_28, 2019 1965 .has_radio = 1, 2020 1966 .tuner_type = TUNER_PHILIPS_PAL, ··· 2038 1984 .svhs = -1, 2039 1985 .gpiomask = 7, 2040 1986 .muxsel = { 2, 3, 1, 1}, 2041 - .audiomux = { 0, 1, 2, 3, 4}, 1987 + .gpiomux = { 0, 1, 2, 3}, 1988 + .gpiomute = 4, 2042 1989 .needs_tvaudio = 1, 2043 1990 .tuner_type = 5, 2044 1991 .tuner_addr = ADDR_UNSET, ··· 2071 2016 .svhs = -1, 2072 2017 .gpiomask = 0, 2073 2018 .muxsel = { 2, 3 }, 2074 - .audiomux = { 0 }, 2019 + .gpiomux = { 0 }, 2075 2020 .needs_tvaudio = 0, 2076 2021 .no_msp34xx = 1, 2077 2022 .pll = PLL_28, ··· 2090 2035 .gpiomask = 0x001e8007, 2091 2036 .muxsel = { 2, 3, 1, 0 }, 2092 2037 /* Tuner, Radio, external, internal, off, on */ 2093 - .audiomux = { 0x08, 0x0f, 0x0a, 0x08, 0x0f, 0x08 }, 2038 + .gpiomux = { 0x08, 0x0f, 0x0a, 0x08 }, 2039 + .gpiomute = 0x0f, 2094 2040 .needs_tvaudio = 0, 2095 2041 .no_msp34xx = 1, 2096 2042 .pll = PLL_28, ··· 2208 2152 .svhs = -1, 2209 2153 .gpiomask = 0, 2210 2154 .muxsel = { 2, 3, 1, 0 }, 2211 - .audiomux = { 0 }, 2155 + .gpiomux = { 0 }, 2212 2156 .needs_tvaudio = 0, 2213 2157 .no_msp34xx = 1, 2214 2158 .pll = PLL_28, ··· 2225 2169 .svhs = 3, 2226 2170 .gpiomask = 0x00, 2227 2171 .muxsel = { 2, 3, 1, 0 }, 2228 - .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ 2172 + .gpiomux = { 0, 0, 0, 0 }, /* card has no audio */ 2229 2173 .needs_tvaudio = 1, 2230 2174 .pll = PLL_28, 2231 2175 .tuner_type = -1, ··· 2240 2184 .svhs = 3, 2241 2185 .gpiomask = 0x00, 2242 2186 .muxsel = { 2, 3, 1, 1 }, 2243 - .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ 2187 + .gpiomux = { 0, 0, 0, 0 }, /* card has no audio */ 2244 2188 .needs_tvaudio = 1, 2245 2189 .pll = PLL_28, 2246 2190 .tuner_type = -1, ··· 2260 2204 via the upper nibble of muxsel. here: used for 2261 2205 xternal video-mux */ 2262 2206 .muxsel = { 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33, 0x01, 0x00 }, 2263 - .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ 2207 + .gpiomux = { 0, 0, 0, 0 }, /* card has no audio */ 2264 2208 .needs_tvaudio = 1, 2265 2209 .pll = PLL_28, 2266 2210 .tuner_type = -1, ··· 2278 2222 via the upper nibble of muxsel. here: used for 2279 2223 xternal video-mux */ 2280 2224 .muxsel = { 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33, 0x01, 0x01 }, 2281 - .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ 2225 + .gpiomux = { 0, 0, 0, 0 }, /* card has no audio */ 2282 2226 .needs_tvaudio = 1, 2283 2227 .pll = PLL_28, 2284 2228 .tuner_type = -1, ··· 2366 2310 .svhs = 2, 2367 2311 .gpiomask = 3, 2368 2312 .muxsel = { 2, 3, 1, 1 }, 2369 - .audiomux = { 1, 1, 1, 1, 0 }, 2313 + .gpiomux = { 1, 1, 1, 1 }, 2370 2314 .needs_tvaudio = 1, 2371 2315 .tuner_type = TUNER_PHILIPS_PAL, 2372 2316 .tuner_addr = ADDR_UNSET, ··· 2397 2341 .svhs = 2, 2398 2342 .gpiomask = 0x008007, 2399 2343 .muxsel = { 2, 3, 0, 0 }, 2400 - .audiomux = { 0, 0, 0, 0, 0x000003, 0 }, 2344 + .gpiomux = { 0, 0, 0, 0 }, 2345 + .gpiomute = 0x000003, 2401 2346 .pll = PLL_28, 2402 2347 .tuner_type = TUNER_PHILIPS_PAL, 2403 2348 .tuner_addr = ADDR_UNSET, ··· 2434 2377 .needs_tvaudio = 0, 2435 2378 .gpiomask = 0x68, 2436 2379 .muxsel = { 2, 3, 1 }, 2437 - .audiomux = { 0x68, 0x68, 0x61, 0x61, 0x00 }, 2380 + .gpiomux = { 0x68, 0x68, 0x61, 0x61 }, 2438 2381 .pll = PLL_28, 2439 2382 }, 2440 2383 ··· 2449 2392 .svhs = 2, 2450 2393 .gpiomask = 0x008007, 2451 2394 .muxsel = { 2, 3, 1, 1 }, 2452 - .audiomux = { 0, 1, 2, 2, 3 }, 2395 + .gpiomux = { 0, 1, 2, 2 }, 2396 + .gpiomute = 3, 2453 2397 .needs_tvaudio = 0, 2454 2398 .pll = PLL_28, 2455 2399 .tuner_type = TUNER_PHILIPS_PAL, ··· 2475 2417 .no_tda9875 = 1, 2476 2418 .no_tda7432 = 1, 2477 2419 .muxsel = {2,2,2,2},/*878A input is always MUX0, see above.*/ 2478 - .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ 2420 + .gpiomux = { 0, 0, 0, 0 }, /* card has no audio */ 2479 2421 .pll = PLL_28, 2480 2422 .needs_tvaudio = 0, 2481 2423 .muxsel_hook = picolo_tetra_muxsel,/*Required as it doesn't follow the classic input selection policy*/ ··· 2493 2435 .svhs = 2, 2494 2436 .gpiomask = 0x0000000f, 2495 2437 .muxsel = { 2, 1, 1 }, 2496 - .audiomux = { 0x02, 0x00, 0x00, 0x00, 0x00 }, 2438 + .gpiomux = { 0x02, 0x00, 0x00, 0x00 }, 2497 2439 .tuner_type = TUNER_TEMIC_PAL, 2498 2440 .tuner_addr = ADDR_UNSET, 2499 2441 .radio_addr = ADDR_UNSET, ··· 2549 2491 .muxsel = { 2, 2, 2, 2, 2, 2, 2, 2, 2550 2492 3, 3, 3, 3, 3, 3, 3, 3 }, 2551 2493 .muxsel_hook = sigmaSQ_muxsel, 2552 - .audiomux = { 0 }, 2494 + .gpiomux = { 0 }, 2553 2495 .no_msp34xx = 1, 2554 2496 .pll = PLL_28, 2555 2497 .tuner_type = -1, ··· 2566 2508 .gpiomask = 0x0, 2567 2509 .muxsel = { 2, 2, 2, 2 }, 2568 2510 .muxsel_hook = sigmaSLC_muxsel, 2569 - .audiomux = { 0 }, 2511 + .gpiomux = { 0 }, 2570 2512 .no_msp34xx = 1, 2571 2513 .pll = PLL_28, 2572 2514 .tuner_type = -1, ··· 2584 2526 .svhs = -1, 2585 2527 .gpiomask = 0xFF, 2586 2528 .muxsel = { 2, 3, 1, 1 }, 2587 - .audiomux = { 2, 0, 0, 0, 10 }, 2529 + .gpiomux = { 2, 0, 0, 0 }, 2530 + .gpiomute = 10, 2588 2531 .needs_tvaudio = 0, 2589 2532 .pll = PLL_28, 2590 2533 .tuner_type = TUNER_PHILIPS_PAL, ··· 2619 2560 .svhs = 2, 2620 2561 .gpiomask = 0x3f, 2621 2562 .muxsel = {2, 3, 1, 0 }, 2622 - .audiomux = {0x31, 0x31, 0x31, 0x31, 0x31, 0x31 }, 2563 + .gpiomux = {0x31, 0x31, 0x31, 0x31 }, 2564 + .gpiomute = 0x31, 2623 2565 .no_msp34xx = 1, 2624 2566 .pll = PLL_28, 2625 2567 .tuner_type = TUNER_PHILIPS_NTSC_M, ··· 2643 2583 .tuner_addr = ADDR_UNSET, 2644 2584 .radio_addr = ADDR_UNSET, 2645 2585 .gpiomask = 0x008007, 2646 - .audiomux = { 0, 0x000001,0,0, 0 }, 2586 + .gpiomux = { 0, 0x000001,0,0 }, 2647 2587 .needs_tvaudio = 1, 2648 2588 .has_radio = 1, 2649 2589 }, ··· 2753 2693 .svhs = 2, 2754 2694 .muxsel = { 2, 3, 1 }, 2755 2695 .gpiomask = 0x00e00007, 2756 - .audiomux = { 0x00400005, 0, 0x00000001, 0, 0x00c00007, 0 }, 2696 + .gpiomux = { 0x00400005, 0, 0x00000001, 0 }, 2697 + .gpiomute = 0x00c00007, 2757 2698 .no_msp34xx = 1, 2758 2699 .no_tda9875 = 1, 2759 2700 .no_tda7432 = 1, ··· 2770 2709 .svhs = 2, 2771 2710 .gpiomask = 0x01fe00, 2772 2711 .muxsel = { 2, 3, 1, 1 }, 2773 - .audiomux = { 0x001e00, 0, 0x018000, 0x014000, 0x002000, 0 }, 2712 + .gpiomux = { 0x001e00, 0, 0x018000, 0x014000 }, 2713 + .gpiomute = 0x002000, 2774 2714 .needs_tvaudio = 1, 2775 2715 .pll = PLL_28, 2776 2716 .tuner_type = TUNER_YMEC_TVF66T5_B_DFF, ··· 2788 2726 .svhs = 2, 2789 2727 .gpiomask = 0x001c0007, 2790 2728 .muxsel = { 2, 3, 1, 1 }, 2791 - .audiomux = { 0, 1, 2, 2, 3 }, 2729 + .gpiomux = { 0, 1, 2, 2 }, 2730 + .gpiomute = 3, 2792 2731 .needs_tvaudio = 0, 2793 2732 .pll = PLL_28, 2794 2733 .tuner_type = TUNER_TENA_9533_DI, ··· 2808 2745 .gpiomask = 0x01fe00, 2809 2746 .muxsel = { 2,3,1,1,-1 }, 2810 2747 .digital_mode = DIGITAL_MODE_CAMERA, 2811 - .audiomux = { 0x00400, 0x10400, 0x04400, 0x80000, 0x12400, 0x46000 }, 2748 + .gpiomux = { 0x00400, 0x10400, 0x04400, 0x80000 }, 2749 + .gpiomute = 0x12400, 2812 2750 .no_msp34xx = 1, 2813 2751 .pll = PLL_28, 2814 2752 .tuner_type = TUNER_LG_PAL_FM, ··· 2827 2763 .svhs = 2, 2828 2764 .gpiomask = 0x3f, 2829 2765 .muxsel = { 2, 3, 1, 1 }, 2830 - .audiomux = { 0x21, 0x20, 0x24, 0x2c, 0x29, 0x29 }, 2766 + .gpiomux = { 0x21, 0x20, 0x24, 0x2c }, 2767 + .gpiomute = 0x29, 2831 2768 .no_msp34xx = 1, 2832 2769 .pll = PLL_28, 2833 2770 .tuner_type = TUNER_YMEC_TVF_5533MF, ··· 2862 2797 .svhs = 2, 2863 2798 .gpiomask = 15, 2864 2799 .muxsel = { 2, 3, 1, 1 }, 2865 - .audiomux = { 2, 0, 0, 0, 1 }, 2800 + .gpiomux = { 2, 0, 0, 0 }, 2801 + .gpiomute = 1, 2866 2802 .needs_tvaudio = 1, 2867 2803 .pll = PLL_28, 2868 2804 .tuner_type = 2, ··· 2879 2813 .svhs = 2, 2880 2814 .gpiomask = 0x108007, 2881 2815 .muxsel = { 2, 3, 1, 1 }, 2882 - .audiomux = { 100000, 100002, 100002, 100000 }, 2816 + .gpiomux = { 100000, 100002, 100002, 100000 }, 2883 2817 .no_msp34xx = 1, 2884 2818 .no_tda9875 = 1, 2885 2819 .no_tda7432 = 1, ··· 2919 2853 .svhs = 2, 2920 2854 .gpiomask = 7, 2921 2855 .muxsel = { 2, 3, 1, 1 }, 2922 - .audiomux = { 0, 1, 2, 3, 4 }, 2856 + .gpiomux = { 0, 1, 2, 3 }, 2857 + .gpiomute = 4, 2923 2858 .tuner_type = TUNER_TEMIC_4009FR5_PAL, 2924 2859 .tuner_addr = ADDR_UNSET, 2925 2860 .radio_addr = ADDR_UNSET, ··· 2992 2925 if (UNSET != audiomux[0]) { 2993 2926 gpiobits = 0; 2994 2927 for (i = 0; i < 5; i++) { 2995 - bttv_tvcards[btv->c.type].audiomux[i] = audiomux[i]; 2928 + bttv_tvcards[btv->c.type].gpiomux[i] = audiomux[i]; 2996 2929 gpiobits |= audiomux[i]; 2997 2930 } 2998 2931 } else { 2999 2932 gpiobits = audioall; 3000 2933 for (i = 0; i < 5; i++) { 3001 - bttv_tvcards[btv->c.type].audiomux[i] = audioall; 2934 + bttv_tvcards[btv->c.type].gpiomux[i] = audioall; 3002 2935 } 3003 2936 } 3004 2937 bttv_tvcards[btv->c.type].gpiomask = (UNSET != gpiomask) ? gpiomask : gpiobits; 3005 2938 printk(KERN_INFO "bttv%d: gpio config override: mask=0x%x, mux=", 3006 2939 btv->c.nr,bttv_tvcards[btv->c.type].gpiomask); 3007 2940 for (i = 0; i < 5; i++) { 3008 - printk("%s0x%x", i ? "," : "", bttv_tvcards[btv->c.type].audiomux[i]); 2941 + printk("%s0x%x", i ? "," : "", bttv_tvcards[btv->c.type].gpiomux[i]); 3009 2942 } 3010 2943 printk("\n"); 3011 2944 } ··· 3863 3796 { 3864 3797 /* fix up our card entry */ 3865 3798 if(norm==VIDEO_MODE_NTSC) { 3866 - bttv_tvcards[BTTV_BOARD_VOODOOTV_FM].audiomux[0]=0x957fff; 3867 - bttv_tvcards[BTTV_BOARD_VOODOOTV_FM].audiomux[4]=0x957fff; 3799 + bttv_tvcards[BTTV_BOARD_VOODOOTV_FM].gpiomux[TVAUDIO_INPUT_TUNER]=0x957fff; 3800 + bttv_tvcards[BTTV_BOARD_VOODOOTV_FM].gpiomute=0x957fff; 3868 3801 dprintk("bttv_tda9880_setnorm to NTSC\n"); 3869 3802 } 3870 3803 else { 3871 - bttv_tvcards[BTTV_BOARD_VOODOOTV_FM].audiomux[0]=0x947fff; 3872 - bttv_tvcards[BTTV_BOARD_VOODOOTV_FM].audiomux[4]=0x947fff; 3804 + bttv_tvcards[BTTV_BOARD_VOODOOTV_FM].gpiomux[TVAUDIO_INPUT_TUNER]=0x947fff; 3805 + bttv_tvcards[BTTV_BOARD_VOODOOTV_FM].gpiomute=0x947fff; 3873 3806 dprintk("bttv_tda9880_setnorm to PAL\n"); 3874 3807 } 3875 3808 /* set GPIO according */ 3876 3809 gpio_bits(bttv_tvcards[btv->c.type].gpiomask, 3877 - bttv_tvcards[btv->c.type].audiomux[btv->audio]); 3810 + bttv_tvcards[btv->c.type].gpiomux[btv->audio]); 3878 3811 } 3879 3812 3880 3813
+55 -34
drivers/media/video/bt8xx/bttv-driver.c
··· 36 36 #include <linux/kdev_t.h> 37 37 #include "bttvp.h" 38 38 #include <media/v4l2-common.h> 39 + #include <media/tvaudio.h> 39 40 40 41 #include <linux/dma-mapping.h> 41 42 ··· 927 926 928 927 static char *audio_modes[] = { 929 928 "audio: tuner", "audio: radio", "audio: extern", 930 - "audio: intern", "audio: off" 929 + "audio: intern", "audio: mute" 931 930 }; 932 931 933 932 static int 934 - audio_mux(struct bttv *btv, int mode) 933 + audio_mux(struct bttv *btv, int input, int mute) 935 934 { 936 - int val,mux,i2c_mux,signal; 935 + int gpio_val, signal; 936 + struct v4l2_audio aud_input; 937 + struct v4l2_control ctrl; 938 + struct i2c_client *c; 937 939 940 + memset(&aud_input, 0, sizeof(aud_input)); 938 941 gpio_inout(bttv_tvcards[btv->c.type].gpiomask, 939 942 bttv_tvcards[btv->c.type].gpiomask); 940 943 signal = btread(BT848_DSTATUS) & BT848_DSTATUS_HLOC; 941 944 942 - switch (mode) { 943 - case AUDIO_MUTE: 944 - btv->audio |= AUDIO_MUTE; 945 - break; 946 - case AUDIO_UNMUTE: 947 - btv->audio &= ~AUDIO_MUTE; 948 - break; 949 - case AUDIO_TUNER: 950 - case AUDIO_RADIO: 951 - case AUDIO_EXTERN: 952 - case AUDIO_INTERN: 953 - btv->audio &= AUDIO_MUTE; 954 - btv->audio |= mode; 955 - } 956 - i2c_mux = mux = (btv->audio & AUDIO_MUTE) ? AUDIO_OFF : btv->audio; 957 - if (btv->opt_automute && !signal && !btv->radio_user) 958 - mux = AUDIO_OFF; 945 + btv->mute = mute; 946 + btv->audio = input; 959 947 960 - val = bttv_tvcards[btv->c.type].audiomux[mux]; 961 - gpio_bits(bttv_tvcards[btv->c.type].gpiomask,val); 948 + /* automute */ 949 + mute = mute || (btv->opt_automute && !signal && !btv->radio_user); 950 + 951 + if (mute) 952 + gpio_val = bttv_tvcards[btv->c.type].gpiomute; 953 + else 954 + gpio_val = bttv_tvcards[btv->c.type].gpiomux[input]; 955 + aud_input.index = btv->audio; 956 + 957 + gpio_bits(bttv_tvcards[btv->c.type].gpiomask, gpio_val); 962 958 if (bttv_gpio) 963 - bttv_gpio_tracking(btv,audio_modes[mux]); 964 - if (!in_interrupt()) 965 - bttv_call_i2c_clients(btv,AUDC_SET_INPUT,&(i2c_mux)); 959 + bttv_gpio_tracking(btv, audio_modes[mute ? 4 : input]); 960 + if (in_interrupt()) 961 + return 0; 962 + 963 + ctrl.id = V4L2_CID_AUDIO_MUTE; 964 + /* take automute into account, just btv->mute is not enough */ 965 + ctrl.value = mute; 966 + bttv_call_i2c_clients(btv, VIDIOC_S_CTRL, &ctrl); 967 + c = btv->i2c_msp34xx_client; 968 + if (c) 969 + c->driver->command(c, VIDIOC_S_AUDIO, &aud_input); 970 + c = btv->i2c_tvaudio_client; 971 + if (c) 972 + c->driver->command(c, VIDIOC_S_AUDIO, &aud_input); 966 973 return 0; 974 + } 975 + 976 + static inline int 977 + audio_mute(struct bttv *btv, int mute) 978 + { 979 + return audio_mux(btv, btv->audio, mute); 980 + } 981 + 982 + static inline int 983 + audio_input(struct bttv *btv, int input) 984 + { 985 + return audio_mux(btv, input, btv->mute); 967 986 } 968 987 969 988 static void ··· 1044 1023 } else { 1045 1024 video_mux(btv,input); 1046 1025 } 1047 - audio_mux(btv,(input == bttv_tvcards[btv->c.type].tuner ? 1048 - AUDIO_TUNER : AUDIO_EXTERN)); 1026 + audio_input(btv,(input == bttv_tvcards[btv->c.type].tuner ? 1027 + TVAUDIO_INPUT_TUNER : TVAUDIO_INPUT_EXTERN)); 1049 1028 set_tvnorm(btv,btv->tvnorm); 1050 1029 i2c_vidiocschan(btv); 1051 1030 } ··· 1257 1236 case V4L2_CID_AUDIO_MUTE: 1258 1237 if (c->value) { 1259 1238 va.flags |= VIDEO_AUDIO_MUTE; 1260 - audio_mux(btv, AUDIO_MUTE); 1239 + audio_mute(btv, 1); 1261 1240 } else { 1262 1241 va.flags &= ~VIDEO_AUDIO_MUTE; 1263 - audio_mux(btv, AUDIO_UNMUTE); 1242 + audio_mute(btv, 0); 1264 1243 } 1265 1244 break; 1266 1245 ··· 1675 1654 return -EINVAL; 1676 1655 1677 1656 mutex_lock(&btv->lock); 1678 - audio_mux(btv, (v->flags&VIDEO_AUDIO_MUTE) ? AUDIO_MUTE : AUDIO_UNMUTE); 1657 + audio_mute(btv, (v->flags&VIDEO_AUDIO_MUTE) ? 1 : 0); 1679 1658 bttv_call_i2c_clients(btv,cmd,v); 1680 1659 1681 1660 /* card specific hooks */ ··· 3184 3163 3185 3164 file->private_data = btv; 3186 3165 3187 - bttv_call_i2c_clients(btv,AUDC_SET_RADIO,&btv->tuner_type); 3188 - audio_mux(btv,AUDIO_RADIO); 3166 + bttv_call_i2c_clients(btv,AUDC_SET_RADIO,NULL); 3167 + audio_input(btv,TVAUDIO_INPUT_RADIO); 3189 3168 3190 3169 mutex_unlock(&btv->lock); 3191 3170 return 0; ··· 3771 3750 bttv_irq_switch_video(btv); 3772 3751 3773 3752 if ((astat & BT848_INT_HLOCK) && btv->opt_automute) 3774 - audio_mux(btv, -1); 3753 + audio_mute(btv, btv->mute); /* trigger automute */ 3775 3754 3776 3755 if (astat & (BT848_INT_SCERR|BT848_INT_OCERR)) { 3777 3756 printk(KERN_INFO "bttv%d: %s%s @ %08x,",btv->c.nr, ··· 4072 4051 bt848_contrast(btv,32768); 4073 4052 bt848_hue(btv,32768); 4074 4053 bt848_sat(btv,32768); 4075 - audio_mux(btv,AUDIO_MUTE); 4054 + audio_mute(btv, 1); 4076 4055 set_input(btv,0); 4077 4056 } 4078 4057
+4
drivers/media/video/bt8xx/bttv-i2c.c
··· 302 302 if (!client->driver->command) 303 303 return 0; 304 304 305 + if (client->driver->id == I2C_DRIVERID_MSP3400) 306 + btv->i2c_msp34xx_client = client; 307 + if (client->driver->id == I2C_DRIVERID_TVAUDIO) 308 + btv->i2c_tvaudio_client = client; 305 309 if (btv->tuner_type != UNSET) { 306 310 struct tuner_setup tun_setup; 307 311
+2 -1
drivers/media/video/bt8xx/bttv.h
··· 234 234 unsigned int digital_mode; // DIGITAL_MODE_CAMERA or DIGITAL_MODE_VIDEO 235 235 u32 gpiomask; 236 236 u32 muxsel[16]; 237 - u32 audiomux[6]; /* Tuner, Radio, external, internal, mute, stereo */ 237 + u32 gpiomux[4]; /* Tuner, Radio, external, internal */ 238 + u32 gpiomute; /* GPIO mute setting */ 238 239 u32 gpiomask2; /* GPIO MUX mask */ 239 240 240 241 /* i2c audio flags */
+3 -1
drivers/media/video/bt8xx/bttvp.h
··· 41 41 42 42 #include <linux/device.h> 43 43 #include <media/video-buf.h> 44 - #include <media/audiochip.h> 45 44 #include <media/tuner.h> 46 45 #include <media/tveeprom.h> 47 46 #include <media/ir-common.h> ··· 298 299 int i2c_state, i2c_rc; 299 300 int i2c_done; 300 301 wait_queue_head_t i2c_queue; 302 + struct i2c_client *i2c_msp34xx_client; 303 + struct i2c_client *i2c_tvaudio_client; 301 304 302 305 /* video4linux (1) */ 303 306 struct video_device *video_dev; ··· 322 321 /* video state */ 323 322 unsigned int input; 324 323 unsigned int audio; 324 + unsigned int mute; 325 325 unsigned long freq; 326 326 int tvnorm,hue,contrast,bright,saturation; 327 327 struct v4l2_framebuffer fbuf;
-5
drivers/media/video/cs53l32a.c
··· 75 75 cs53l32a_write(client, 0x01, 0x01 + (input->index << 4)); 76 76 break; 77 77 78 - case VIDIOC_G_AUDIO: 79 - memset(input, 0, sizeof(*input)); 80 - input->index = (cs53l32a_read(client, 0x01) >> 4) & 3; 81 - break; 82 - 83 78 case VIDIOC_G_CTRL: 84 79 if (ctrl->id == V4L2_CID_AUDIO_MUTE) { 85 80 ctrl->value = (cs53l32a_read(client, 0x03) & 0xc0) != 0;
-1
drivers/media/video/cx25840/cx25840-audio.c
··· 18 18 19 19 #include <linux/videodev2.h> 20 20 #include <linux/i2c.h> 21 - #include <media/audiochip.h> 22 21 #include <media/v4l2-common.h> 23 22 24 23 #include "cx25840.h"
-11
drivers/media/video/cx25840/cx25840-core.c
··· 31 31 #include <linux/slab.h> 32 32 #include <linux/videodev2.h> 33 33 #include <linux/i2c.h> 34 - #include <media/audiochip.h> 35 34 #include <media/v4l2-common.h> 36 35 37 36 #include "cx25840.h" ··· 761 762 struct v4l2_audio *input = arg; 762 763 763 764 return set_input(client, state->vid_input, input->index); 764 - } 765 - 766 - case VIDIOC_G_AUDIO: 767 - { 768 - struct v4l2_audio *input = arg; 769 - 770 - memset(input, 0, sizeof(*input)); 771 - input->index = state->aud_input; 772 - input->capability = V4L2_AUDCAP_STEREO; 773 - break; 774 765 } 775 766 776 767 case VIDIOC_S_FREQUENCY:
-1
drivers/media/video/cx88/cx88.h
··· 27 27 28 28 #include <media/tuner.h> 29 29 #include <media/tveeprom.h> 30 - #include <media/audiochip.h> 31 30 #include <media/video-buf.h> 32 31 #include <media/video-buf-dvb.h> 33 32
+5 -99
drivers/media/video/msp3400-driver.c
··· 53 53 #include <linux/videodev.h> 54 54 #include <linux/videodev2.h> 55 55 #include <media/v4l2-common.h> 56 - #include <media/audiochip.h> 56 + #include <media/tvaudio.h> 57 57 #include <linux/kthread.h> 58 58 #include <linux/suspend.h> 59 59 #include "msp3400.h" ··· 585 585 static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg) 586 586 { 587 587 struct msp_state *state = i2c_get_clientdata(client); 588 - u16 *sarg = arg; 589 588 int scart = 0; 590 589 591 590 if (msp_debug >= 2) 592 591 v4l_i2c_print_ioctl(client, cmd); 593 592 594 593 switch (cmd) { 595 - case AUDC_SET_INPUT: 596 - if (*sarg == state->input) 597 - break; 598 - state->input = *sarg; 599 - switch (*sarg) { 600 - case AUDIO_RADIO: 601 - /* Hauppauge uses IN2 for the radio */ 602 - state->mode = MSP_MODE_FM_RADIO; 603 - scart = SCART_IN2; 604 - break; 605 - case AUDIO_EXTERN_1: 606 - /* IN1 is often used for external input ... */ 607 - state->mode = MSP_MODE_EXTERN; 608 - scart = SCART_IN1; 609 - break; 610 - case AUDIO_EXTERN_2: 611 - /* ... sometimes it is IN2 through ;) */ 612 - state->mode = MSP_MODE_EXTERN; 613 - scart = SCART_IN2; 614 - break; 615 - case AUDIO_TUNER: 616 - state->mode = -1; 617 - break; 618 - default: 619 - if (*sarg & AUDIO_MUTE) 620 - msp_set_scart(client, SCART_MUTE, 0); 621 - break; 622 - } 623 - if (scart) { 624 - state->rxsubchans = V4L2_TUNER_SUB_STEREO; 625 - msp_set_scart(client, scart, 0); 626 - msp_write_dsp(client, 0x000d, 0x1900); 627 - if (state->opmode != OPMODE_AUTOSELECT) 628 - msp_set_audmode(client); 629 - } 630 - msp_wake_thread(client); 631 - break; 632 - 633 594 case AUDC_SET_RADIO: 634 595 if (state->radio) 635 596 return 0; ··· 711 750 return 0; 712 751 } 713 752 714 - case VIDIOC_ENUMINPUT: 715 - { 716 - struct v4l2_input *i = arg; 717 - 718 - if (i->index != 0) 719 - return -EINVAL; 720 - 721 - i->type = V4L2_INPUT_TYPE_TUNER; 722 - switch (i->index) { 723 - case AUDIO_RADIO: 724 - strcpy(i->name, "Radio"); 725 - break; 726 - case AUDIO_EXTERN_1: 727 - strcpy(i->name, "Extern 1"); 728 - break; 729 - case AUDIO_EXTERN_2: 730 - strcpy(i->name, "Extern 2"); 731 - break; 732 - case AUDIO_TUNER: 733 - strcpy(i->name, "Television"); 734 - break; 735 - default: 736 - return -EINVAL; 737 - } 738 - return 0; 739 - } 740 - 741 - case VIDIOC_G_AUDIO: 742 - { 743 - struct v4l2_audio *a = arg; 744 - 745 - memset(a, 0, sizeof(*a)); 746 - 747 - switch (a->index) { 748 - case AUDIO_RADIO: 749 - strcpy(a->name, "Radio"); 750 - break; 751 - case AUDIO_EXTERN_1: 752 - strcpy(a->name, "Extern 1"); 753 - break; 754 - case AUDIO_EXTERN_2: 755 - strcpy(a->name, "Extern 2"); 756 - break; 757 - case AUDIO_TUNER: 758 - strcpy(a->name, "Television"); 759 - break; 760 - default: 761 - return -EINVAL; 762 - } 763 - 764 - a->capability = V4L2_AUDCAP_STEREO; 765 - a->mode = 0; /* TODO: add support for AVL */ 766 - break; 767 - } 768 - 769 753 case VIDIOC_S_AUDIO: 770 754 { 771 755 struct v4l2_audio *sarg = arg; 772 756 773 757 switch (sarg->index) { 774 - case AUDIO_RADIO: 758 + case TVAUDIO_INPUT_RADIO: 775 759 /* Hauppauge uses IN2 for the radio */ 776 760 state->mode = MSP_MODE_FM_RADIO; 777 761 scart = SCART_IN2; 778 762 break; 779 - case AUDIO_EXTERN_1: 763 + case TVAUDIO_INPUT_EXTERN: 780 764 /* IN1 is often used for external input ... */ 781 765 state->mode = MSP_MODE_EXTERN; 782 766 scart = SCART_IN1; 783 767 break; 784 - case AUDIO_EXTERN_2: 768 + case TVAUDIO_INPUT_INTERN: 785 769 /* ... sometimes it is IN2 through ;) */ 786 770 state->mode = MSP_MODE_EXTERN; 787 771 scart = SCART_IN2; 788 772 break; 789 - case AUDIO_TUNER: 773 + case TVAUDIO_INPUT_TUNER: 790 774 state->mode = -1; 791 775 break; 792 776 }
-1
drivers/media/video/msp3400-kthreads.c
··· 26 26 #include <linux/videodev.h> 27 27 #include <linux/videodev2.h> 28 28 #include <media/v4l2-common.h> 29 - #include <media/audiochip.h> 30 29 #include <linux/kthread.h> 31 30 #include <linux/suspend.h> 32 31 #include "msp3400.h"
-1
drivers/media/video/saa7115.c
··· 40 40 #include <linux/i2c.h> 41 41 #include <linux/videodev2.h> 42 42 #include <media/v4l2-common.h> 43 - #include <media/audiochip.h> 44 43 #include <asm/div64.h> 45 44 46 45 MODULE_DESCRIPTION("Philips SAA7113/SAA7114/SAA7115 video decoder driver");
-1
drivers/media/video/saa7134/saa7134.h
··· 34 34 #include <asm/io.h> 35 35 36 36 #include <media/tuner.h> 37 - #include <media/audiochip.h> 38 37 #include <media/ir-common.h> 39 38 #include <media/ir-kbd-i2c.h> 40 39 #include <media/video-buf.h>
-1
drivers/media/video/tda7432.c
··· 48 48 #include <linux/i2c.h> 49 49 #include <linux/i2c-algo-bit.h> 50 50 51 - #include <media/audiochip.h> 52 51 #include <media/v4l2-common.h> 53 52 #include <media/i2c-addr.h> 54 53
-3
drivers/media/video/tda9875.c
··· 30 30 #include <linux/i2c-algo-bit.h> 31 31 #include <linux/init.h> 32 32 33 - #include <media/audiochip.h> 34 33 35 34 #include <media/i2c-addr.h> 36 35 ··· 46 47 47 48 /* This is a superset of the TDA9875 */ 48 49 struct tda9875 { 49 - int mode; 50 50 int rvol, lvol; 51 51 int bass, treble; 52 52 struct i2c_client c; ··· 195 197 196 198 tda9875_write(client, TDA9875_MUT, 0xcc ); /* General mute */ 197 199 198 - t->mode=AUDIO_UNMUTE; 199 200 t->lvol=t->rvol =0; /* 0dB */ 200 201 t->bass=0; /* 0dB */ 201 202 t->treble=0; /* 0dB */
-1
drivers/media/video/tuner-core.c
··· 21 21 22 22 #include <media/tuner.h> 23 23 #include <media/v4l2-common.h> 24 - #include <media/audiochip.h> 25 24 26 25 #define UNSET (-1U) 27 26
+48 -19
drivers/media/video/tvaudio.c
··· 30 30 #include <linux/init.h> 31 31 #include <linux/smp_lock.h> 32 32 33 - #include <media/audiochip.h> 33 + #include <media/tvaudio.h> 34 34 #include <media/v4l2-common.h> 35 35 36 36 #include <media/i2c-addr.h> ··· 102 102 103 103 /* input switch register + values for v4l inputs */ 104 104 int inputreg; 105 - int inputmap[8]; 105 + int inputmap[4]; 106 106 int inputmute; 107 107 int inputmask; 108 108 }; ··· 119 119 audiocmd shadow; 120 120 121 121 /* current settings */ 122 - __u16 left,right,treble,bass,mode; 122 + __u16 left,right,treble,bass,muted,mode; 123 123 int prevmode; 124 124 int radio; 125 + int input; 125 126 126 127 /* thread */ 127 128 pid_t tpid; ··· 1102 1101 static int tda8425_initialize(struct CHIPSTATE *chip) 1103 1102 { 1104 1103 struct CHIPDESC *desc = chiplist + chip->type; 1105 - int inputmap[8] = { /* tuner */ TDA8425_S1_CH2, /* radio */ TDA8425_S1_CH1, 1106 - /* extern */ TDA8425_S1_CH1, /* intern */ TDA8425_S1_OFF, 1107 - /* off */ TDA8425_S1_OFF, /* on */ TDA8425_S1_CH2}; 1104 + int inputmap[4] = { /* tuner */ TDA8425_S1_CH2, /* radio */ TDA8425_S1_CH1, 1105 + /* extern */ TDA8425_S1_CH1, /* intern */ TDA8425_S1_OFF}; 1108 1106 1109 1107 if (chip->c.adapter->id == I2C_HW_B_RIVA) { 1110 1108 memcpy (desc->inputmap, inputmap, sizeof (inputmap)); ··· 1298 1298 .init = { 4, { TDA9873_SW, 0xa4, 0x06, 0x03 } }, 1299 1299 .inputreg = TDA9873_SW, 1300 1300 .inputmute = TDA9873_MUTE | TDA9873_AUTOMUTE, 1301 - .inputmap = {0xa0, 0xa2, 0xa0, 0xa0, 0xc0}, 1301 + .inputmap = {0xa0, 0xa2, 0xa0, 0xa0}, 1302 1302 .inputmask = TDA9873_INP_MASK|TDA9873_MUTE|TDA9873_AUTOMUTE, 1303 1303 1304 1304 }, ··· 1446 1446 .inputmap = {PIC16C54_MISC_SND_NOTMUTE|PIC16C54_MISC_SWITCH_TUNER, 1447 1447 PIC16C54_MISC_SND_NOTMUTE|PIC16C54_MISC_SWITCH_LINE, 1448 1448 PIC16C54_MISC_SND_NOTMUTE|PIC16C54_MISC_SWITCH_LINE, 1449 - PIC16C54_MISC_SND_MUTE,PIC16C54_MISC_SND_MUTE, 1450 - PIC16C54_MISC_SND_NOTMUTE}, 1449 + PIC16C54_MISC_SND_MUTE}, 1451 1450 .inputmute = PIC16C54_MISC_SND_MUTE, 1452 1451 }, 1453 1452 { ··· 1582 1583 return 0; 1583 1584 } 1584 1585 1586 + static int tvaudio_set_ctrl(struct CHIPSTATE *chip, struct v4l2_control *ctrl) 1587 + { 1588 + struct CHIPDESC *desc = chiplist + chip->type; 1589 + 1590 + switch (ctrl->id) { 1591 + case V4L2_CID_AUDIO_MUTE: 1592 + if (ctrl->value < 0 || ctrl->value >= 2) 1593 + return -ERANGE; 1594 + chip->muted = ctrl->value; 1595 + if (chip->muted) 1596 + chip_write_masked(chip,desc->inputreg,desc->inputmute,desc->inputmask); 1597 + else 1598 + chip_write_masked(chip,desc->inputreg, 1599 + desc->inputmap[chip->input],desc->inputmask); 1600 + break; 1601 + default: 1602 + return -EINVAL; 1603 + } 1604 + return 0; 1605 + } 1606 + 1607 + 1585 1608 /* ---------------------------------------------------------------------- */ 1586 1609 /* video4linux interface */ 1587 1610 1588 1611 static int chip_command(struct i2c_client *client, 1589 1612 unsigned int cmd, void *arg) 1590 1613 { 1591 - __u16 *sarg = arg; 1592 1614 struct CHIPSTATE *chip = i2c_get_clientdata(client); 1593 1615 struct CHIPDESC *desc = chiplist + chip->type; 1594 1616 1595 1617 v4l_dbg(1, debug, &chip->c, "%s: chip_command 0x%x\n", chip->c.name, cmd); 1596 1618 1597 1619 switch (cmd) { 1598 - case AUDC_SET_INPUT: 1599 - if (desc->flags & CHIP_HAS_INPUTSEL) { 1600 - if (*sarg & 0x80) 1601 - chip_write_masked(chip,desc->inputreg,desc->inputmute,desc->inputmask); 1602 - else 1603 - chip_write_masked(chip,desc->inputreg,desc->inputmap[*sarg],desc->inputmask); 1604 - } 1605 - break; 1606 - 1607 1620 case AUDC_SET_RADIO: 1608 1621 chip->radio = 1; 1609 1622 chip->watch_stereo = 0; ··· 1676 1665 chip->mode = va->mode; 1677 1666 desc->setmode(chip,va->mode); 1678 1667 } 1668 + break; 1669 + } 1670 + 1671 + case VIDIOC_S_CTRL: 1672 + return tvaudio_set_ctrl(chip, arg); 1673 + 1674 + case VIDIOC_S_AUDIO: 1675 + { 1676 + struct v4l2_audio *sarg = arg; 1677 + 1678 + if (!(desc->flags & CHIP_HAS_INPUTSEL) || sarg->index >= 4) 1679 + return -EINVAL; 1680 + /* There are four inputs: tuner, radio, extern and intern. */ 1681 + chip->input = sarg->index; 1682 + if (chip->muted) 1683 + break; 1684 + chip_write_masked(chip, desc->inputreg, 1685 + desc->inputmap[chip->input], desc->inputmask); 1679 1686 break; 1680 1687 } 1681 1688
+15 -15
drivers/media/video/tveeprom.c
··· 248 248 {AUDIO_CHIP_MSP34XX, "MSP3410D"}, 249 249 {AUDIO_CHIP_MSP34XX, "MSP3415"}, 250 250 {AUDIO_CHIP_MSP34XX, "MSP3430"}, 251 - {AUDIO_CHIP_UNKNOWN, "MSP3438"}, 251 + {AUDIO_CHIP_MSP34XX, "MSP3438"}, 252 252 {AUDIO_CHIP_UNKNOWN, "CS5331"}, 253 253 /* 10-14 */ 254 254 {AUDIO_CHIP_MSP34XX, "MSP3435"}, 255 255 {AUDIO_CHIP_MSP34XX, "MSP3440"}, 256 256 {AUDIO_CHIP_MSP34XX, "MSP3445"}, 257 - {AUDIO_CHIP_UNKNOWN, "MSP3411"}, 258 - {AUDIO_CHIP_UNKNOWN, "MSP3416"}, 257 + {AUDIO_CHIP_MSP34XX, "MSP3411"}, 258 + {AUDIO_CHIP_MSP34XX, "MSP3416"}, 259 259 /* 15-19 */ 260 260 {AUDIO_CHIP_MSP34XX, "MSP3425"}, 261 - {AUDIO_CHIP_UNKNOWN, "MSP3451"}, 262 - {AUDIO_CHIP_UNKNOWN, "MSP3418"}, 261 + {AUDIO_CHIP_MSP34XX, "MSP3451"}, 262 + {AUDIO_CHIP_MSP34XX, "MSP3418"}, 263 263 {AUDIO_CHIP_UNKNOWN, "Type 0x12"}, 264 264 {AUDIO_CHIP_UNKNOWN, "OKI7716"}, 265 265 /* 20-24 */ 266 - {AUDIO_CHIP_UNKNOWN, "MSP4410"}, 267 - {AUDIO_CHIP_UNKNOWN, "MSP4420"}, 268 - {AUDIO_CHIP_UNKNOWN, "MSP4440"}, 269 - {AUDIO_CHIP_UNKNOWN, "MSP4450"}, 270 - {AUDIO_CHIP_UNKNOWN, "MSP4408"}, 266 + {AUDIO_CHIP_MSP34XX, "MSP4410"}, 267 + {AUDIO_CHIP_MSP34XX, "MSP4420"}, 268 + {AUDIO_CHIP_MSP34XX, "MSP4440"}, 269 + {AUDIO_CHIP_MSP34XX, "MSP4450"}, 270 + {AUDIO_CHIP_MSP34XX, "MSP4408"}, 271 271 /* 25-29 */ 272 - {AUDIO_CHIP_UNKNOWN, "MSP4418"}, 273 - {AUDIO_CHIP_UNKNOWN, "MSP4428"}, 274 - {AUDIO_CHIP_UNKNOWN, "MSP4448"}, 275 - {AUDIO_CHIP_UNKNOWN, "MSP4458"}, 276 - {AUDIO_CHIP_UNKNOWN, "Type 0x1d"}, 272 + {AUDIO_CHIP_MSP34XX, "MSP4418"}, 273 + {AUDIO_CHIP_MSP34XX, "MSP4428"}, 274 + {AUDIO_CHIP_MSP34XX, "MSP4448"}, 275 + {AUDIO_CHIP_MSP34XX, "MSP4458"}, 276 + {AUDIO_CHIP_MSP34XX, "Type 0x1d"}, 277 277 /* 30-34 */ 278 278 {AUDIO_CHIP_INTERNAL, "CX880"}, 279 279 {AUDIO_CHIP_INTERNAL, "CX881"},
-2
drivers/media/video/v4l2-common.c
··· 312 312 [_IOC_NR(DECODER_DUMP)] = "DECODER_DUMP", 313 313 #endif 314 314 [_IOC_NR(AUDC_SET_RADIO)] = "AUDC_SET_RADIO", 315 - [_IOC_NR(AUDC_SET_INPUT)] = "AUDC_SET_INPUT", 316 315 [_IOC_NR(MSP_SET_MATRIX)] = "MSP_SET_MATRIX", 317 316 318 317 [_IOC_NR(TUNER_SET_TYPE_ADDR)] = "TUNER_SET_TYPE_ADDR", ··· 418 419 case TUNER_SET_TYPE_ADDR: 419 420 case TUNER_SET_STANDBY: 420 421 case TDA9887_SET_CONFIG: 421 - case AUDC_SET_INPUT: 422 422 case VIDIOC_OVERLAY_OLD: 423 423 case VIDIOC_STREAMOFF: 424 424 case VIDIOC_G_OUTPUT:
-5
drivers/media/video/wm8775.c
··· 102 102 wm8775_write(client, R21, 0x100 + state->input); 103 103 break; 104 104 105 - case VIDIOC_G_AUDIO: 106 - memset(input, 0, sizeof(*input)); 107 - input->index = state->input; 108 - break; 109 - 110 105 case VIDIOC_G_CTRL: 111 106 if (ctrl->id != V4L2_CID_AUDIO_MUTE) 112 107 return -EINVAL;
-14
include/media/audiochip.h
··· 21 21 AUDIO_CHIP_MSP34XX 22 22 }; 23 23 24 - /* ---------------------------------------------------------------------- */ 25 - 26 - /* audio inputs */ 27 - #define AUDIO_TUNER 0x00 28 - #define AUDIO_RADIO 0x01 29 - #define AUDIO_EXTERN 0x02 30 - #define AUDIO_INTERN 0x03 31 - #define AUDIO_OFF 0x04 32 - #define AUDIO_ON 0x05 33 - #define AUDIO_EXTERN_1 AUDIO_EXTERN 34 - #define AUDIO_EXTERN_2 0x06 35 - #define AUDIO_MUTE 0x80 36 - #define AUDIO_UNMUTE 0x81 37 - 38 24 #endif /* AUDIOCHIP_H */
+30
include/media/tvaudio.h
··· 1 + /* 2 + tvaudio.h - definition for tvaudio inputs 3 + 4 + Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl) 5 + 6 + This program is free software; you can redistribute it and/or modify 7 + it under the terms of the GNU General Public License as published by 8 + the Free Software Foundation; either version 2 of the License, or 9 + (at your option) any later version. 10 + 11 + This program is distributed in the hope that it will be useful, 12 + but WITHOUT ANY WARRANTY; without even the implied warranty of 13 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 + GNU General Public License for more details. 15 + 16 + You should have received a copy of the GNU General Public License 17 + along with this program; if not, write to the Free Software 18 + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 + */ 20 + 21 + #ifndef _TVAUDIO_H 22 + #define _TVAUDIO_H 23 + 24 + /* The tvaudio module accepts the following inputs: */ 25 + #define TVAUDIO_INPUT_TUNER 0 26 + #define TVAUDIO_INPUT_RADIO 1 27 + #define TVAUDIO_INPUT_EXTERN 2 28 + #define TVAUDIO_INPUT_INTERN 3 29 + 30 + #endif
+4 -7
include/media/v4l2-common.h
··· 123 123 /* v4l device was opened in Radio mode, to be replaced by VIDIOC_INT_S_TUNER_MODE */ 124 124 #define AUDC_SET_RADIO _IO('d',88) 125 125 126 - /* select from TV,radio,extern,MUTE, to be replaced with VIDIOC_INT_S_AUDIO_ROUTING */ 127 - #define AUDC_SET_INPUT _IOW('d',89,int) 128 - 129 126 /* msp3400 ioctl: will be removed in the near future, to be replaced by 130 127 VIDIOC_INT_S_AUDIO_ROUTING. */ 131 128 struct msp_matrix { ··· 206 209 }; 207 210 208 211 /* These internal commands should be used to define the inputs and outputs 209 - of an audio/video chip. They will replace AUDC_SET_INPUT. 210 - The v4l2 API commands VIDIOC_S/G_INPUT, VIDIOC_S/G_OUTPUT, 211 - VIDIOC_S/G_AUDIO and VIDIOC_S/G_AUDOUT are meant to be used by the 212 - user. Internally these commands should be used to switch inputs/outputs 212 + of an audio/video chip. They will replace the v4l2 API commands 213 + VIDIOC_S/G_INPUT, VIDIOC_S/G_OUTPUT, VIDIOC_S/G_AUDIO and VIDIOC_S/G_AUDOUT 214 + that are meant to be used by the user. 215 + The internal commands should be used to switch inputs/outputs 213 216 because only the driver knows how to map a 'Television' input to the precise 214 217 input/output routing of an A/D converter, or a DSP, or a video digitizer. 215 218 These four commands should only be sent directly to an i2c device, they