Changeset 1570

Show
Ignore:
Timestamp:
05/29/09 07:18:55 (14 years ago)
Author:
jwoithe
Message:

RME: add more details to device initialisation code. The basic structure is now in place.
RME: update documentation.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/doc/rme_notes/rme_config_register_map.txt

    r1547 r1570  
    22============================================ 
    33 
    4 Version: 0.9 
     4Version: 0.10 
    55Author: Jonathan Woithe 
    6 Date: 27 April 2009 
     6Date: 29 May 2009 
    77 
    88 
     
    4040to be sent on the bus in big endian format (although this is to be 
    4141confirmed). 
     42 
     43The FF800 includes a number of instrument options for input 1 which are 
     44described using several different terms interchangeably: 
     45 - "Drive" (also referred to as "fuzz") activates 25 dB extra gain 
     46 - "Speaker emulation" (also referred to as "filter") removes LF noise and 
     47   some HF 
     48 - "Limiter" activates a soft-limiter with a threshold of -10 dBFS.  This 
     49   can only be switched off if the Front input is used for channel 1. 
    4250 
    4351 
     
    313321  2 - ASIO latency (FF400=0x00000001) 
    314322  3 - Samples per frame (FF400 default is 0x30) 
    315   4 SPDIF input mode (1=coax?, 0=optical?) 
     323  4 SPDIF input mode (2=coax?, 1=optical?) 
    316324  5 SPDIF output emphasis active 
    317325  6 SPDIF output is "professional" (ie: AES/EBU) 
    318   7 Clock mode (0=master?, 1=autosync?) 
     326  7 Clock mode (2=master?, 1=autosync?) 
    319327  8 SPDIF output is non-audio (eg: AC3 passthrough) 
    320328  9 Sync reference 
     
    335343 27 - Bandwidth allocated (FF400=0x00000000) 
    336344 28 Stop on dropout (FF400=0x00000000) 
    337  29 Input level (0=lo-gain
    338  30 Output level (0=-10dBV
     345 29 Input level (0=default, 1=lo-gain, 2=+4dBU, 3=-10dBV ???
     346 30 Output level (0=default, 1=hi-gain, 2=+4dBU, 3=-10dBV ???
    339347 31 Mic level [0] - FF400:Phoneslevel-1 / F800:AnalogInput[1]* ??? 
    340348 32 Mic level [1] - AnalogInput[2] ??? 
     
    352360 47 - Number of channels (FF400=0x000000f0) 
    353361 48 - Dropped samples 
    354  49 p12db_an[0] - Limiter==0&&AnalogInput[0]==2*: 1 else 0 ??? 
     362 49 p12db_an[0] - Disable limiter, settable only if input 1 front jack active 
    355363 50 - p12db_an[1-9] 
    356364 
  • trunk/libffado/src/rme/fireface_def.h

    r1553 r1570  
    111111#define CR0_PHANTOM_MIC0        0x00000001 
    112112#define CR0_PHANTOM_MIC2        0x00000002 
    113 #define CR0_SPEAKER_EMU_FPGA    0x00000004 
     113#define CR0_FILTER_FPGA         0x00000004 
    114114#define CR0_ILEVEL_FPGA_CTRL0   0x00000008 
    115115#define CR0_ILEVEL_FPGA_CTRL1   0x00000010 
     
    148148#define CR1_ILEVEL_CPLD_CTRL0   0x00000001 
    149149#define CR1_ILEVEL_CPLD_CTRL1   0x00000002 
    150 #define CR1_INPUT0_REAR         0x00000004 
     150#define CR1_INPUT_OPT0_B        0x00000004    // Input optionset 0, option B 
    151151#define CR1_OLEVEL_CPLD_CTRL0   0x00000008 
    152152#define CR1_OLEVEL_CPLD_CTRL1   0x00000010 
    153 #define CR1_INPUT1_FRONT        0x00000020 
    154 #define CR1_INPUT1_REAR         0x00000040 
    155 #define CR1_INPUT2_FRONT        0x00000080 
    156 #define CR1_INPUT2_REAR         0x00000100 
     153#define CR1_INPUT_OPT1_A        0x00000020    // Input optionset 1, option A 
     154#define CR1_INPUT_OPT1_B        0x00000040    // Input optionset 1, option B 
     155#define CR1_INPUT_OPT2_A        0x00000080    // Input optionset 2, option A 
     156#define CR1_INPUT_OPT2_B        0x00000100    // Input optionset 2, option B 
    157157#define CR1_INSTR_DRIVE         0x00000200 
    158 #define CR1_ZEROBIT10           0x00000400 
    159 #define CR1_INPUT0_FRONT        0x0000080
     158#define CR1_INPUT_OPT0_A1       0x00000400    // Input optionset 0, option A bit 1 
     159#define CR1_INPUT_OPT0_A0       0x00000800    // Input optionset 0, option A bit
    160160 
    161161#define CR1_ILEVEL_CPLD_LOGAIN  0 
     
    165165#define CR1_OLEVEL_CPLD_HIGAIN  CR1_OLEVEL_CPLD_CTRL1 
    166166#define CR1_OLEVEL_CPLD_4dBU    (CR1_OLEVEL_CPLD_CTRL0 | CR1_OLEVEL_CPLD_CTRL1) 
    167 #define CR1_FF800_INPUT1_FRONT  CR1_INPUT0_FRONT 
    168 #define CR1_FF800_INPUT1_REAR   CR1_INPUT0_REAR 
    169 #define CR1_FF800_INPUT7_FRONT  CR1_INPUT1_FRONT 
    170 #define CR1_FF800_INPUT7_REAR   CR1_INPUT1_REAR 
    171 #define CR1_FF800_INPUT8_FRONT  CR1_INPUT2_FRONT 
    172 #define CR1_FF800_INPUT8_REAR   CR1_INPUT2_REAR 
     167#define CR1_FF800_INPUT7_FRONT  CR1_INPUT_OPT1_A 
     168#define CR1_FF800_INPUT7_REAR   CR1_INPUT_OPT1_B 
     169#define CR1_FF800_INPUT8_FRONT  CR1_INPUT_OPT2_A 
     170#define CR1_FF800_INPUT8_REAR   CR1_INPUT_OPT2_B 
     171#define CR1_FF400_INPUT3_INSTR  CR1_INPUT_OPT1_B   // To be confirmed 
     172#define CR1_FF400_INPUT3_PAD    CR1_INPUT_OPT1_A   // To be confirmed 
     173#define CR1_FF400_INPUT4_INSTR  CR1_INPUT_OPT2_B   // To be confirmed 
     174#define CR1_FF400_INPUT4_PAD    CR1_INPUT_OPT2_A   // To be confirmed 
     175 
     176// The input 1 "front" option is strange on the FF800 in that it is 
     177// indicated using two bits.  The actual bit set depends, curiously enough, 
     178// on the "speaker emulation" (aka "filter") setting.  How odd. 
     179#define CR1_FF800_INPUT1_FRONT              CR1_INPUT_OPT0_A0 
     180#define CR1_FF800_INPUT1_FRONT_WITH_FILTER  CR1_INPUT_OPT0_A1 
     181#define CR1_FF800_INPUT1_REAR               CR1_INPUT_OPT0_B 
    173182 
    174183// Configuration register 2 
    175 #define CR2_CLOCKMODE_MASTER    0x00000000 
    176 #define CR2_CLOCKMODE_AUTOSYNC  0x00000001 
     184#define CR2_CLOCKMODE_AUTOSYNC  0x00000000 
     185#define CR2_CLOCKMODE_MASTER    0x00000001 
    177186#define CR2_FREQ0               0x00000002 
    178187#define CR2_FREQ1               0x00000004 
     
    182191#define CR2_SPDIF_OUT_EMP       0x00000040 
    183192#define CR2_SPDIF_OUT_NONAUDIO  0x00000080 
    184 #define CR2_SPDIF_OUT_ADAT2     0x00000100 
     193#define CR2_SPDIF_OUT_ADAT2     0x00000100  // Optical SPDIF on ADAT2 port 
    185194#define CR2_SPDIF_IN_COAX       0x00000000 
    186 #define CR2_SPDIF_IN_ADAT2      0x00000200 
     195#define CR2_SPDIF_IN_ADAT2      0x00000200  // Optical SPDIF on ADAT2 port 
    187196#define CR2_SYNC_REF0           0x00000400 
    188197#define CR2_SYNC_REF1           0x00000800 
     
    190199#define CR2_WORD_CLOCK_1x       0x00002000 
    191200#define CR2_TOGGLE_TCO          0x00004000  // Normally set to 0 
    192 #define CR2_P12DB_AN0           0x00010000  // Normally set to 0 
     201#define CR2_P12DB_AN0           0x00010000  // Disable soft-limiter.  Normally set to 0 
    193202#define CR2_FF400_BIT           0x04000000  // Set on FF400, clear on FF800 
    194203#define CR2_TMS                 0x40000000  // Unit option, normally 0 
     
    200209#define CR2_SYNC_WORDCLOCK      (CR2_SYNC_REF2) 
    201210#define CR2_SYNC_TCO            (CR2_SYNC_REF0 | CR2_SYNC_REF2) 
     211#define CR2_DISABLE_LIMITER     CR2_P12DB_AN0 
    202212 
    203213/* Structure used to store device settings in the device flash RAM.  This 
     
    251261} FF_device_flash_settings_t; 
    252262 
    253 // Defines used to interpret device flash settings 
     263// Defines used to interpret device flash settings.  These appear to be 
     264// arbitary from the device's perspective since the device doesn't appear to 
     265// directly use these stored settings.  The driver loads the flash settings 
     266// and then uses them to infer the appropriate values for the configuration 
     267// registers.  The actual values used here appear to correspond more or less 
     268// to the "value" returns from the GUI elements used to represent the 
     269// controls under other systems. 
    254270#define FF_DEV_FLASH_INVALID                   0xffffffff 
    255 #define FF_DEV_FLASH_SPDIF_INPUT_COAX          0x00000001   // To be confirmed 
    256 #define FF_DEV_FLASH_SPDIF_INPUT_OPTICAL       0x00000000   // To be confirmed 
     271#define FF_DEV_FLASH_SPDIF_INPUT_COAX          0x00000002   // To be confirmed 
     272#define FF_DEV_FLASH_SPDIF_INPUT_OPTICAL       0x00000001   // To be confirmed 
    257273#define FF_DEV_FLASH_SPDIF_OUTPUT_COAX         0x00000000   // To be confirmed 
    258274#define FF_DEV_FLASH_SPDIF_OUTPUT_OPTICAL      0x00000001   // To be confirmed 
     
    260276#define FF_DEV_FLASH_SPDIF_OUTPUT_PRO_ON       0x00000001 
    261277#define FF_DEV_FLASH_SPDIF_OUTPUT_NONAUDIO_ON  0x00000001 
    262 #define FF_DEV_FLASH_CLOCK_MODE_MASTER         0x00000000 
     278#define FF_DEV_FLASH_CLOCK_MODE_MASTER         0x00000002 
     279#define FF_DEV_FLASH_CLOCK_MODE_AUTOSYNC       0x00000001 
    263280#define FF_DEV_FLASH_CLOCK_MODE_SLAVE          0x00000001 
     281#define FF_DEV_FLASH_SYNCREF_WORDCLOCK         0x00000001 
     282#define FF_DEV_FLASH_SYNCREF_ADAT1             0x00000002 
     283#define FF_DEV_FLASH_SYNCREF_ADAT2             0x00000003 
     284#define FF_DEV_FLASH_SYNCREF_SPDIF             0x00000004 
     285#define FF_DEV_FLASH_SYNCREC_TCO               0x00000005 
     286#define FF_DEV_FLASH_ILEVEL_LOGAIN             0x00000001 
     287#define FF_DEV_FLASH_ILEVEL_4dBU               0x00000002 
     288#define FF_DEV_FLASH_ILEVEL_m10dBV             0x00000003 
     289#define FF_DEV_FLASH_OLEVEL_HIGAIN             0x00000001 
     290#define FF_DEV_FLASH_OLEVEL_4dBU               0x00000002 
     291#define FF_DEV_FLASH_OLEVEL_m10dBV             0x00000003 
    264292#define FF_DEV_FLASH_MIC_PHANTOM_ON            0x00000001 
     293#define FF_DEV_FLAS_WORD_CLOCK_1x              0x00000001 
    265294 
    266295// Structure used by FFADO to keep track of the device status.  This is 
     
    287316    uint32_t filter; 
    288317    uint32_t fuzz; 
     318    uint32_t limiter_disable; 
    289319    uint32_t sample_rate; 
    290320    uint32_t word_clock_single_speed; 
     321    uint32_t phones_level;             // No equivalent in device flash 
     322    uint32_t input_opt[3];             // No equivalent in device flash 
    291323} FF_software_settings_t; 
    292324 
     325// Defines used to interpret the software settings structure.  For now we 
     326// use the same values as used by the device flash settings to remove the 
     327// need for translation between reading the flash and copying it to the 
     328// software settings structure, but in principle different values could be 
     329// used given translation code. 
     330#define FF_SWPARAM_INVALID                     FF_DEV_FLASH_INVALID 
     331#define FF_SWPARAM_SPDIF_INPUT_COAX            FF_DEV_FLASH_SPDIF_INPUT_COAX 
     332#define FF_SWPARAM_SPDIF_INPUT_OPTICAL         FF_DEV_FLASH_SPDIF_INPUT_OPTICAL 
     333#define FF_SWPARAM_SPDIF_OUTPUT_COAX           FF_DEV_FLASH_SPDIF_OUTPUT_COAX 
     334#define FF_SWPARAM_SPDIF_OUTPUT_OPTICAL        FF_DEV_FLASH_SPDIF_OUTPUT_OPTICAL 
     335#define FF_SWPARAM_SPDIF_OUTPUT_EMPHASIS_ON    FF_DEV_FLASH_SPDIF_OUTPUT_EMPHASIS_ON 
     336#define FF_SWPARAM_SPDIF_OUTPUT_PRO_ON         FF_DEV_FLASH_SPDIF_OUTPUT_PRO_ON 
     337#define FF_SWPARAM_SPDIF_OUTPUT_NONAUDIO_ON    FF_DEV_FLASH_SPDIF_OUTPUT_NONAUDIO_ON 
     338#define FF_SWPARAM_SPDIF_CLOCK_MODE_MASTER     FF_DEV_FLASH_CLOCK_MODE_MASTER 
     339#define FF_SWPARAM_SPDIF_CLOCK_MODE_AUTOSYNC   FF_DEV_FLASH_CLOCK_MODE_AUTOSYNC 
     340#define FF_SWPARAM_SPDIF_CLOCK_MODE_SLAVE      FF_DEV_FLASH_CLOCK_MODE_SLAVE 
     341#define FF_SWPARAM_SYNCREF_WORDCLOCK           FF_DEV_FLASH_SYNCREF_WORDCLOCK 
     342#define FF_SWPARAM_SYNCREF_ADAT1               FF_DEV_FLASH_SYNCREF_ADAT1 
     343#define FF_SWPARAM_SYNCREF_ADAT2               FF_DEV_FLASH_SYNCREF_ADAT2 
     344#define FF_SWPARAM_SYNCREF_SPDIF               FF_DEV_FLASH_SYNCREF_SPDIF 
     345#define FF_SWPARAM_SYNCREC_TCO                 FF_DEV_FLASH_SYNCREC_TCO 
     346#define FF_SWPARAM_ILEVEL_LOGAIN               FF_DEV_FLASH_ILEVEL_LOGAIN 
     347#define FF_SWPARAM_ILEVEL_4dBU                 FF_DEV_FLASH_ILEVEL_4dBU 
     348#define FF_SWPARAM_ILEVEL_m10dBV               FF_DEV_FLASH_ILEVEL_m10dBV 
     349#define FF_SWPARAM_OLEVEL_HIGAIN               FF_DEV_FLASH_OLEVEL_HIGAIN 
     350#define FF_SWPARAM_OLEVEL_4dBU                 FF_DEV_FLASH_OLEVEL_4dBU 
     351#define FF_SWPARAM_OLEVEL_m10dBV               FF_DEV_FLASH_OLEVEL_m10dBV 
     352#define FF_SWPARAM_MIC_PHANTOM_ON              FF_DEV_FLASH_MIC_PHANTOM_ON 
     353#define FF_SWPARAM_WORD_CLOCK_1x               FF_DEV_FLAS_WORD_CLOCK_1x 
     354// 
     355// The following defines refer to fields in the software parameter record which have no 
     356// equivalent in the device flash. 
     357#define FF_SWPARAM_PHONESLEVEL_HIGAIN          0x00000001 
     358#define FF_SWPARAM_PHONESLEVEL_4dBU            0x00000002 
     359#define FF_SWPARAM_PHONESLEVEL_m10dBV          0x00000003 
     360#define FF_SWPARAM_INPUT_OPT_B                 0x00000001 
     361#define FF_SWPARAM_INPUT_OPT_A                 0x00000002 
     362 
     363#define FF_SWPARAM_FF800_INPUT_OPT_FRONT       FF_SWPARAM_INPUT_OPT_A 
     364#define FF_SWPARAM_FF800_INPUT_OPT_REAR        FF_SWPARAM_INPUT_OPT_B 
    293365#endif 
  • trunk/libffado/src/rme/fireface_hw.cpp

    r1553 r1570  
    5353      data[0] |= CR0_PHANTOM_MIC3; 
    5454 
     55    /* Phones level */ 
     56    switch (settings.phones_level) { 
     57        case FF_SWPARAM_PHONESLEVEL_HIGAIN: 
     58            data[0] |= CRO_PHLEVEL_HIGAIN; 
     59            break; 
     60        case FF_SWPARAM_PHONESLEVEL_4dBU: 
     61            data[0] |= CR0_PHLEVEL_4dBU; 
     62            break; 
     63        case FF_SWPARAM_PHONESLEVEL_m10dBV: 
     64            data[0] |= CRO_PHLEVEL_m10dBV; 
     65            break; 
     66    } 
     67 
    5568    /* Input level */ 
    5669    switch (settings.input_level) { 
    57         case 1: // Low gain 
     70        case FF_SWPARAM_ILEVEL_LOGAIN: // Low gain 
    5871            data[1] |= CR1_ILEVEL_CPLD_LOGAIN;    // CPLD 
    5972            data[0] |= CR0_ILEVEL_FPGA_LOGAIN;    // LED control (used on FF800 only) 
    6073            break; 
    61         case 2: // +4 dBu 
     74        case FF_SWPARAM_ILEVEL_4dBU:  // +4 dBu 
    6275            data[1] |= CR1_ILEVEL_CPLD_4dBU; 
    6376            data[0] |= CR0_ILEVEL_FPGA_4dBU; 
    6477            break; 
    65         case 3: // -10 dBV 
     78        case FF_SWPARAM_ILEVEL_m10dBV: // -10 dBV 
    6679            data[1] |= CR1_ILEVEL_CPLD_m10dBV; 
    6780            data[0] |= CR0_ILEVEL_FPGA_m10dBV; 
     
    7184    /* Output level */ 
    7285    switch (settings.output_level) { 
    73         case 1: // High gain 
     86        case FF_SWPARAM_OLEVEL_HIGAIN: // High gain 
    7487            data[1] |= CR1_OLEVEL_CPLD_HIGAIN;   // CPLD 
    7588            data[0] |= CR0_OLEVEL_FPGA_HIGAIN;   // LED control (used on FF800 only) 
    7689            break; 
    77         case 2: // +4 dBu 
     90        case FF_SWPARAM_OLEVEL_4dBU:  // +4 dBu 
    7891            data[1] |= CR1_OLEVEL_CPLD_4dBU; 
    7992            data[0] |= CR0_OLEVEL_FPGA_4dBU; 
    8093            break; 
    81         case 3: // -10 dBV 
     94        case FF_SWPARAM_OLEVEL_m10dBV: // -10 dBV 
    8295            data[1] |= CR1_OLEVEL_CPLD_m10dBV; 
    8396            data[0] |= CR0_OLEVEL_FPGA_m10dBV; 
     
    8598    } 
    8699 
    87     /* Speaker emulation / filter  FIXME: needs filling out, is tied i
    88      * with analog input settings.  
     100    /* Set input options.  The meaning of the options differs betwee
     101     * devices, so we use the generic identifiers here. 
    89102     */ 
    90     data[1] = 0xf; 
     103    data[1] |= (settings.input_opt[1] & FF_SWPARAM_INPUT_OPT_A) ? CR1_INPUT_OPT1_A : 0; 
     104    data[1] |= (settings.input_opt[1] & FF_SWPARAM_INPUT_OPT_B) ? CR1_INPUT_OPT1_B : 0; 
     105    data[1] |= (settings.input_opt[2] & FF_SWPARAM_INPUT_OPT_A) ? CR1_INPUT_OPT2_A : 0; 
     106    data[1] |= (settings.input_opt[2] & FF_SWPARAM_INPUT_OPT_B) ? CR1_INPUT_OPT2_B : 0; 
     107 
     108    // Drive the speaker emulation / filter LED via FPGA 
     109    data[0] |= (settings.filter) ? CR0_FILTER_FPGA : 0; 
     110 
     111    // Set the "rear" option for input 0 if selected 
     112    data[1] |= (settings.input_opt[0] & FF_SWPARAM_FF800_INPUT_OPT_REAR) ? CR1_FF800_INPUT1_REAR : 0; 
     113 
     114    // The input 0 "front" option is activated using one of two bits 
     115    // depending on whether the filter (aka "speaker emulation") setting is 
     116    // active. 
     117    if (settings.input_opt[0] & FF_SWPARAM_FF800_INPUT_OPT_FRONT) { 
     118        data[1] |= (settings.filter) ? CR1_FF800_INPUT1_FRONT_WITH_FILTER : CR1_FF800_INPUT1_FRONT; 
     119    } 
     120 
     121    data[2] |= (settings.spdif_output_emphasis==FF_SWPARAM_SPDIF_OUTPUT_EMPHASIS_ON) ? CR2_SPDIF_OUT_EMP : 0; 
     122    data[2] |= (settings.spdif_output_pro==FF_SWPARAM_SPDIF_OUTPUT_PRO_ON) ? CR2_SPDIF_OUT_PRO : 0; 
     123    data[2] |= (settings.spdif_output_nonaudio==FF_SWPARAM_SPDIF_OUTPUT_NONAUDIO_ON) ? CR2_SPDIF_OUT_NONAUDIO : 0; 
     124    data[2] |= (settings.spdif_output_mode==FF_SWPARAM_SPDIF_OUTPUT_OPTICAL) ? CR2_SPDIF_OUT_ADAT2 : 0; 
     125    data[2] |= (settings.clock_mode==FF_SWPARAM_SPDIF_CLOCK_MODE_AUTOSYNC) ? CR2_CLOCKMODE_AUTOSYNC : CR2_CLOCKMODE_MASTER; 
     126    data[2] |= (settings.spdif_input_mode==FF_SWPARAM_SPDIF_INPUT_COAX) ? CR2_SPDIF_IN_COAX : CR2_SPDIF_IN_ADAT2; 
     127    data[2] |= (settings.word_clock_single_speed=FF_SWPARAM_WORD_CLOCK_1x) ? CR2_WORD_CLOCK_1x : 0; 
     128 
     129    /* TMS / TCO toggle bits in CR2 are not set by other drivers */ 
    91130 
    92131    /* Drive / fuzz */ 
     
    96135      data[1] |= CR1_INSTR_DRIVE;      // CPLD 
    97136 
    98     /* Drop-and-stop is hardwired on */ 
     137    /* Drop-and-stop is hardwired on in other drivers */ 
    99138    data[2] |= CR2_DROP_AND_STOP; 
    100139 
     
    103142    } 
    104143 
     144    switch (settings.sync_ref) { 
     145        case FF_SWPARAM_SYNCREF_WORDCLOCK: 
     146            data[2] |= CR2_SYNC_WORDCLOCK; 
     147            break; 
     148        case FF_SWPARAM_SYNCREF_ADAT1: 
     149            data[2] |= CR2_SYNC_ADAT1; 
     150            break; 
     151        case FF_SWPARAM_SYNCREF_ADAT2: 
     152            data[2] |= CR2_SYNC_ADAT2; 
     153            break; 
     154        case FF_SWPARAM_SYNCREF_SPDIF: 
     155            data[2] |= CR2_SYNC_SPDIF; 
     156            break; 
     157        case FF_SWPARAM_SYNCREC_TCO: 
     158            data[2] |= CR2_SYNC_TCO; 
     159            break; 
     160    } 
     161 
     162    // This is hardwired in other drivers 
    105163    data[2] |= (CR2_FREQ0 + CR2_FREQ1 + CR2_DSPEED + CR2_QSSPEED); 
    106164 
     165    data[2] |= (settings.limiter_disable &&  
     166                (settings.input_opt[0] & FF_SWPARAM_FF800_INPUT_OPT_FRONT)) ?  
     167                CR2_DISABLE_LIMITER : 0; 
     168 
     169//This is just for testing - it's a known consistent configuration 
    107170//data[0] = 0x00020811;      // Phantom off 
    108171data[0] = 0x00020811;      // Phantom on