Changeset 1589
- Timestamp:
- 06/27/09 06:25:55 (14 years ago)
- Files:
-
- trunk/libffado/doc/rme_notes/rme_config_register_map.txt (modified) (3 diffs)
- trunk/libffado/src/rme/fireface_def.h (modified) (5 diffs)
- trunk/libffado/src/rme/fireface_flash.cpp (modified) (4 diffs)
- trunk/libffado/src/rme/rme_avdevice.cpp (modified) (1 diff)
- trunk/libffado/src/rme/rme_avdevice.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libffado/doc/rme_notes/rme_config_register_map.txt
r1570 r1589 4 4 Version: 0.10 5 5 Author: Jonathan Woithe 6 Date: 2 9 May20096 Date: 27 June 2009 7 7 8 8 … … 345 345 29 Input level (0=default, 1=lo-gain, 2=+4dBU, 3=-10dBV ???) 346 346 30 Output level (0=default, 1=hi-gain, 2=+4dBU, 3=-10dBV ???) 347 31 Mic level [0] - FF400:Phoneslevel-1 / F800:AnalogInput[1]* ??? 348 32 Mic level [1] - AnalogInput[2] ??? 347 31 Mic level [0] - FF400: Phoneslevel-1 348 FF800: Channel 7 front/rear select (0=rear, 1=front [TBC]) 349 32 Mic level [1] - FF400: unused 350 FF800: Channel 8 front/rear select (0=rear, 1=front [TBC]) 349 351 33 Mic phantom power [4] 350 37 Instrument - AnalogInput[0]-1 ??? 352 37 Instrument - FF400: unused 353 FF800: Channel 1 front/rear selector (0=rear, 1=font [TBC]) 351 354 38 Filter (aka speaker emulation) 352 355 39 Fuzz (aka drive) … … 360 363 47 - Number of channels (FF400=0x000000f0) 361 364 48 - Dropped samples 362 49 p12db_an[0] - Disable limiter, settable only if input1 front jack active365 49 p12db_an[0] - Disable limiter, settable only if channel 1 front jack active 363 366 50 - p12db_an[1-9] 364 367 trunk/libffado/src/rme/fireface_def.h
r1587 r1589 278 278 uint32_t input_level; 279 279 uint32_t output_level; 280 uint32_t mic_level[2]; 280 uint32_t mic_plug_select[2]; // Front/rear select for FF800 ch 7/8 281 // [0] = phones level on FF400 281 282 uint32_t mic_phantom[4]; 282 uint32_t instrument ;283 uint32_t instrument_plug_select; // Front/rear select for FF800 ch 1 283 284 uint32_t filter; 284 285 uint32_t fuzz; … … 326 327 #define FF_DEV_FLASH_MIC_PHANTOM_ON 0x00000001 327 328 #define FF_DEV_FLASH_WORD_CLOCK_1x 0x00000001 329 #define FF_DEV_FLASH_PLUG_SELECT_FRONT 0x00000001 // To be confirmed 330 #define FF_DEV_FLASH_PLUG_SELECT_REAR 0x00000000 // To be confirmed 328 331 329 332 // Structure used by FFADO to keep track of the device status. This is … … 346 349 uint32_t input_level; 347 350 uint32_t output_level; 348 uint32_t mic_level[2];349 uint32_t instrument;350 351 uint32_t filter; 351 352 uint32_t fuzz; … … 353 354 uint32_t sample_rate; 354 355 uint32_t word_clock_single_speed; 355 uint32_t phones_level; // No equivalentin device flash356 uint32_t input_opt[3]; // No equivalentin device flash356 uint32_t phones_level; // Derived from fields in device flash 357 uint32_t input_opt[3]; // Derived from fields in device flash 357 358 } FF_software_settings_t; 358 359 … … 387 388 #define FF_SWPARAM_WORD_CLOCK_1x FF_DEV_FLASH_WORD_CLOCK_1x 388 389 // 389 // The following defines refer to fields in the software parameter record which have no390 // equivalent in thedevice flash.390 // The following defines refer to fields in the software parameter record 391 // which are derived from one or more fields in device flash. 391 392 #define FF_SWPARAM_PHONESLEVEL_HIGAIN 0x00000001 392 393 #define FF_SWPARAM_PHONESLEVEL_4dBU 0x00000002 trunk/libffado/src/rme/fireface_flash.cpp
r1588 r1589 205 205 206 206 signed int 207 Device::read_device_ settings(void)207 Device::read_device_flash_settings(FF_software_settings_t *settings) 208 208 { 209 209 // Read the device's configuration flash RAM and use this to set up 210 // the object's "settings" data member field.210 // the given settings structure. 211 211 212 212 FF_device_flash_settings_t hw_settings; 213 signed int i ;213 signed int i, err = 0; 214 214 unsigned int rev; 215 215 … … 225 225 226 226 // Read settings flash ram block 227 i= read_flash(m_rme_model==RME_MODEL_FIREFACE800?227 err = read_flash(m_rme_model==RME_MODEL_FIREFACE800? 228 228 RME_FF800_FLASH_SETTINGS_ADDR:RME_FF400_FLASH_SETTINGS_ADDR, 229 229 (quadlet_t *)&hw_settings, sizeof(hw_settings)/sizeof(uint32_t)); 230 if ( i!= 0) {230 if (err != 0) { 231 231 debugOutput(DEBUG_LEVEL_WARNING, "Error reading device flash settings: %d\n", i); 232 232 } else { … … 248 248 } 249 249 250 if (settings != NULL) { 251 memset(settings, 0, sizeof(settings)); 252 // Copy hardware details to the software settings structure as 253 // appropriate. 254 for (i=0; i<4; i++) 255 settings->mic_phantom[i] = hw_settings.mic_phantom[i]; 256 settings->spdif_input_mode = hw_settings.spdif_input_mode; 257 settings->spdif_output_emphasis = hw_settings.spdif_output_emphasis; 258 settings->spdif_output_pro = hw_settings.spdif_output_pro; 259 settings->spdif_output_nonaudio = hw_settings.spdif_output_nonaudio; 260 settings->spdif_output_mode = hw_settings.spdif_output_mode; 261 settings->clock_mode = hw_settings.clock_mode; 262 settings->sync_ref = hw_settings.sync_ref; 263 settings->tms = hw_settings.tms; 264 settings->limit_bandwidth = hw_settings.limit_bandwidth; 265 settings->stop_on_dropout = hw_settings.stop_on_dropout; 266 settings->input_level = hw_settings.input_level; 267 settings->output_level = hw_settings.output_level; 268 settings->filter = hw_settings.filter; 269 settings->fuzz = hw_settings.fuzz; 270 settings->limiter_disable = (hw_settings.p12db_an[0] == 0)?1:0; 271 settings->sample_rate = hw_settings.sample_rate; 272 settings->word_clock_single_speed = hw_settings.word_clock_single_speed; 273 274 // The FF800 has front/rear selectors for the "instrument" input 275 // (aka channel 1) and the two "mic" channels (aka channels 7 and 8). 276 // The FF400 does not. The FF400 borrows the mic0 selector field 277 // in the flash configuration structure to use for the "phones" 278 // level which the FF800 doesn't have. 279 // The offset of 1 here is to maintain consistency with the values 280 // used in the flash by other operating systems. 281 if (m_rme_model == RME_MODEL_FIREFACE400) 282 settings->phones_level = hw_settings.mic_plug_select[0] + 1; 283 else { 284 settings->input_opt[0] = hw_settings.instrument_plug_select + 1; 285 settings->input_opt[1] = hw_settings.mic_plug_select[0] + 1; 286 settings->input_opt[2] = hw_settings.mic_plug_select[1] + 1; 287 } 288 } 289 250 290 { 251 291 quadlet_t buf[4]; … … 272 312 #endif 273 313 274 return 0; 275 } 276 277 signed int 278 Device::write_device_settings(void) 279 { 280 // Write the current settings as held in the "settings" data field to 281 // the device configuration flash. 314 return err!=0?-1:0; 315 } 316 317 signed int 318 Device::write_device_flash_settings(FF_software_settings_t *settings) 319 { 320 // Write the given device settings to the device's configuration flash. 282 321 283 322 // FIXME: fairly obviously the detail needs to be filled in here. trunk/libffado/src/rme/rme_avdevice.cpp
r1588 r1589 182 182 183 183 // This is just for testing 184 read_device_ settings();184 read_device_flash_settings(NULL); 185 185 186 186 return true; trunk/libffado/src/rme/rme_avdevice.h
r1588 r1589 115 115 116 116 /* Upper level flash memory functions */ 117 signed int read_device_ settings(void);118 signed int write_device_ settings(void);117 signed int read_device_flash_settings(FF_software_settings_t *settings); 118 signed int write_device_flash_settings(FF_software_settings_t *settings); 119 119 120 120 /* Hardware functions */