Index: arch/arm/mach-tegra/nv/include/nvodm_touch.h |
diff --git a/arch/arm/mach-tegra/nv/include/nvodm_touch.h b/arch/arm/mach-tegra/nv/include/nvodm_touch.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8691302953d3330b620b31bbf8a0e4bf1da6b404 |
--- /dev/null |
+++ b/arch/arm/mach-tegra/nv/include/nvodm_touch.h |
@@ -0,0 +1,405 @@ |
+/* |
+ * Copyright (c) 2006-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. |
+ * |
+ */ |
+ |
+/** |
+ * @file |
+ * <b>NVIDIA Tegra ODM Kit: |
+ * Touch Pad Sensor Interface</b> |
+ * |
+ * @b Description: Defines the ODM adaptation interface for touch pad sensor devices. |
+ * |
+ */ |
+ |
+#ifndef INCLUDED_NVODM_TOUCH_H |
+#define INCLUDED_NVODM_TOUCH_H |
+ |
+#if defined(__cplusplus) |
+extern "C" |
+{ |
+#endif |
+ |
+#include "nvodm_services.h" |
+ |
+/** |
+ * @defgroup nvodm_touch Touch Pad Adaptation Interface |
+ * |
+ * This is the touch pad ODM adaptation interface. |
+ * |
+ * @ingroup nvodm_adaptation |
+ * @{ |
+ */ |
+ |
+ |
+/** |
+ * Defines an opaque handle that exists for each touch device in the |
+ * system, each of which is defined by the customer implementation. |
+ */ |
+typedef struct NvOdmTouchDeviceRec *NvOdmTouchDeviceHandle; |
+ |
+#define NVODM_MAX_INPUT_COORDS 5 |
+ |
+/** |
+ * @brief Defines the gesture type. |
+ */ |
+typedef enum |
+{ |
+ /// Indicates the gesture is not supported. |
+ NvOdmTouchGesture_Not_Supported = 0x0000, |
+ |
+ /// Indicates that there was no gesture recognized. |
+ NvOdmTouchGesture_No_Gesture = 0x0001, |
+ |
+ /// Indicates the "tap" gesture: one rapid finger press and release. |
+ NvOdmTouchGesture_Tap = 0x0002, |
+ |
+ /// Indicates the "double tap" gesture: two taps in rapid succession. |
+ NvOdmTouchGesture_Double_Tap = 0x0004, |
+ |
+ /// Indicates the "tap and hold" gesture: a tap event rapidly followed by press-and-hold. |
+ NvOdmTouchGesture_Tap_and_Hold = 0x0008, |
+ |
+ /// Indicates the "press" gesture: a finger that presses down and stays on the panel. |
+ NvOdmTouchGesture_Press = 0x0010, |
+ |
+ /** |
+ * Indicates the "press and drag" gesture: a finger that presses down, stays |
+ * on the panel and then moves |
+ */ |
+ NvOdmTouchGesture_Press_Drag = 0x0020, |
+ |
+ /** |
+ * Indicates the "zoom" gesture: a simultaneous two-fingered gesture, where |
+ * the two fingers are either moving towards each other, or moving away from |
+ * each other. |
+ */ |
+ NvOdmTouchGesture_Zoom = 0x0040, |
+ |
+ /** |
+ * Indicates the "Flick" gesture: a "tap and drag" gesture or a fast |
+ * "press and drag" where the finger stays on the panel only for a short time. |
+ */ |
+ NvOdmTouchGesture_Flick = 0x0080, |
+ |
+ NvOdmTouchGestureType_Force32 = 0x7fffffffUL |
+} NvOdmTouchGestureType; |
+ |
+ |
+/** |
+ * Defines the touch orientation based on the LCD screen. |
+ */ |
+typedef enum |
+{ |
+ /// Indicates the touch panel X/Y coords are swapped in relation to LCD screen. |
+ NvOdmTouchOrientation_XY_SWAP = 0x01, |
+ /// Indicates the touch panel X/Y coords are horizontally flipped (or mirrored) in relation to LCD screen. |
+ NvOdmTouchOrientation_H_FLIP = 0x02, |
+ /// Indicates the touch panel X/Y coords are vertically flipped in relation to LCD screen. |
+ NvOdmTouchOrientation_V_FLIP = 0x04, |
+ |
+ NvOdmTouchOrientation_Force32 = 0x7fffffffUL |
+} NvOdmTouchOrientationType; |
+/** |
+ * Defines the touch capabilities. |
+ */ |
+typedef struct |
+{ |
+ /// Holds a value indicating whether or not multi-touch is supported: 1 single touch : 0 multi-touch. |
+ NvBool IsMultiTouchSupported; |
+ |
+ /// Holds the maximum number of finger coordinates that can be reported. |
+ NvU32 MaxNumberOfFingerCoordReported; |
+ |
+ /// Holds a value indicating whether or not relative data for X/Y is supported: 1 not support : 0 supported. |
+ NvBool IsRelativeDataSupported; |
+ |
+ /// Holds the maximum value for relative coords that can be reported. |
+ NvU32 MaxNumberOfRelativeCoordReported; |
+ |
+ /// Holds the maximum width value that can be reported. |
+ NvU32 MaxNumberOfWidthReported; |
+ |
+ /// Holds the maximum pressure value that can be reported. |
+ NvU32 MaxNumberOfPressureReported; |
+ |
+ /// Holds a bitmask specifying the supported gestures |
+ NvU32 Gesture; |
+ |
+ /// Holds a value indicating whether or not finger width is supported. |
+ NvBool IsWidthSupported; |
+ |
+ /// Holds a value indicating whether finger signal strength or finger contact only is supported. |
+ NvBool IsPressureSupported; |
+ |
+ /// Holds a value indicating whether or not fingers on the panel are supported. |
+ NvBool IsFingersSupported; |
+ |
+ /// Holds the minimum X position. |
+ NvU32 XMinPosition; |
+ |
+ /// Holds the minimum Y position. |
+ NvU32 YMinPosition; |
+ |
+ /// Holds the maximum X position. |
+ NvU32 XMaxPosition; |
+ |
+ /// Holds the maximum Y position. |
+ NvU32 YMaxPosition; |
+ |
+ /// Holds the orientation based on the LCD screen. |
+ NvU32 Orientation; |
+ |
+} NvOdmTouchCapabilities; |
+ |
+ |
+/** |
+ * @brief Defines the possible touch states. |
+ */ |
+typedef enum |
+{ |
+ /// Indicates a valid reading. |
+ NvOdmTouchSampleValidFlag = 0x1, |
+ |
+ /// Indicates to ignore the sample. |
+ NvOdmTouchSampleIgnore = 0x2, |
+ |
+ /// Indicates the state of the finger. |
+ NvOdmTouchSampleDownFlag = 0x4, |
+ |
+ NvOdmTouchSampleFlags_Force32 = 0x7fffffffUL |
+} NvOdmTouchSampleFlags; |
+ |
+ |
+/** |
+ * Defines the ODM touch-specific functionality information. |
+ */ |
+typedef struct |
+{ |
+ /// Indicates x,y-coordinates for multiple input coordinates (fingers). |
+ NvU32 multi_XYCoords[NVODM_MAX_INPUT_COORDS][2]; |
+ /// Indicates approximate finger width on the touch panel. |
+ NvU8 width[NVODM_MAX_INPUT_COORDS]; |
+ /// Specifies a bitmask describing the gesture recognized. |
+ NvU32 Gesture; |
+ /// Indicates whether or not the gesture was valid. |
+ NvU8 Confirmed; |
+ /// Indicates the number of fingers on the touch panel. |
+ NvU8 Fingers; |
+ /// Indicates an approximate finger pressure. |
+ NvU8 Pressure[NVODM_MAX_INPUT_COORDS]; |
+ /// Indicates the relative coordinate information. |
+ NvS8 XYDelta[NVODM_MAX_INPUT_COORDS][2]; |
+ |
+} NvOdmTouchAdditionalInfo; |
+ |
+ |
+/** |
+ * Defines the ODM touch pad coordinate information. |
+ */ |
+typedef struct |
+{ |
+ /// Specifies the X-coordinate. |
+ NvU32 xcoord; |
+ /// Specifies the Y-coordinate. |
+ NvU32 ycoord; |
+ /// Specifies the sample state information. |
+ NvU32 fingerstate; |
+ /// Specifies additional functionality information. |
+ NvOdmTouchAdditionalInfo additionalInfo; |
+ /// Specifies a pointer to extended data, if needed. |
+ void* pextrainfo; |
+ /// Specifies the size of extended data. |
+ NvU32 extrainfosize; |
+ |
+} NvOdmTouchCoordinateInfo; |
+ |
+ |
+/** |
+ * @brief Defines the structure for the sampling rate. |
+ */ |
+typedef struct |
+{ |
+ /// Specifies a low amount of samples per second. |
+ NvU32 NvOdmTouchSampleRateLow; |
+ |
+ /// Specifies a high amount of samples per second. |
+ NvU32 NvOdmTouchSampleRateHigh; |
+ |
+ /// Specifies the current sample rate setting, zero is low, 1 is high. |
+ NvU32 NvOdmTouchCurrentSampleRate; |
+} NvOdmTouchSampleRate; |
+ |
+ |
+/** |
+ * @brief Defines the power mode for the touch panel. |
+ */ |
+typedef enum |
+{ |
+ /// Indicates full power. |
+ NvOdmTouch_PowerMode_0 = 0x1, |
+ NvOdmTouch_PowerMode_1, |
+ NvOdmTouch_PowerMode_2, |
+ /// Indicates power off. |
+ NvOdmTouch_PowerMode_3, |
+ NvOdmTouchPowerMode_Force32 = 0x7fffffffUL |
+} NvOdmTouchPowerModeType; |
+ |
+ |
+ |
+/** |
+ * Gets a handle to the touch pad in the system. |
+ * |
+ * @param hDevice A pointer to the handle of the touch pad. |
+ * @return NV_TRUE if successful, or NV_FALSE otherwise. |
+ */ |
+NvBool |
+NvOdmTouchDeviceOpen( NvOdmTouchDeviceHandle *hDevice ); |
+ |
+/** |
+ * Gets capabilities for the specified touch device. |
+ * |
+ * @param hDevice The handle of the touch pad. |
+ * @param pCapabilities A pointer to the targeted |
+ * capabilities returned by the ODM. |
+ */ |
+void |
+NvOdmTouchDeviceGetCapabilities(NvOdmTouchDeviceHandle hDevice, NvOdmTouchCapabilities* pCapabilities); |
+ |
+/** |
+ * Gets coordinate info from the touch device. |
+ * |
+ * @param hDevice The handle to the touch pad. |
+ * @param coord A pointer to the structure holding coordinate info. |
+ * @return NV_TRUE if successful, or NV_FALSE otherwise. |
+ */ |
+NvBool |
+NvOdmTouchReadCoordinate( NvOdmTouchDeviceHandle hDevice, NvOdmTouchCoordinateInfo *coord); |
+ |
+ |
+/** |
+ * Hooks up the interrupt handle to the GPIO interrupt and enables the interrupt. |
+ * |
+ * @param hDevice The handle to the touch pad. |
+ * @param hInterruptSemaphore A handle to hook up the interrupt. |
+ * @return NV_TRUE if successful, or NV_FALSE otherwise. |
+ */ |
+NvBool NvOdmTouchEnableInterrupt(NvOdmTouchDeviceHandle hDevice, NvOdmOsSemaphoreHandle hInterruptSemaphore); |
+ |
+/** |
+ * Prepares the next interrupt to get notified from the touch device. |
+ * |
+ * @param hDevice A handle to the touch pad. |
+ * @return NV_TRUE if successful, or NV_FALSE otherwise. |
+ */ |
+NvBool NvOdmTouchHandleInterrupt(NvOdmTouchDeviceHandle hDevice); |
+ |
+/** |
+ * Gets the touch ADC sample rate. |
+ * |
+ * @param hDevice A handle to the touch ADC. |
+ * @param pTouchSampleRate A pointer to the NvOdmTouchSampleRate stucture. |
+ * |
+ * @return NV_TRUE if successful, or NV_FALSE otherwise. |
+*/ |
+NvBool |
+NvOdmTouchGetSampleRate(NvOdmTouchDeviceHandle hDevice, NvOdmTouchSampleRate* pTouchSampleRate); |
+ |
+ |
+/** |
+ * Sets the touch ADC sample rate. |
+ * |
+ * @param hDevice A handle to the touch ADC. |
+ * @param SampleRate 1 indicates high frequency, 0 indicates low frequency. |
+ * |
+ * @return NV_TRUE if successful, or NV_FALSE otherwise. |
+*/ |
+NvBool |
+NvOdmTouchSetSampleRate(NvOdmTouchDeviceHandle hDevice, NvU32 SampleRate); |
+ |
+ |
+/** |
+ * Sets the touch panel power mode. |
+ * |
+ * @param hDevice A handle to the touch ADC. |
+ * @param mode The mode, ranging from full power to power off. |
+ * |
+ * @return NV_TRUE if successful, or NV_FALSE otherwise. |
+*/ |
+NvBool |
+NvOdmTouchPowerControl(NvOdmTouchDeviceHandle hDevice, NvOdmTouchPowerModeType mode); |
+ |
+/** |
+ * Powers the touch device on or off. |
+ * |
+ * @param hDevice A handle to the touch ADC. |
+ * @param OnOff Specify 1 to power on; 0 to power off. |
+*/ |
+void |
+NvOdmTouchPowerOnOff(NvOdmTouchDeviceHandle hDevice, NvBool OnOff); |
+ |
+/** |
+ * Releases the touch pad handle. |
+ * |
+ * @param hDevice The touch pad handle to be released. If |
+ * NULL, this API has no effect. |
+ */ |
+void NvOdmTouchDeviceClose(NvOdmTouchDeviceHandle hDevice); |
+ |
+/** |
+ * Gets the touch ODM debug configuration. |
+ * |
+ * @param hDevice A handle to the touch pad. |
+ * |
+ * @return NV_TRUE if debug message is enabled, or NV_FALSE if not. |
+ */ |
+NvBool |
+NvOdmTouchOutputDebugMessage(NvOdmTouchDeviceHandle hDevice); |
+ |
+/** |
+ * Gets the touch panel calibration data. |
+ * This is optional as calibration may perform after the OS is up. |
+ * This is not required to bring up the touch panel. |
+ * |
+ * @param hDevice A handle to the touch panel. |
+ * @param NumOfCalibrationData Indicates the number of calibration points. |
+ * @param pRawCoordBuffer The collection of X/Y coordinate data. |
+ * |
+ * @return NV_TRUE if preset calibration data is required, or NV_FALSE otherwise. |
+ */ |
+NvBool |
+NvOdmTouchGetCalibrationData(NvOdmTouchDeviceHandle hDevice, NvU32 NumOfCalibrationData, NvS32* pRawCoordBuffer); |
+#if defined(__cplusplus) |
+} |
+#endif |
+ |
+/** @} */ |
+ |
+#endif // INCLUDED_NVODM_TOUCH_H |