ARM: tegra12: loki: Fix regulator warnings
[linux-3.10.git] / drivers / misc / inv_mpu / mlsl.h
1 /*
2         $License:
3         Copyright (C) 2011 InvenSense Corporation, All Rights Reserved.
4
5         This program is free software; you can redistribute it and/or modify
6         it under the terms of the GNU General Public License as published by
7         the Free Software Foundation; either version 2 of the License, or
8         (at your option) any later version.
9
10         This program is distributed in the hope that it will be useful,
11         but WITHOUT ANY WARRANTY; without even the implied warranty of
12         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13         GNU General Public License for more details.
14
15         You should have received a copy of the GNU General Public License
16         along with this program.  If not, see <http://www.gnu.org/licenses/>.
17         $
18  */
19
20 #ifndef __MLSL_H__
21 #define __MLSL_H__
22
23 /**
24  *  @defgroup   MLSL
25  *  @brief      Motion Library - Serial Layer.
26  *              The Motion Library System Layer provides the Motion Library
27  *              with the communication interface to the hardware.
28  *
29  *              The communication interface is assumed to support serial
30  *              transfers in burst of variable length up to
31  *              SERIAL_MAX_TRANSFER_SIZE.
32  *              The default value for SERIAL_MAX_TRANSFER_SIZE is 128 bytes.
33  *              Transfers of length greater than SERIAL_MAX_TRANSFER_SIZE, will
34  *              be subdivided in smaller transfers of length <=
35  *              SERIAL_MAX_TRANSFER_SIZE.
36  *              The SERIAL_MAX_TRANSFER_SIZE definition can be modified to
37  *              overcome any host processor transfer size limitation down to
38  *              1 B, the minimum.
39  *              An higher value for SERIAL_MAX_TRANSFER_SIZE will favor
40  *              performance and efficiency while requiring higher resource usage
41  *              (mostly buffering). A smaller value will increase overhead and
42  *              decrease efficiency but allows to operate with more resource
43  *              constrained processor and master serial controllers.
44  *              The SERIAL_MAX_TRANSFER_SIZE definition can be found in the
45  *              mlsl.h header file and master serial controllers.
46  *              The SERIAL_MAX_TRANSFER_SIZE definition can be found in the
47  *              mlsl.h header file.
48  *
49  *  @{
50  *      @file   mlsl.h
51  *      @brief  The Motion Library System Layer.
52  *
53  */
54
55 #include "mltypes.h"
56 #include <linux/mpu.h>
57
58
59 /*
60  * NOTE : to properly support Yamaha compass reads,
61  *        the max transfer size should be at least 9 B.
62  *        Length in bytes, typically a power of 2 >= 2
63  */
64 #define SERIAL_MAX_TRANSFER_SIZE 128
65
66
67 /**
68  *  inv_serial_single_write() - used to write a single byte of data.
69  *  @sl_handle          pointer to the serial device used for the communication.
70  *  @slave_addr         I2C slave address of device.
71  *  @register_addr      Register address to write.
72  *  @data               Single byte of data to write.
73  *
74  *      It is called by the MPL to write a single byte of data to the MPU.
75  *
76  *  returns INV_SUCCESS if successful, a non-zero error code otherwise.
77  */
78 int inv_serial_single_write(
79         void *sl_handle,
80         unsigned char slave_addr,
81         unsigned char register_addr,
82         unsigned char data);
83
84 /**
85  *  inv_serial_write() - used to write multiple bytes of data to registers.
86  *  @sl_handle  a file handle to the serial device used for the communication.
87  *  @slave_addr I2C slave address of device.
88  *  @register_addr      Register address to write.
89  *  @length     Length of burst of data.
90  *  @data       Pointer to block of data.
91  *
92  *  returns INV_SUCCESS if successful, a non-zero error code otherwise.
93  */
94 int inv_serial_write(
95         void *sl_handle,
96         unsigned char slave_addr,
97         unsigned short length,
98         unsigned char const *data);
99
100 /**
101  *  inv_serial_read() - used to read multiple bytes of data from registers.
102  *  @sl_handle  a file handle to the serial device used for the communication.
103  *  @slave_addr I2C slave address of device.
104  *  @register_addr      Register address to read.
105  *  @length     Length of burst of data.
106  *  @data       Pointer to block of data.
107  *
108  *  returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
109  */
110 int inv_serial_read(
111         void *sl_handle,
112         unsigned char slave_addr,
113         unsigned char register_addr,
114         unsigned short length,
115         unsigned char *data);
116
117 /**
118  *  inv_serial_read_mem() - used to read multiple bytes of data from the memory.
119  *          This should be sent by I2C or SPI.
120  *
121  *  @sl_handle  a file handle to the serial device used for the communication.
122  *  @slave_addr I2C slave address of device.
123  *  @mem_addr   The location in the memory to read from.
124  *  @length     Length of burst data.
125  *  @data       Pointer to block of data.
126  *
127  *  returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
128  */
129 int inv_serial_read_mem(
130         void *sl_handle,
131         unsigned char slave_addr,
132         unsigned short mem_addr,
133         unsigned short length,
134         unsigned char *data);
135
136 /**
137  *  inv_serial_write_mem() - used to write multiple bytes of data to the memory.
138  *  @sl_handle  a file handle to the serial device used for the communication.
139  *  @slave_addr I2C slave address of device.
140  *  @mem_addr   The location in the memory to write to.
141  *  @length     Length of burst data.
142  *  @data       Pointer to block of data.
143  *
144  *  returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
145  */
146 int inv_serial_write_mem(
147         void *sl_handle,
148         unsigned char slave_addr,
149         unsigned short mem_addr,
150         unsigned short length,
151         unsigned char const *data);
152
153 /**
154  *  inv_serial_read_fifo() - used to read multiple bytes of data from the fifo.
155  *  @sl_handle  a file handle to the serial device used for the communication.
156  *  @slave_addr I2C slave address of device.
157  *  @length     Length of burst of data.
158  *  @data       Pointer to block of data.
159  *
160  *  returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
161  */
162 int inv_serial_read_fifo(
163         void *sl_handle,
164         unsigned char slave_addr,
165         unsigned short length,
166         unsigned char *data);
167
168 /**
169  *  inv_serial_write_fifo() - used to write multiple bytes of data to the fifo.
170  *  @sl_handle  a file handle to the serial device used for the communication.
171  *  @slave_addr I2C slave address of device.
172  *  @length     Length of burst of data.
173  *  @data       Pointer to block of data.
174  *
175  *  returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
176  */
177 int inv_serial_write_fifo(
178         void *sl_handle,
179         unsigned char slave_addr,
180         unsigned short length,
181         unsigned char const *data);
182
183 /**
184  * @}
185  */
186 #endif                          /* __MLSL_H__ */