Index: trunk/libffado/src/rme/rme_avdevice.h =================================================================== --- trunk/libffado/src/rme/rme_avdevice.h (revision 2032) +++ trunk/libffado/src/rme/rme_avdevice.h (revision 2033) @@ -118,4 +118,12 @@ signed int getSpdifInputMode(void); signed int setSpdifInputMode(signed int mode); + signed int getSpdifOutputIsOptical(void); + signed int setSpdifOutputIsOptical(signed int enable); + signed int getSpdifOutputEmphasisOn(void); + signed int setSpdifOutputEmphasisOn(signed int enable); + signed int getSpdifOutputNonAudioOn(void); + signed int setSpdifOutputNonAudioOn(signed int enable); + signed int getSpdifOutputProOn(void); + signed int setSpdifOutputProOn(signed int enable); signed int getAmpGain(unsigned int index); signed int setAmpGain(unsigned int index, signed int val); Index: trunk/libffado/src/rme/fireface_settings_ctrls.h =================================================================== --- trunk/libffado/src/rme/fireface_settings_ctrls.h (revision 2016) +++ trunk/libffado/src/rme/fireface_settings_ctrls.h (revision 2033) @@ -33,19 +33,22 @@ #define RME_CTRL_PHANTOM_SW 0x0001 #define RME_CTRL_SPDIF_INPUT_MODE 0x0002 -#define RME_CTRL_SPDIF_OUTPUT_OPTIONS 0x0003 -#define RME_CTRL_CLOCK_MODE 0x0004 -#define RME_CTRL_SYNC_REF 0x0005 -#define RME_CTRL_DEV_OPTIONS 0x0006 -#define RME_CTRL_LIMIT_BANDWIDTH 0x0007 -#define RME_CTRL_INPUT_LEVEL 0x0008 -#define RME_CTRL_OUTPUT_LEVEL 0x0009 -#define RME_CTRL_INSTRUMENT_OPTIONS 0x000a -#define RME_CTRL_WCLK_SINGLE_SPEED 0x000b -#define RME_CTRL_PHONES_LEVEL 0x000c -#define RME_CTRL_INPUT0_OPTIONS 0x000d -#define RME_CTRL_INPUT1_OPTIONS 0x000e -#define RME_CTRL_INPUT2_OPTIONS 0x000f -#define RME_CTRL_FF400_PAD_SW 0x0010 -#define RME_CTRL_FF400_INSTR_SW 0x0011 +#define RME_CTRL_SPDIF_OUTPUT_OPTICAL 0x0003 +#define RME_CTRL_SPDIF_OUTPUT_PRO 0x0004 +#define RME_CTRL_SPDIF_OUTPUT_EMPHASIS 0x0005 +#define RME_CTRL_SPDIF_OUTPUT_NONAUDIO 0x0006 +#define RME_CTRL_CLOCK_MODE 0x0007 +#define RME_CTRL_SYNC_REF 0x0008 +#define RME_CTRL_DEV_OPTIONS 0x0009 +#define RME_CTRL_LIMIT_BANDWIDTH 0x000a +#define RME_CTRL_INPUT_LEVEL 0x000b +#define RME_CTRL_OUTPUT_LEVEL 0x000c +#define RME_CTRL_INSTRUMENT_OPTIONS 0x000d +#define RME_CTRL_WCLK_SINGLE_SPEED 0x000e +#define RME_CTRL_PHONES_LEVEL 0x000f +#define RME_CTRL_INPUT0_OPTIONS 0x0010 +#define RME_CTRL_INPUT1_OPTIONS 0x0011 +#define RME_CTRL_INPUT2_OPTIONS 0x0012 +#define RME_CTRL_FF400_PAD_SW 0x0013 +#define RME_CTRL_FF400_INSTR_SW 0x0014 #define RME_CTRL_INFO_MODEL 0x0100 Index: trunk/libffado/src/rme/rme_avdevice.cpp =================================================================== --- trunk/libffado/src/rme/rme_avdevice.cpp (revision 2032) +++ trunk/libffado/src/rme/rme_avdevice.cpp (revision 2033) @@ -164,4 +164,16 @@ "SPDIF_input_mode", "SPDIF input mode", "")); result &= m_ControlContainer->addElement( + new RmeSettingsCtrl(*this, RME_CTRL_SPDIF_OUTPUT_OPTICAL, 0, + "SPDIF_output_optical", "SPDIF output optical", "")); + result &= m_ControlContainer->addElement( + new RmeSettingsCtrl(*this, RME_CTRL_SPDIF_OUTPUT_EMPHASIS, 0, + "SPDIF_output_emphasis", "SPDIF output emphasis", "")); + result &= m_ControlContainer->addElement( + new RmeSettingsCtrl(*this, RME_CTRL_SPDIF_OUTPUT_PRO, 0, + "SPDIF_output_pro", "SPDIF output pro", "")); + result &= m_ControlContainer->addElement( + new RmeSettingsCtrl(*this, RME_CTRL_SPDIF_OUTPUT_NONAUDIO, 0, + "SPDIF_output_nonaudio", "SPDIF output non-audio", "")); + result &= m_ControlContainer->addElement( new RmeSettingsCtrl(*this, RME_CTRL_PHONES_LEVEL, 0, "Phones_level", "Phones level", "")); Index: trunk/libffado/src/rme/rme_avdevice_settings.cpp =================================================================== --- trunk/libffado/src/rme/rme_avdevice_settings.cpp (revision 2032) +++ trunk/libffado/src/rme/rme_avdevice_settings.cpp (revision 2033) @@ -157,4 +157,45 @@ set_hardware_params(); return 0; +} + +signed int +Device::getSpdifOutputIsOptical(void) { + return settings->spdif_output_mode == FF_SWPARAM_SPDIF_OUTPUT_OPTICAL; +} +signed int +Device::setSpdifOutputIsOptical(signed int enable) { + settings->spdif_output_mode = enable==1?FF_SWPARAM_SPDIF_OUTPUT_OPTICAL:FF_SWPARAM_SPDIF_OUTPUT_COAX; + set_hardware_params(); + return 0; +} +signed int +Device::getSpdifOutputEmphasisOn(void) { + return settings->spdif_output_emphasis == FF_SWPARAM_SPDIF_OUTPUT_EMPHASIS_ON; +} +signed int +Device::setSpdifOutputEmphasisOn(signed int enable) { + settings->spdif_output_emphasis = enable==1?FF_SWPARAM_SPDIF_OUTPUT_EMPHASIS_ON:0; + set_hardware_params(); + return 0; +} +signed int +Device::getSpdifOutputNonAudioOn(void) { + return settings->spdif_output_nonaudio == FF_SWPARAM_SPDIF_OUTPUT_NONAUDIO_ON; +} +signed int +Device::setSpdifOutputNonAudioOn(signed int enable) { + settings->spdif_output_nonaudio = enable==1?FF_SWPARAM_SPDIF_OUTPUT_NONAUDIO_ON:0; + set_hardware_params(); + return 0; +} +signed int +Device::getSpdifOutputProOn(void) { + return settings->spdif_output_pro == FF_SWPARAM_SPDIF_OUTPUT_PRO_ON; +} +signed int +Device::setSpdifOutputProOn(signed int enable) { + settings->spdif_output_pro = enable==1?FF_SWPARAM_SPDIF_OUTPUT_PRO_ON:0; + set_hardware_params(); + return 0; } Index: trunk/libffado/src/rme/fireface_settings_ctrls.cpp =================================================================== --- trunk/libffado/src/rme/fireface_settings_ctrls.cpp (revision 2032) +++ trunk/libffado/src/rme/fireface_settings_ctrls.cpp (revision 2033) @@ -120,4 +120,24 @@ } break; + case RME_CTRL_SPDIF_OUTPUT_OPTICAL: + if (m_parent.setSpdifOutputIsOptical(v!=0) == 0) { + m_value = (v != 0); + } + break; + case RME_CTRL_SPDIF_OUTPUT_PRO: + if (m_parent.setSpdifOutputProOn(v!=0) == 0) { + m_value = (v != 0); + } + break; + case RME_CTRL_SPDIF_OUTPUT_EMPHASIS: + if (m_parent.setSpdifOutputEmphasisOn(v!=0) == 0) { + m_value = (v != 0); + } + break; + case RME_CTRL_SPDIF_OUTPUT_NONAUDIO: + if (m_parent.setSpdifOutputNonAudioOn(v!=0) == 0) { + m_value = (v != 0); + } + break; case RME_CTRL_PHONES_LEVEL: if (m_parent.setPhonesLevel(v)) { @@ -173,4 +193,16 @@ i = m_parent.getSpdifInputMode(); return i==FF_SWPARAM_SPDIF_INPUT_COAX?0:1; + break; + case RME_CTRL_SPDIF_OUTPUT_OPTICAL: + return m_parent.getSpdifOutputIsOptical(); + break; + case RME_CTRL_SPDIF_OUTPUT_PRO: + return m_parent.getSpdifOutputProOn(); + break; + case RME_CTRL_SPDIF_OUTPUT_EMPHASIS: + return m_parent.getSpdifOutputEmphasisOn(); + break; + case RME_CTRL_SPDIF_OUTPUT_NONAUDIO: + return m_parent.getSpdifOutputNonAudioOn(); break; case RME_CTRL_PHONES_LEVEL: Index: trunk/libffado/support/mixer-qt4/ffado/mixer/rme.ui =================================================================== --- trunk/libffado/support/mixer-qt4/ffado/mixer/rme.ui (revision 2032) +++ trunk/libffado/support/mixer-qt4/ffado/mixer/rme.ui (revision 2033) @@ -513,5 +513,5 @@ - + Optical @@ -520,5 +520,5 @@ - + Emphasis @@ -527,5 +527,5 @@ - + Professional @@ -534,5 +534,5 @@ - + Non-audio Index: trunk/libffado/support/mixer-qt4/ffado/mixer/rme.py =================================================================== --- trunk/libffado/support/mixer-qt4/ffado/mixer/rme.py (revision 2032) +++ trunk/libffado/support/mixer-qt4/ffado/mixer/rme.py (revision 2033) @@ -58,4 +58,9 @@ self.ff400_chan4_opt_instr: ['/Control/Chan4_opt_instr'], self.ff400_chan4_opt_pad: ['/Control/Chan4_opt_pad'], + + self.spdif_output_optical: ['/Control/SPDIF_output_optical', 0], + self.spdif_output_emphasis: ['/Control/SPDIF_output_emphasis', 0], + self.spdif_output_pro: ['/Control/SPDIF_output_pro', 0], + self.spdif_output_nonaudio: ['/Control/SPDIF_output_nonaudio', 0], }