| Index: arch/arm/mach-tegra/nv/include/nvrm_i2c.h
|
| diff --git a/arch/arm/mach-tegra/nv/include/nvrm_i2c.h b/arch/arm/mach-tegra/nv/include/nvrm_i2c.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5cc245def79b19bcbb3c2574e040f91dffddd293
|
| --- /dev/null
|
| +++ b/arch/arm/mach-tegra/nv/include/nvrm_i2c.h
|
| @@ -0,0 +1,216 @@
|
| +/*
|
| + * Copyright (c) 2009 NVIDIA Corporation.
|
| + * All rights reserved.
|
| + *
|
| + * Redistribution and use in source and binary forms, with or without
|
| + * modification, are permitted provided that the following conditions are met:
|
| + *
|
| + * Redistributions of source code must retain the above copyright notice,
|
| + * this list of conditions and the following disclaimer.
|
| + *
|
| + * Redistributions in binary form must reproduce the above copyright notice,
|
| + * this list of conditions and the following disclaimer in the documentation
|
| + * and/or other materials provided with the distribution.
|
| + *
|
| + * Neither the name of the NVIDIA Corporation nor the names of its contributors
|
| + * may be used to endorse or promote products derived from this software
|
| + * without specific prior written permission.
|
| + *
|
| + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
| + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
| + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
| + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
| + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
| + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
| + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
| + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
| + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
| + * POSSIBILITY OF SUCH DAMAGE.
|
| + *
|
| + */
|
| +
|
| +#ifndef INCLUDED_nvrm_i2c_H
|
| +#define INCLUDED_nvrm_i2c_H
|
| +
|
| +
|
| +#if defined(__cplusplus)
|
| +extern "C"
|
| +{
|
| +#endif
|
| +
|
| +#include "nvrm_pinmux.h"
|
| +#include "nvrm_module.h"
|
| +#include "nvrm_init.h"
|
| +
|
| +#include "nvos.h"
|
| +#include "nvcommon.h"
|
| +
|
| +/**
|
| + * NvRmI2cHandle is an opaque handle to the NvRmI2cStructRec interface
|
| + */
|
| +
|
| +typedef struct NvRmI2cRec *NvRmI2cHandle;
|
| +
|
| +/**
|
| + * @brief Defines the I2C capability structure. It contains the
|
| + * capabilities/limitations (like maximum bytes transferred,
|
| + * supported clock speed) of the hardware.
|
| + */
|
| +
|
| +typedef struct NvRmI2cCapabilitiesRec
|
| +{
|
| +
|
| + /**
|
| + * Maximum number of packet length in bytes which can be transferred
|
| + * between start and the stop pulses.
|
| + */
|
| + NvU32 MaximumPacketLengthInBytes;
|
| +
|
| + /// Maximum speed which I2C controller can support.
|
| + NvU32 MaximumClockSpeed;
|
| +
|
| + /// Minimum speed which I2C controller can support.
|
| + NvU32 MinimumClockSpeed;
|
| +} NvRmI2cCapabilities;
|
| +
|
| +/**
|
| + * @brief Initializes and opens the i2c channel. This function allocates the
|
| + * handle for the i2c channel and provides it to the client.
|
| + *
|
| + * Assert encountered in debug mode if passed parameter is invalid.
|
| + *
|
| + * @param hDevice Handle to the Rm device which is required by Rm to acquire
|
| + * the resources from RM.
|
| + * @param IoModule The IO module to set, it is either NvOdmIoModule_I2c
|
| + * or NvOdmIoModule_I2c_Pmu
|
| + * @param instance Instance of the i2c driver to be opened.
|
| + * @param phI2c Points to the location where the I2C handle shall be stored.
|
| + *
|
| + * @retval NvSuccess Indicates that the I2c channel has successfully opened.
|
| + * @retval NvError_InsufficientMemory Indicates that function fails to allocate
|
| + * the memory.
|
| + * @retval NvError_NotInitialized Indicates the I2c initialization failed.
|
| + */
|
| +
|
| + NvError NvRmI2cOpen(
|
| + NvRmDeviceHandle hDevice,
|
| + NvU32 IoModule,
|
| + NvU32 instance,
|
| + NvRmI2cHandle * phI2c );
|
| +
|
| +/**
|
| + * @brief Closes the i2c channel. This function frees the memory allocated for
|
| + * the i2c handle for the i2c channel.
|
| + * This function de-initializes the i2c channel. This API never fails.
|
| + *
|
| + * @param hI2c A handle from NvRmI2cOpen(). If hI2c is NULL, this API does
|
| + * nothing.
|
| + */
|
| +
|
| + void NvRmI2cClose(
|
| + NvRmI2cHandle hI2c );
|
| +
|
| +// Maximum number of bytes that can be sent between the i2c start and stop conditions
|
| +#define NVRM_I2C_PACKETSIZE (8)
|
| +
|
| +// Maximum number of bytes that can be sent between the i2c start and repeat start condition.
|
| +#define NVRM_I2C_PACKETSIZE_WITH_NOSTOP (4)
|
| +
|
| +/// Indicates a I2C read transaction.
|
| +#define NVRM_I2C_READ (0x1)
|
| +
|
| +/// Indicates that it is a write transaction
|
| +#define NVRM_I2C_WRITE (0x2)
|
| +
|
| +/// Indicates that there is no STOP following this transaction. This also implies
|
| +/// that there is always one more transaction following a transaction with
|
| +/// NVRM_I2C_NOSTOP attribute.
|
| +#define NVRM_I2C_NOSTOP (0x4)
|
| +
|
| +// Some devices doesn't support ACK. By, setting this flag, master will not
|
| +// expect the generation of ACK from the device.
|
| +#define NVRM_I2C_NOACK (0x8)
|
| +
|
| +// Software I2C using GPIO. Doesn't use the hardware controllers. This path
|
| +// should be used only for testing.
|
| +#define NVRM_I2C_SOFTWARE_CONTROLLER (0x10)
|
| +
|
| +typedef struct NvRmI2cTransactionInfoRec
|
| +{
|
| +
|
| + /// Flags to indicate the transaction details, like write/read or read
|
| + /// without a stop or write without a stop.
|
| + NvU32 Flags;
|
| +
|
| + /// Number of bytes to be transferred.
|
| + NvU32 NumBytes;
|
| +
|
| + /// I2C slave device address
|
| + NvU32 Address;
|
| +
|
| + /// Indicates that the address is a 10-bit address.
|
| + NvBool Is10BitAddress;
|
| +} NvRmI2cTransactionInfo;
|
| +
|
| +/**
|
| + * @brief Does multiple I2C transactions. Each transaction can be a read or write.
|
| + *
|
| + * AP15 I2C controller has the following limitations:
|
| + * - Any read/write transaction is limited to NVRM_I2C_PACKETSIZE
|
| + * - All transactions will be terminated by STOP unless NVRM_I2C_NOSTOP flag
|
| + * is specified. Specifying NVRM_I2C_NOSTOP means, *next* transaction will start
|
| + * with a repeat start, with NO stop between transactions.
|
| + * - When NVRM_I2C_NOSTOP is specified for a transaction -
|
| + * 1. Next transaction will start with repeat start.
|
| + * 2. Next transaction is mandatory.
|
| + * 3. Next Next transaction cannot have NVRM_I2C_NOSTOP flag set. i.e no
|
| + * back to back repeat starts.
|
| + * 4. Current and next transactions are limited to size
|
| + * NVRM_I2C_PACKETSIZE_WITH_NOSTOP.
|
| + * 5. Finally, current transactions and next Transaction should be of same
|
| + * size.
|
| + *
|
| + * This imposes some limitations on how the hardware can be used. However, the
|
| + * API itself doesn't have any limitations. If the HW cannot be used, it falls
|
| + * back to GPIO based I2C. Gpio I2C bypasses Hw controller and bit bangs the
|
| + * SDA/SCL lines of I2C.
|
| + *
|
| + * @param hI2c Handle to the I2C channel.
|
| + * @param I2cPinMap for I2C controllers which are being multiplexed across
|
| + * multiple pin mux configurations, this specifies which pin mux configuration
|
| + * should be used for the transaction. Must be 0 when the ODM pin mux query
|
| + * specifies a non-multiplexed configuration for the controller.
|
| + * @param WaitTimeoutInMilliSeconds Timeout for the transcation.
|
| + * @param ClockSpeedKHz Clock speed in KHz.
|
| + * @param Data Continous stream of data
|
| + * @param DataLength Length of the data stream
|
| + * @param Transcations Pointer to the NvRmI2cTransactionInfo structure
|
| + * @param NumOfTransactions Number of transcations
|
| + *
|
| + *
|
| + * @retval NvSuccess Indicates the operation succeeded.
|
| + * @retval NvError_NotSupported Indicates assumption on parameter values violated.
|
| + * @retval NvError_InvalidState Indicates that the last read call is not
|
| + * completed.
|
| + * @retval NvError_ControllerBusy Indicates controller is presently busy with an
|
| + * i2c transaction.
|
| + * @retval NvError_InvalidDeviceAddress Indicates that the slave device address
|
| + * is invalid
|
| + */
|
| +
|
| + NvError NvRmI2cTransaction(
|
| + NvRmI2cHandle hI2c,
|
| + NvU32 I2cPinMap,
|
| + NvU32 WaitTimeoutInMilliSeconds,
|
| + NvU32 ClockSpeedKHz,
|
| + NvU8 * Data,
|
| + NvU32 DataLen,
|
| + NvRmI2cTransactionInfo * Transaction,
|
| + NvU32 NumOfTransactions );
|
| +
|
| +#if defined(__cplusplus)
|
| +}
|
| +#endif
|
| +
|
| +#endif
|
|
|