void setConnectionType(unsigned short address, protocolSelector connectionType) { subscriberArray[address].setConnectionType(connectionType); if (connectionType == NO_CONNECTION) setChannelStatus(address, closed); else setChannelStatus(address, opened); return; }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void AppleTopazPluginCS8420::setRunMode ( UInt8 mode ) { CODEC_WriteRegister ( map_CS8420_CLOCK_SOURCE_CTRL, mode ); if ( ( mode & ( 1 << baCS8420_RUN ) ) == ( 1 << baCS8420_RUN ) ) { // [3669626] setChannelStatus ( &mChanStatusStruct ); // [3669626] Flush channel status buffer } }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOReturn AppleTopazPluginCS8420::makeClockSelectPreLock ( UInt32 clockSource ) { IOReturn result; UInt8 data; debugIOLog (5, "+ AppleTopazPluginCS8420::makeClockSelect ( %d )", (unsigned int)clockSource ); // Clear any pending error interrupt status and re-enable error interrupts after completing clock source selection result = CODEC_ReadRegister ( map_CS8420_RX_ERROR, &data, 1 ); FailIf ( kIOReturnSuccess != result, Exit ); // Enable error (i.e. RERR) interrupts ONLY IF C28420 IS CLOCK MASTER if ( kTRANSPORT_SLAVE_CLOCK == clockSource ) { result = CODEC_WriteRegister ( map_CS8420_RX_ERROR_MASK, kCS8420_RX_ERROR_MASK_ENABLE_RERR ); FailIf ( kIOReturnSuccess != result, Exit ); } switch ( clockSource ) { case kTRANSPORT_MASTER_CLOCK: data = mShadowRegs[map_CS8420_DATA_FLOW_CTRL]; data &= ~( bvCS8420_spdMASK << baCS8420_SPD ); data |= ( bvCS8420_spdSrcOut << baCS8420_SPD ); result = CODEC_WriteRegister ( map_CS8420_DATA_FLOW_CTRL, data ); data = mShadowRegs[map_CS8420_CLOCK_SOURCE_CTRL]; data &= ~( 1 << baCS8420_OUTC ); data |= ( bvCS8420_outcOmckXbaCLK << baCS8420_OUTC ); result = CODEC_WriteRegister ( map_CS8420_CLOCK_SOURCE_CTRL, data ); break; case kTRANSPORT_SLAVE_CLOCK: data = mShadowRegs[map_CS8420_DATA_FLOW_CTRL]; data &= ~( bvCS8420_spdMASK << baCS8420_SPD ); data |= ( bvCS8420_spdAES3 << baCS8420_SPD ); result = CODEC_WriteRegister ( map_CS8420_DATA_FLOW_CTRL, data ); data = mShadowRegs[map_CS8420_CLOCK_SOURCE_CTRL]; data &= ~( 1 << baCS8420_OUTC ); data |= ( bvCS8420_outcRecIC << baCS8420_OUTC ); result = CODEC_WriteRegister ( map_CS8420_CLOCK_SOURCE_CTRL, data ); break; } // restart the codec after switching clocks data = mShadowRegs[map_CS8420_CLOCK_SOURCE_CTRL]; data &= ~( 1 << baCS8420_RUN ); data |= ( bvCS8420_runNORMAL << baCS8420_RUN ); result = CODEC_WriteRegister ( map_CS8420_CLOCK_SOURCE_CTRL, data ); setChannelStatus ( &mChanStatusStruct ); // [3669626] Flush channel status buffer Exit: debugIOLog (5, "- AppleTopazPluginCS8420::makeClockSelect ( %d ) returns %d", (unsigned int)clockSource, (unsigned int)result ); return result; }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IOReturn AppleTopazPluginCS8420::performDeviceWake ( void ) { IOReturn result; debugIOLog (3, "+ AppleTopazPluginCS8420::performDeviceWake()" ); flushControlRegisters (); mShadowRegs[map_CS8420_DATA_FLOW_CTRL] &= ~( kCS84XX_BIT_MASK << baCS8420_TXOFF ); mShadowRegs[map_CS8420_DATA_FLOW_CTRL] |= ( bvCS8420_aes3TXNormal << baCS8420_TXOFF ); result = CODEC_WriteRegister ( map_CS8420_DATA_FLOW_CTRL, mShadowRegs[map_CS8420_DATA_FLOW_CTRL] ); FailIf ( kIOReturnSuccess != result, Exit ); mShadowRegs[map_CS8420_CLOCK_SOURCE_CTRL] &= ~( kCS84XX_BIT_MASK << baCS8420_RUN ); mShadowRegs[map_CS8420_CLOCK_SOURCE_CTRL] |= ( bvCS8420_runNORMAL << baCS8420_RUN ); result = CODEC_WriteRegister ( map_CS8420_CLOCK_SOURCE_CTRL, mShadowRegs[map_CS8420_CLOCK_SOURCE_CTRL] ); FailIf ( kIOReturnSuccess != result, Exit ); setChannelStatus ( &mChanStatusStruct ); // [3669626] Flush channel status buffer Exit: debugIOLog (3, "- AppleTopazPluginCS8420::performDeviceWake()" ); return result; }