Changeset 1833
- Timestamp:
- 05/17/10 04:42:30 (2 years ago)
- Files:
-
- trunk/libffado/src/motu/motu_avdevice.cpp (modified) (10 diffs)
- trunk/libffado/src/motu/motu_avdevice.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libffado/src/motu/motu_avdevice.cpp
r1832 r1833 570 570 571 571 reg = ReadRegister(MOTU_REG_CLK_CTRL); 572 switch (reg & MOTU_G2_CLKSRC_MASK) { 573 case MOTU_G2_CLKSRC_INTERNAL: return MOTU_CLKSRC_INTERNAL; 574 case MOTU_G2_CLKSRC_ADAT_OPTICAL: return MOTU_CLKSRC_ADAT_OPTICAL; 575 case MOTU_G2_CLKSRC_SPDIF_TOSLINK: return MOTU_CLKSRC_SPDIF_TOSLINK; 576 case MOTU_G2_CLKSRC_SMPTE: return MOTU_CLKSRC_SMPTE; 577 case MOTU_G2_CLKSRC_WORDCLOCK: return MOTU_CLKSRC_WORDCLOCK; 578 case MOTU_G2_CLKSRC_ADAT_9PIN: return MOTU_CLKSRC_ADAT_9PIN; 579 case MOTU_G2_CLKSRC_AES_EBU: return MOTU_CLKSRC_AES_EBU; 572 if (getDeviceGeneration() == MOTU_DEVICE_G2) { 573 switch (reg & MOTU_G2_CLKSRC_MASK) { 574 case MOTU_G2_CLKSRC_INTERNAL: return MOTU_CLKSRC_INTERNAL; 575 case MOTU_G2_CLKSRC_ADAT_OPTICAL: return MOTU_CLKSRC_ADAT_OPTICAL; 576 case MOTU_G2_CLKSRC_SPDIF_TOSLINK: return MOTU_CLKSRC_SPDIF_TOSLINK; 577 case MOTU_G2_CLKSRC_SMPTE: return MOTU_CLKSRC_SMPTE; 578 case MOTU_G2_CLKSRC_WORDCLOCK: return MOTU_CLKSRC_WORDCLOCK; 579 case MOTU_G2_CLKSRC_ADAT_9PIN: return MOTU_CLKSRC_ADAT_9PIN; 580 case MOTU_G2_CLKSRC_AES_EBU: return MOTU_CLKSRC_AES_EBU; 581 } 582 } else { 583 /* Handle G3 devices */ 584 switch (reg & MOTU_G3_CLKSRC_MASK) { 585 case MOTU_G3_CLKSRC_INTERNAL: return MOTU_CLKSRC_INTERNAL; 586 case MOTU_G3_CLKSRC_SPDIF: return MOTU_CLKSRC_SPDIF_TOSLINK; 587 case MOTU_G3_CLKSRC_SMPTE: return MOTU_CLKSRC_SMPTE; 588 case MOTU_G3_CLKSRC_WORDCLOCK: return MOTU_CLKSRC_WORDCLOCK; 589 case MOTU_G3_CLKSRC_OPTICAL_A: return MOTU_CLKSRC_OPTICAL_A; 590 case MOTU_G3_CLKSRC_OPTICAL_B: return MOTU_CLKSRC_OPTICAL_B; 591 } 580 592 } 581 593 return MOTU_CLKSRC_NONE; … … 595 607 quadlet_t reg; 596 608 unsigned int old_clock_src = getHwClockSource(); 609 signed int device_gen = getDeviceGeneration(); 597 610 598 611 /* Don't touch anything if there's nothing to do */ … … 645 658 reg = ReadRegister(MOTU_REG_CLK_CTRL); 646 659 660 /* Control of sampling rate is the same for both G2 and G3 devices */ 647 661 switch ( samplingFrequency ) { 648 662 case -1: … … 697 711 // Set up new clock source if required 698 712 if (clock_source != MOTU_CLKSRC_UNCHANGED) { 699 reg &= ~MOTU_G2_CLKSRC_MASK; 700 switch (clock_source) { 701 case MOTU_CLKSRC_INTERNAL: reg |= MOTU_G2_CLKSRC_INTERNAL; break; 702 case MOTU_CLKSRC_ADAT_OPTICAL: reg |= MOTU_G2_CLKSRC_ADAT_OPTICAL; break; 703 case MOTU_CLKSRC_SPDIF_TOSLINK: reg |= MOTU_G2_CLKSRC_SPDIF_TOSLINK; break; 704 case MOTU_CLKSRC_SMPTE: reg |= MOTU_G2_CLKSRC_SMPTE; break; 705 case MOTU_CLKSRC_WORDCLOCK: reg |= MOTU_G2_CLKSRC_WORDCLOCK; break; 706 case MOTU_CLKSRC_ADAT_9PIN: reg |= MOTU_G2_CLKSRC_ADAT_9PIN; break; 707 case MOTU_CLKSRC_AES_EBU: reg |= MOTU_G2_CLKSRC_AES_EBU; break; 713 if (device_gen == MOTU_DEVICE_G2) { 714 reg &= ~MOTU_G2_CLKSRC_MASK; 715 switch (clock_source) { 716 case MOTU_CLKSRC_INTERNAL: reg |= MOTU_G2_CLKSRC_INTERNAL; break; 717 case MOTU_CLKSRC_ADAT_OPTICAL: reg |= MOTU_G2_CLKSRC_ADAT_OPTICAL; break; 718 case MOTU_CLKSRC_SPDIF_TOSLINK: reg |= MOTU_G2_CLKSRC_SPDIF_TOSLINK; break; 719 case MOTU_CLKSRC_SMPTE: reg |= MOTU_G2_CLKSRC_SMPTE; break; 720 case MOTU_CLKSRC_WORDCLOCK: reg |= MOTU_G2_CLKSRC_WORDCLOCK; break; 721 case MOTU_CLKSRC_ADAT_9PIN: reg |= MOTU_G2_CLKSRC_ADAT_9PIN; break; 722 case MOTU_CLKSRC_AES_EBU: reg |= MOTU_G2_CLKSRC_AES_EBU; break; 723 } 724 } else { 725 reg &= ~MOTU_G3_CLKSRC_MASK; 726 switch (clock_source) { 727 case MOTU_CLKSRC_INTERNAL: reg |= MOTU_G3_CLKSRC_INTERNAL; break; 728 case MOTU_CLKSRC_SPDIF_TOSLINK: reg |= MOTU_G3_CLKSRC_SPDIF; break; 729 case MOTU_CLKSRC_SMPTE: reg |= MOTU_G3_CLKSRC_SMPTE; break; 730 case MOTU_CLKSRC_WORDCLOCK: reg |= MOTU_G3_CLKSRC_WORDCLOCK; break; 731 case MOTU_CLKSRC_OPTICAL_A: reg |= MOTU_G3_CLKSRC_OPTICAL_A; break; 732 case MOTU_CLKSRC_OPTICAL_B: reg |= MOTU_G3_CLKSRC_OPTICAL_B; break; 733 } 708 734 } 709 735 } else { … … 748 774 // A write to the rate/clock control register requires the 749 775 // textual name of the current clock source be sent to the 750 // clock source name registers. 776 // clock source name registers. This appears to be the same for 777 // both G2 and G3 devices. 751 778 switch (clock_source) { 752 779 case MOTU_CLKSRC_INTERNAL: … … 777 804 src_name = "AES-EBU "; 778 805 break; 806 case MOTU_CLKSRC_OPTICAL_A: { 807 unsigned int p0_mode; 808 getOpticalMode(MOTU_DIR_IN, &p0_mode, NULL); 809 if (p0_mode == MOTU_OPTICAL_MODE_TOSLINK) 810 src_name = "Toslink-A "; 811 else 812 src_name = "ADAT-A Optical "; 813 break; 814 } 815 case MOTU_CLKSRC_OPTICAL_B: { 816 unsigned int p1_mode; 817 getOpticalMode(MOTU_DIR_IN, &p1_mode, NULL); 818 if (p1_mode == MOTU_OPTICAL_MODE_TOSLINK) 819 src_name = "Toslink-B "; 820 else 821 src_name = "ADAT-B Optical "; 822 break; 823 } 779 824 default: 780 825 src_name = "Unknown "; … … 842 887 case MOTU_CLKSRC_SPDIF_TOSLINK: 843 888 s.type = eCT_SPDIF; 844 s.description = "SPDIF/Toslink"; 889 if (device_gen < MOTU_DEVICE_G3) 890 s.description = "SPDIF/Toslink"; 891 else 892 s.description = "SPDIF"; 845 893 break; 846 894 case MOTU_CLKSRC_SMPTE: … … 867 915 s.valid = s.active = s.locked = (device_gen!=MOTU_DEVICE_G1); 868 916 break; 917 case MOTU_CLKSRC_OPTICAL_A: 918 s.type = eCT_ADAT; 919 s.description = "ADAT/Toslink port A"; 920 break; 921 case MOTU_CLKSRC_OPTICAL_B: 922 s.type = eCT_ADAT; 923 s.description = "ADAT/Toslink port B"; 924 break; 869 925 default: 870 926 s.type = eCT_Invalid; … … 879 935 FFADODevice::ClockSourceVector r; 880 936 ClockSource s; 937 signed int device_gen = getDeviceGeneration(); 881 938 882 939 /* Form a list of clocks supported by MOTU interfaces */ 940 941 /* All interfaces support an internal clock */ 883 942 s = clockIdToClockSource(MOTU_CLKSRC_INTERNAL); 884 943 r.push_back(s); 885 s = clockIdToClockSource(MOTU_CLKSRC_ADAT_OPTICAL); 886 r.push_back(s); 944 945 if (device_gen == MOTU_DEVICE_G2) { 946 s = clockIdToClockSource(MOTU_CLKSRC_ADAT_OPTICAL); 947 r.push_back(s); 948 } 949 887 950 s = clockIdToClockSource(MOTU_CLKSRC_SPDIF_TOSLINK); 888 951 r.push_back(s); … … 891 954 s = clockIdToClockSource(MOTU_CLKSRC_WORDCLOCK); 892 955 r.push_back(s); 893 s = clockIdToClockSource(MOTU_CLKSRC_ADAT_9PIN); 894 r.push_back(s); 956 957 if (device_gen < MOTU_DEVICE_G3) { 958 s = clockIdToClockSource(MOTU_CLKSRC_ADAT_9PIN); 959 r.push_back(s); 960 } 895 961 s = clockIdToClockSource(MOTU_CLKSRC_AES_EBU); 896 962 r.push_back(s); 963 964 if (device_gen == MOTU_DEVICE_G3) { 965 s = clockIdToClockSource(MOTU_CLKSRC_OPTICAL_A); 966 r.push_back(s); 967 s = clockIdToClockSource(MOTU_CLKSRC_OPTICAL_B); 968 r.push_back(s); 969 } 897 970 898 971 return r; trunk/libffado/src/motu/motu_avdevice.h
r1832 r1833 156 156 #define MOTU_G3_CLKSRC_INTERNAL 0x00000000 157 157 #define MOTU_G3_CLKSRC_WORDCLOCK 0x00000001 158 #define MOTU_G3_CLKSRC_SM TPE 0x00000002158 #define MOTU_G3_CLKSRC_SMPTE 0x00000002 159 159 #define MOTU_G3_CLKSRC_SPDIF 0x00000010 160 160 #define MOTU_G3_CLKSRC_OPTICAL_A 0x00000018 … … 221 221 #define MOTU_CLKSRC_WORDCLOCK 4 222 222 #define MOTU_CLKSRC_ADAT_9PIN 5 223 #define MOTU_CLKSRC_AES_EBU 7 224 #define MOTU_CLKSRC_LAST 7 223 #define MOTU_CLKSRC_AES_EBU 6 224 #define MOTU_CLKSRC_OPTICAL_A 7 225 #define MOTU_CLKSRC_OPTICAL_B 8 226 #define MOTU_CLKSRC_LAST 8 225 227 #define MOTU_CLKSRC_NONE 0xffff 226 228 #define MOTU_CLKSRC_UNCHANGED MOTU_CLKSRC_NONE
