Changeset 1585

Show
Ignore:
Timestamp:
06/25/09 07:26:17 (13 years ago)
Author:
jwoithe
Message:

RME: write user TCO settings to the device.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/src/rme/fireface_def.h

    r1584 r1585  
    462462#define FF_TCO2_INPUT_VIDEO                   FF_TCO2_SET_INPUT0 
    463463#define FF_TCO2_INPUT_WORD_CLOCK              0 
     464#define FF_TCO2_SRATE_44_1                    0 
     465#define FF_TCO2_SRATE_48                      FF_TCO2_SET_FREQ 
     466#define FF_TCO2_SRATE_FROM_APP                FF_TCO2_SET_FREQ_FROM_APP 
     467 
     468// Interpretation of the TCO software settings fields 
     469#define FF_TCOPARAM_INPUT_LTC                 1 
     470#define FF_TCOPARAM_INPUT_VIDEO               2 
     471#define FF_TCOPARAM_INPUT_WCK                 3 
     472#define FF_TCOPARAM_FRAMERATE_24fps           1 
     473#define FF_TCOPARAM_FRAMERATE_25fps           2 
     474#define FF_TCOPARAM_FRAMERATE_29_97fps        3 
     475#define FF_TCOPARAM_FRAMERATE_29_97dfps       4 
     476#define FF_TCOPARAM_FRAMERATE_30fps           5 
     477#define FF_TCOPARAM_FRAMERATE_30dfps          6 
     478#define FF_TCOPARAM_WORD_CLOCK_CONV_1_1       1     // 1:1 
     479#define FF_TCOPARAM_WORD_CLOCK_CONV_44_48     2     // 44.1 kHz-> 48 kHz 
     480#define FF_TCOPARAM_WORD_CLOCK_CONV_48_44     3     // 48 kHz -> 44.1 kHz 
     481#define FF_TCOPARAM_SRATE_44_1                1     // Rate is 44.1 kHz 
     482#define FF_TCOPARAM_SRATE_48                  2     // Rate is 48 kHz 
     483#define FF_TCOPARAM_SRATE_FROM_APP            3 
     484#define FF_TCPPARAM_PULL_NONE                 1 
     485#define FF_TCOPARAM_PULL_UP_01                2     // +0.1% 
     486#define FF_TCOPARAM_PULL_DOWN_01              3     // -0.1% 
     487#define FF_TCOPARAM_PULL_UP_40                4     // +4.0% 
     488#define FF_TCOPARAM_PULL_DOWN_40              5     // -4.0% 
     489#define FF_TCOPARAM_TERMINATION_ON            1 
    464490 
    465491#endif 
  • trunk/libffado/src/rme/fireface_hw.cpp

    r1584 r1585  
    238238signed int Device::write_tco(quadlet_t *tco_data, signed int size) 
    239239{ 
    240     // Writes data to the TCO.  No check is made as to whether a TCO 
    241     // is present in the current device.  Return value is 0 on success 
    242     // or -1 on error.  The first 4 quadlets of tco_data are significant; 
    243     // all others are ignored.  If fewer than 4 quadlets are supplied (as 
     240    // Writes data to the TCO.  No check is made as to whether a TCO is 
     241    // present in the current device.  Return value is 0 on success or -1 on 
     242    // error.  "size" is the size (in quadlets) of the data pointed to by 
     243    // "tco_data".  The first 4 quadlets of tco_data are significant; all 
     244    // others are ignored.  If fewer than 4 quadlets are supplied (as 
    244245    // indicated by the "size" parameter, -1 will be returned. 
    245246    if (size < 4) 
     
    269270    } 
    270271 
     272    if (tco_settings.MTC) 
     273        tc[0] |= FF_TCO0_MTC; 
     274 
     275    switch (tco_settings.input) { 
     276        case FF_TCOPARAM_INPUT_LTC: 
     277            tc[2] |= FF_TCO2_INPUT_LTC; break; 
     278        case FF_TCOPARAM_INPUT_VIDEO: 
     279            tc[2] |= FF_TCO2_INPUT_VIDEO; break; 
     280        case FF_TCOPARAM_INPUT_WCK: 
     281            tc[2] |= FF_TCO2_INPUT_WORD_CLOCK; break; 
     282    } 
     283 
     284    switch (tco_settings.frame_rate) { 
     285        case FF_TCOPARAM_FRAMERATE_24fps: 
     286            tc[1] |= FF_TC01_LTC_FORMAT_24fps; break; 
     287        case FF_TCOPARAM_FRAMERATE_25fps: 
     288            tc[1] |= FF_TCO1_LTC_FORMAT_25fps; break; 
     289        case FF_TCOPARAM_FRAMERATE_29_97fps: 
     290            tc[1] |= FF_TC01_LTC_FORMAT_29_97fps; break; 
     291        case FF_TCOPARAM_FRAMERATE_29_97dfps: 
     292            tc[1] |= FF_TCO1_LTC_FORMAT_29_97dpfs; break; 
     293        case FF_TCOPARAM_FRAMERATE_30fps: 
     294            tc[1] |= FF_TCO1_LTC_FORMAT_30fps; break; 
     295        case FF_TCOPARAM_FRAMERATE_30dfps: 
     296            tc[1] |= FF_TCO1_LTC_FORMAT_30dfps; break; 
     297    } 
     298 
     299    switch (tco_settings.word_clock) { 
     300        case FF_TCOPARAM_WORD_CLOCK_CONV_1_1: 
     301            tc[2] |= FF_TCO2_WORD_CLOCK_CONV_1_1; break; 
     302        case FF_TCOPARAM_WORD_CLOCK_CONV_44_48: 
     303            tc[2] |= FF_TCO2_WORD_CLOCK_CONV_44_48; break; 
     304        case FF_TCOPARAM_WORD_CLOCK_CONV_48_44: 
     305            tc[2] |= FF_TCO2_WORD_CLOCK_CONV_48_44; break; 
     306    } 
     307 
     308    switch (tco_settings.sample_rate) { 
     309        case FF_TCOPARAM_SRATE_44_1: 
     310            tc[2] |= FF_TCO2_SRATE_44_1; break; 
     311        case FF_TCOPARAM_SRATE_48: 
     312            tc[2] |= FF_TCO2_SRATE_48; break; 
     313        case FF_TCOPARAM_SRATE_FROM_APP: 
     314            tc[2] |= FF_TCO2_SRATE_FROM_APP; break; 
     315    } 
     316 
     317    switch (tco_settings.pull) { 
     318        case FF_TCPPARAM_PULL_NONE: 
     319            tc[2] |= FF_TCO2_PULL_0; break; 
     320        case FF_TCOPARAM_PULL_UP_01: 
     321            tc[2] |= FF_TCO2_PULL_UP_01; break; 
     322        case FF_TCOPARAM_PULL_DOWN_01: 
     323            tc[2] |= FF_TCO2_PULL_DOWN_01; break; 
     324        case FF_TCOPARAM_PULL_UP_40: 
     325            tc[2] |= FF_TCO2_PULL_UP_40; break; 
     326        case FF_TCOPARAM_PULL_DOWN_40: 
     327            tc[2] |= FF_TCO2_PULL_DOWN_40; break; 
     328    } 
     329 
     330    if (tco_settings.termination == FF_TCOPARAM_TERMINATION_ON) 
     331        tc[2] |= FF_TCO2_SET_TERMINATION; 
     332 
     333    return write_tco(tc, 4); 
     334 
    271335    return 0; 
    272336}