Index: /trunk/libffado/src/rme/fireface_hw.cpp =================================================================== --- /trunk/libffado/src/rme/fireface_hw.cpp (revision 1690) +++ /trunk/libffado/src/rme/fireface_hw.cpp (revision 1696) @@ -24,4 +24,7 @@ /* This file implements miscellaneous lower-level hardware functions for the Fireface */ +#include "libieee1394/configrom.h" +#include "libieee1394/ieee1394service.h" + #include "rme/rme_avdevice.h" #include "rme/fireface_def.h" @@ -103,4 +106,22 @@ } dev_config->tco_settings_valid = 1; + } + + if (ret==0 && m_rme_model==RME_MODEL_FIREFACE400) { + unsigned int node_id = getConfigRom().getNodeId(); + unsigned int midi_hi_addr; + // For now we'll fix this since that's what's done under other + // systems. + midi_hi_addr = 0x01; + if (writeRegister(RME_FF400_MIDI_HIGH_ADDR, (node_id<<16) | midi_hi_addr) != 0) + ret = -1; + } + + if (ret==0) { + signed freq = dev_config->software_freq; + if (dev_config->dds_freq > 0) + freq = dev_config->dds_freq; + if (set_hardware_dds_freq(freq) != 0) + ret = -1; } Index: /trunk/libffado/src/rme/fireface_def.h =================================================================== --- /trunk/libffado/src/rme/fireface_def.h (revision 1690) +++ /trunk/libffado/src/rme/fireface_def.h (revision 1696) @@ -88,4 +88,6 @@ #define RME_FF400_GAIN_REG 0x801c0180 + +#define RME_FF400_MIDI_HIGH_ADDR 0x801003f4 /* Addresses of various blocks in memory-mapped flash */