kernel/eka/drivers/pbus/mmc/sdcard/sdcard3c/sdio/sdiopsu.cpp
changeset 0 a41df078684a
--- /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() {}