diff -r 29b14275133a -r e5fd00cbb70a omap3530/omap3530_drivers/spi/master.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omap3530/omap3530_drivers/spi/master.h Tue Sep 21 02:30:11 2010 +0100 @@ -0,0 +1,93 @@ +// Copyright (c) 2010 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: +// lukasz.forynski@gmail.com +// +// Description: +// omap3530/omap3530_drivers/spi/master.h +// + + +#ifndef __OMAP3530_SPI_MASTER_H__ +#define __OMAP3530_SPI_MASTER_H__ + +#include + +_LIT(KIicPslThreadName,"SpiChannelThread_"); +const TInt KIicPslDfcPriority = 0; +const TInt KIicPslThreadPriority = 24; + +// class declaration for SPI master +class DSpiMasterBeagle : public DIicBusChannelMaster + { +public: + static DSpiMasterBeagle* New(TInt aChannelNumber, const TBusType aBusType, const TChannelDuplex aChanDuplex); + virtual TInt DoRequest(TIicBusTransaction* aTransaction); // Gateway function for PSL implementation + +private: + DSpiMasterBeagle(TInt aChannelNumber, const TBusType aBusType, const TChannelDuplex aChanDuplex); + + // Override base-class pure virtual methods + virtual TInt DoCreate(); + virtual TInt CheckHdr(TDes8* aHdr); + virtual TInt HandleSlaveTimeout(); + + // Internal methods + TInt ConfigureInterface(); + TBool TransConfigDiffersFromPrev(); + TInt ProcessNextTransfers(); + TInt StartTransfer(TIicBusTransfer* aTransferPtr, TUint8 aType); + TInt DoTransfer(TUint8 aType); + static void Isr(TAny* aPtr); + static void TransferEndDfc(TAny* aPtr); + void ExitComplete(TInt aErr, TBool aComplete = ETrue); + +#ifdef _DEBUG + void DumpCurrentStatus(const TInt8* aWhere = NULL); +#endif + +private: + TDfc iTransferEndDfc; + TIicOperationType iOperation; + TUint8 iWordSize; + + TInt8 iTxFifoThreshold; + enum TMyState + { + EIdle, + EBusy + }; + TMyState iState; + + TInt iIrqId; + TLinAddr iHwBase; + + // Pointers used to store current transfers information + TIicBusTransfer* iHalfDTransfer; + TIicBusTransfer* iFullDTransfer; + + // Pointer to the current transaction. + TIicBusTransaction* iCurrTransaction; + + // Pointers to buffers used for Rx and Tx transfers + TInt8 *iTxData; + TInt8 *iRxData; + TInt8 *iTxDataEnd; + TInt8 *iRxDataEnd; + + // global status of the transaction + volatile TInt iTransactionStatus; + + TConfigSpiV01 iCurrHeader; + TInt iCurrSS; + }; + +#endif //__OMAP3530_SPI_MASTER_H__