Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1049)

Unified Diff: arch/arm/mach-tegra/nv/include/nvrm_i2c.h

Issue 3256004: [ARM] tegra: add nvos/nvrm/nvmap drivers (Closed) Base URL: ssh://git@gitrw.chromium.org/kernel.git
Patch Set: remove ap15 headers Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « arch/arm/mach-tegra/nv/include/nvrm_hardware_access.h ('k') | arch/arm/mach-tegra/nv/include/nvrm_init.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « arch/arm/mach-tegra/nv/include/nvrm_hardware_access.h ('k') | arch/arm/mach-tegra/nv/include/nvrm_init.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698