--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/drivers/pbus/mmc/sdcard/sdcard3c/sdio/sdiopsu.cpp Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <drivers/sdio/sdio.h>
+#include "utraceepbussdio.h"
+
+EXPORT_C DSDIOPsu::DSDIOPsu(TInt aPsuNum, TInt aMediaChangedNum)
+/**
+@publishedPartner
+@released
+
+Constructor for a DSDIOPsu object
+param aPsuNum The power supply number
+@param aMediaChangedNum The associated media change number
+*/
+ : DMMCPsu(aPsuNum, aMediaChangedNum)
+ {
+ TRACE1(TTraceContext(EBorder), UTraceModuleEPBusSDIO::ESDIODSDIOPsuConstructor, reinterpret_cast<TUint32>(this)); // @SymTraceDataPublishedTvk
+ TRACE1(TTraceContext(EBorder), UTraceModuleEPBusSDIO::ESDIODSDIOPsuConstructorReturning, reinterpret_cast<TUint32>(this)); // @SymTraceDataPublishedTvk
+ }
+
+EXPORT_C TInt DSDIOPsu::DoCreate()
+/**
+Creates the DSDIOPsu object
+*/
+ {
+ TRACE1(TTraceContext(EBorder), UTraceModuleEPBusSDIO::ESDIODSDIOPsuDoCreate, reinterpret_cast<TUint32>(this)); // @SymTraceDataPublishedTvk
+ TInt err = DMMCPsu::DoCreate();
+
+ TRACE2(TTraceContext(EBorder), UTraceModuleEPBusSDIO::ESDIODSDIOPsuDoCreateReturning, reinterpret_cast<TUint32>(this), err); // @SymTraceDataPublishedTvk
+ return(err);
+ }
+
+
+EXPORT_C void DSDIOPsu::DoTickService()
+/**
+Periodic update called only while PSU is on. This checks whether it is safe
+to remove power from the card or enter sleep mode.
+*/
+ {
+ TRACE1(TTraceContext(EBorder), UTraceModuleEPBusSDIO::ESDIODSDIOPsuDoTickService, reinterpret_cast<TUint32>(this)); // @SymTraceDataPublishedTvk
+
+ DSDIOSocket& theSocket = *static_cast<DSDIOSocket*>(iSocket);
+
+ if(IsLocked())
+ {
+ //
+ // If the card is locked, we use the inactivity timeout to determine
+ // whether we can enter sleep mode.
+ //
+ // Note that the power is not turned off, but the clients are notified
+ // to give them an opportunity to de-register themselves or enter a
+ // function-dependant low-power sleep mode).
+ //
+ if(iInactivityTimeout && ++iInactivityCount > iInactivityTimeout)
+ {
+ theSocket.SignalSleepMode();
+ iInactivityCount = 0;
+ }
+ }
+ else
+ {
+ //
+ // If the card is not locked, then we power down the card after the
+ // specified interval (iNotLockedTimeout). This shall perform an
+ // asynchronous power down and reset of the card before removing power
+ // to ensure that the card is in the lowest possible state of power
+ // consumption should the underlying hardware not support a programmable PSU.
+ //
+ if(iNotLockedTimeout)
+ iNotLockedCount++;
+
+ if(iInactivityTimeout)
+ iInactivityCount++;
+
+ if ((iNotLockedTimeout && iNotLockedCount > iNotLockedTimeout) &&
+ (iInactivityTimeout && iInactivityCount > iInactivityTimeout))
+ {
+ theSocket.ResetAndPowerDown();
+
+ iInactivityCount = 0;
+ iNotLockedCount = 0;
+ }
+ }
+
+ CheckVoltage(KPsuChkWhileOn);
+
+ TRACE1(TTraceContext(EBorder), UTraceModuleEPBusSDIO::ESDIODSDIOPsuDoTickServiceReturning, reinterpret_cast<TUint32>(this)); // @SymTraceDataPublishedTvk
+ }
+
+EXPORT_C TBool DSDIOPsu::IsLocked()
+/**
+Returns ETrue if a client has registered with a function.
+This prevents power-down events from diabling the function while waiting for
+long-term events (such as a wake on interrupt event for example)
+*/
+ {
+ TRACE1(TTraceContext(EBorder), UTraceModuleEPBusSDIO::ESDIODSDIOPsuIsLocked, reinterpret_cast<TUint32>(this)); // @SymTraceDataPublishedTvk
+
+ TBool locked = iIsLocked || DMMCPsu::IsLocked();
+
+ TRACE2(TTraceContext(EBorder), UTraceModuleEPBusSDIO::ESDIODSDIOPsuIsLockedReturning, reinterpret_cast<TUint32>(this), locked ? 1 : 0); // @SymTraceDataPublishedTvk
+ return(locked);
+ }
+
+EXPORT_C void DSDIOPsu::Dummy1() {}
+EXPORT_C void DSDIOPsu::Dummy2() {}
+EXPORT_C void DSDIOPsu::Dummy3() {}
+EXPORT_C void DSDIOPsu::Dummy4() {}