// Copyright (c) 2009 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://#ifndef TPS65950_H#define TPS65950_H#include <e32cmn.h>#include <nklib.h>#include <assp/omap3530_assp/omap3530_irqmap.h>#include <assp/omap3530_shared/tps65950_registers.h>// Trace - 191 = 0x00000000 0x00000000 0x00000000 0x00000000 0x0000000 0x0000000 0x80000000 0x00000000 0x00000000#define KTPS65950 191namespace TPS65950{/** Structure used for issuing an asynchronous request * You must set iDfc to point to a TDfc object which will * be queued on completion */struct TReq { enum TAction { ERead, EWrite, EClearSet, EDisableProtect, ERestoreProtect }; TUint16 iRegister; ///< Register to be accessed TAction iAction : 8; ///< type of request, read, write or clearset TUint8 iReadValue; ///< Returned value from a read, original value for a ClearSet, unused for write union { TUint8 iWriteValue; ///< Value to write into register for a write TUint8 iSetMask; ///< Bits to set in a ClearSet }; TUint8 iClearMask; ///< Bits to clear in a ClearSet TDfc* iCompletionDfc; ///< Pointer to DFC to be called on completion (for multi-phase only the last TReq causes a completion) TInt iResult; ///< KErrNone on success, else error code TReq* iNextPhase; ///< set to NULL if this is a single request, for a multi-phase request set this to point to next TReq SDblQueLink iLink; ///< Used internally to maintain linked list of requests };struct TRtcTime { TUint8 iSecond; TUint8 iMinute; TUint8 iHour; TUint8 iDay; TUint8 iMonth; TUint8 iYear; };/** Test whether this driver has been initialized * Use this in code which is expected to run early during boot * to prevent it trying to access this driver before it is ready * * @return ETrue if initialized, EFalse if not */IMPORT_C TBool Initialized();/** Execute a request asynchronously * * @param aRequest Request object to executed, must stay valid until request completes */IMPORT_C void ExecAsync( TReq& aRequest );/** Execute a write synchronously * @param aRegister Register to write to - this must be one of the * register enumerations from tps65950_register.h * or the value of a register Addr property * * @param aValue Value to write to register * @return KErrNone on success, else standard error code */IMPORT_C TInt WriteSync( TUint16 aRegister, TUint8 aValue );/** Execute a read synchronously * @param aRegister Register to write to - this must be one of the * register enumerations from tps65950_register.h * or the value of a register Addr property * * @param aValue Value read will be written to here * @return KErrNone on success, else standard error code */IMPORT_C TInt ReadSync( TUint16 aRegister, TUint8& aValue );/** Execute a bit clear/set synchronously * @param aRegister Register to write to - this must be one of the * register enumerations from tps65950_register.h * or the value of a register Addr property * * @param aClearMask Each '1' clear the corresponding bit in the register * @param aSetMask Each '1' sets the corresponding bit in the register * @return KErrNone on success, else standard error code */IMPORT_C TInt ClearSetSync( TUint16 aRegister, TUint8 aClearMask, TUint8 aSetMask );/** Disable protection of voltage control registers * Call RestoreProtect() to re-enable protection * * Note - calls to DisableProtect and RestoreProtect() are * reference-counted, so you must call RestoreProtect() the same * number of times you called DisableProtect(). This is to allow * multiple clients to disable and restore protection so that * protection will only be re-enabled when the last client has * restored it. */IMPORT_C TInt DisableProtect();/** Restore protection after a DisableProtect(). * If other clients have called DisableProtect(), or this client * has other DisableProtect() calls still not balanced by a * RestoreProtect() then the protection will remain disabled */IMPORT_C TInt RestoreProtect();/** Read the current RTC time */IMPORT_C TInt GetRtcData( TRtcTime& aTime );/** Set the RTC time */IMPORT_C TInt SetRtcData( const TRtcTime& aTime );enum TPanic { EBadAction, ///< illegal value in TReq::iAction ENoDfc, ///< iCompletionDFC is NULL EBadGroup ///< Group component of iRegister is invalid };enum TInterruptId { KTPS65950IrqFirst= (EIrqRangeBasePsu << KIrqRangeIndexShift), ETPS65950_IRQ_PWR_SC_DETECT = KTPS65950IrqFirst, ETPS65950_IRQ_PWR_MBCHG, ETPS65950_IRQ_PWR_PWROK_TIMEOUT, ETPS65950_IRQ_PWR_HOT_DIE, ETPS65950_IRQ_PWR_RTC_IT, ETPS65950_IRQ_PWR_USB_PRES, ETPS65950_IRQ_PWR_CHG_PRES, ETPS65950_IRQ_PWR_CHG_PWRONS, ETPS65950_IRQ_MADC_USB_ISR1, ETPS65950_IRQ_MADC_SW2_ISR1, ETPS65950_IRQ_MADC_SW1_ISR1, ETPS65950_IRQ_MADC_RT_ISR1, ETPS65950_IRQ_GPIO_0ISR1, ETPS65950_IRQ_GPIO_1ISR1, ETPS65950_IRQ_GPIO_2ISR1, ETPS65950_IRQ_GPIO_3ISR1, ETPS65950_IRQ_GPIO_4ISR1, ETPS65950_IRQ_GPIO_5ISR1, ETPS65950_IRQ_GPIO_6ISR1, ETPS65950_IRQ_GPIO_7ISR2, ETPS65950_IRQ_GPIO_8ISR2, ETPS65950_IRQ_GPIO_9ISR2, ETPS65950_IRQ_GPIO_10ISR2, ETPS65950_IRQ_GPIO_11ISR2, ETPS65950_IRQ_GPIO_12ISR2, ETPS65950_IRQ_GPIO_13ISR2, ETPS65950_IRQ_GPIO_14ISR2, ETPS65950_IRQ_GPIO_15ISR2, ETPS65950_IRQ_GPIO16ISR3, ETPS65950_IRQ_GPIO17ISR3, ETPS65950_IRQ_BCI_BATSTS_ISR1, ETPS65950_IRQ_BCI_TBATOR1_ISR1, ETPS65950_IRQ_BCI_TBATOR2_ISR1, ETPS65950_IRQ_BCI_ICHGEOC_ISR1, ETPS65950_IRQ_BCI_ICHGLOW_ISR1ASTO, ETPS65950_IRQ_BCI_IICHGHIGH_ISR1, ETPS65950_IRQ_BCI_TMOVF_ISR1, ETPS65950_IRQ_BCI_WOVF_ISR1, ETPS65950_IRQ_BCI_ACCHGOV_ISR1, ETPS65950_IRQ_BCI_VBUSOV_ISR1, ETPS65950_IRQ_BCI_VBATOV_ISR1, ETPS65950_IRQ_BCI_VBATLVL_ISR1, ETPS65950_IRQ_KEYP_ITMISR1, ETPS65950_IRQ_KEYP_ITTOISR1, ETPS65950_IRQ_KEYP_ITLKISR1, ETPS65950_IRQ_KEYP_ITKPISR1, ETPS65950_IRQ_USB_INTSTS_IDGND, ETPS65950_IRQ_USB_INTSTS_SESSEND, ETPS65950_IRQ_USB_INTSTS_SESSVALID, ETPS65950_IRQ_USB_INTSTS_VBUSVALID, ETPS65950_IRQ_USB_INTSTS_HOSTDISCONNECT, ETPS65950_IRQ_USB_CARKIT_CARDP, ETPS65950_IRQ_USB_CARKIT_CARINTDET, ETPS65950_IRQ_USB_CARKIT_IDFLOAT, ETPS65950_IRQ_USB_OTHER_INT_VB_SESS_VLD, ETPS65950_IRQ_USB_OTHER_INT_DM_HI, ETPS65950_IRQ_USB_OTHER_INT_DP_HI, ETPS65950_IRQ_USB_OTHER_INT_MANU, ETPS65950_IRQ_USB_OTHER_INT_ABNORMAL_STRESS, ETPS65950_IRQ_USB_ID_INT_ID_RES_FLOAT, ETPS65950_IRQ_USB_ID_INT_ID_RES_440K, ETPS65950_IRQ_USB_ID_INT_ID_RES_200K, ETPS65950_IRQ_USB_ID_INT_ID_RES_102K, ETPS65950_IRQ_USB_CARKIT_SM_1_PSM_ERROR, ETPS65950_IRQ_USB_CARKIT_SM_1_PH_ACC, ETPS65950_IRQ_USB_CARKIT_SM_1_CHARGER, ETPS65950_IRQ_USB_CARKIT_SM_1_USB_HOST, ETPS65950_IRQ_USB_CARKIT_SM_1_USB_OTG_B, ETPS65950_IRQ_USB_CARKIT_SM_1_CARKIT, ETPS65950_IRQ_USB_CARKIT_SM_1_DISCONNECTED, ETPS65950_IRQ_USB_CARKIT_SM_2_STOP_PLS_MISS, ETPS65950_IRQ_USB_CARKIT_SM_2_STEREO_TO_MONO, ETPS65950_IRQ_USB_CARKIT_SM_2_PHONE_UART, ETPS65950_IRQ_USB_CARKIT_SM_2_PH_NO_ACK, KTPS65950IrqLast, };const TInt KNumTPSInts = (KTPS65950IrqLast - KTPS65950IrqFirst);} // namespace TPS65950#endif //tps65950