input: lsm330: Add LSM330 gyroscope/accelerometer driver

* HTC kernel version: t6ul-3.4.10-g0534bc3

Change-Id: I48f84208bdcd2f44eedd87da05b4d07ad33a9ff9
diff --git a/include/linux/lsm330.h b/include/linux/lsm330.h
new file mode 100755
index 0000000..f9b7b69
--- /dev/null
+++ b/include/linux/lsm330.h
@@ -0,0 +1,139 @@
+/*
+********************* (C) COPYRIGHT 2012 STMicroelectronics ********************
+*
+* File Name		: lsm330.h
+* Authors		: MH - C&I BU - Application Team
+*			: Matteo Dameno (matteo.dameno@st.com)
+*			: Denis Ciocca (denis.ciocca@st.com)
+* Version		: V.1.2.3
+* Date		: 2013/May/16
+*
+********************************************************************************
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License version 2 as
+* published by the Free Software Foundation.
+*
+* THE PRESENT SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES
+* OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, FOR THE SOLE
+* PURPOSE TO SUPPORT YOUR APPLICATION DEVELOPMENT.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*
+********************************************************************************
+
+********************************************************************************
+Version History.
+	V 1.0.0		First Release
+	V 1.0.2		I2C address bugfix
+	V 1.2.0		Registers names compliant to correct datasheet
+	V.1.2.1		Removed enable_interrupt_output sysfs file, manage int1
+				and int2, implements int1 isr.
+	V.1.2.2		Added HR_Timer and custom sysfs path
+	V.1.2.3 		Added rotation matrices
+********************************************************************************
+SYSFS interface
+- range: set full scale
+	-> accelerometer: 	2,4,6,8,16 				[g]
+	-> gyroscope:		250,500,2000				[dps]
+- poll_period_ms: set 1/ODR
+	-> accelerometer:	LSM330_ACC_MIN_POLL_PERIOD_MS < t	[ms]
+	-> gyroscope:		LSM330_GYR_MIN_POLL_PERIOD_MS < t	[ms]
+- enable_device: enable/disable sensor					[1/0]
+
+
+INPUT subsystem: NOTE-> output data INCLUDE the sensitivity in accelerometer,
+			but NOT INCLUDE the sensitivity in gyroscope.
+- accelerometer:	abs_x, abs_y, abs_z		[ug]
+- gyroscope:		abs_x, abs_y, abs_z		[raw data]
+*******************************************************************************/
+
+#ifndef __LSM330_H__
+#define __LSM330_H__
+
+
+#define LSM330_ACC_DEV_NAME		"lsm330_acc"
+#define LSM330_GYR_DEV_NAME		"lsm330_gyr"
+
+#define CUSTOM_SYSFS_PATH
+#define CUSTOM_SYSFS_CLASS_NAME_GYR	"ST_gyr"
+#define CUSTOM_SYSFS_CLASS_NAME_ACC	"ST_acc"
+
+#define LSM330_GYR_SAD0L		(0x00)
+#define LSM330_ACC_SAD0L		(0x02)
+#define LSM330_SAD0H			(0x01)
+#define LSM330_ACC_I2C_SADROOT		(0x07)
+#define LSM330_ACC_I2C_SAD_L		((LSM330_ACC_I2C_SADROOT<<2) | \
+							LSM330_ACC_SAD0L)
+#define LSM330_ACC_I2C_SAD_H		((LSM330_ACC_I2C_SADROOT<<2) | \
+							LSM330_SAD0H)
+
+#define LSM330_GYR_I2C_SADROOT		(0x35)
+#define LSM330_GYR_I2C_SAD_L		((LSM330_GYR_I2C_SADROOT<<1)| \
+							LSM330_GYR_SAD0L)
+#define LSM330_GYR_I2C_SAD_H		((LSM330_GYR_I2C_SADROOT<<1)| \
+							LSM330_SAD0H)
+
+#define LSM330_ACC_MIN_POLL_PERIOD_MS		1
+
+#define LSM330_GYR_MIN_POLL_PERIOD_MS		2
+
+
+#ifdef __KERNEL__
+
+#define LSM330_ACC_DEFAULT_INT1_GPIO		(-EINVAL)
+#define LSM330_ACC_DEFAULT_INT2_GPIO		(-EINVAL)
+
+#define LSM330_GYR_DEFAULT_INT1_GPIO		(-EINVAL)
+#define LSM330_GYR_DEFAULT_INT2_GPIO		(-EINVAL)
+
+
+#define LSM330_ACC_G_2G				(0x00)
+#define LSM330_ACC_G_4G				(0x08)
+#define LSM330_ACC_G_6G				(0x10)
+#define LSM330_ACC_G_8G				(0x18)
+#define LSM330_ACC_G_16G			(0x20)
+
+#define LSM330_GYR_FS_250DPS			(0x00)
+#define LSM330_GYR_FS_500DPS			(0x10)
+#define LSM330_GYR_FS_2000DPS			(0x30)
+
+extern unsigned int gs_kvalue;
+extern unsigned char gyro_gsensor_kvalue[37];
+
+struct lsm330_acc_platform_data {
+	unsigned int poll_interval;
+	unsigned int min_interval;
+	u8 fs_range;
+	short rot_matrix_index;
+	int (*init)(void);
+	void (*exit)(void);
+	int (*power_on)(void);
+	int (*power_off)(void);
+	int chip_layout;
+	int gs_kvalue;
+	int gpio_int1;
+	int gpio_int2;
+};
+
+struct lsm330_gyr_platform_data {
+	int (*init)(void);
+	void (*exit)(void);
+	int (*power_on)(void);
+	int (*power_off)(void);
+	unsigned int poll_interval;
+	unsigned int min_interval;
+	u8 fs_range;
+	short rot_matrix_index;
+	
+	u8 watermark;
+	u8 fifomode;
+	
+	int gpio_int1;
+	int gpio_int2;		
+};
+#endif	
+
+#endif