2006-12-12 18:18:30 +01:00
# include <linux/i2c.h>
2007-09-26 00:01:41 -04:00
# include <linux/input-polldev.h>
2006-12-12 18:18:30 +01:00
# include <linux/kthread.h>
# include <linux/mutex.h>
# include <linux/spinlock.h>
# include <linux/types.h>
2008-08-11 17:04:32 +10:00
# include <linux/of_device.h>
2006-12-12 18:18:30 +01:00
enum ams_irq {
AMS_IRQ_FREEFALL = 0x01 ,
AMS_IRQ_SHOCK = 0x02 ,
AMS_IRQ_GLOBAL = 0x04 ,
AMS_IRQ_ALL =
AMS_IRQ_FREEFALL |
AMS_IRQ_SHOCK |
AMS_IRQ_GLOBAL ,
} ;
struct ams {
/* Locks */
spinlock_t irq_lock ;
struct mutex lock ;
/* General properties */
struct device_node * of_node ;
struct of_device * of_dev ;
char has_device ;
char vflag ;
u32 orient1 ;
u32 orient2 ;
/* Interrupt worker */
struct work_struct worker ;
u8 worker_irqs ;
/* Implementation
*
* Only call these functions with the main lock held .
*/
void ( * exit ) ( void ) ;
void ( * get_xyz ) ( s8 * x , s8 * y , s8 * z ) ;
u8 ( * get_vendor ) ( void ) ;
void ( * clear_irq ) ( enum ams_irq reg ) ;
# ifdef CONFIG_SENSORS_AMS_I2C
/* I2C properties */
2008-10-17 17:51:12 +02:00
struct i2c_client * i2c_client ;
2006-12-12 18:18:30 +01:00
# endif
/* Joystick emulation */
2007-09-26 00:01:41 -04:00
struct input_polled_dev * idev ;
2006-12-12 18:18:30 +01:00
__u16 bustype ;
/* calibrated null values */
int xcalib , ycalib , zcalib ;
} ;
extern struct ams ams_info ;
extern void ams_sensors ( s8 * x , s8 * y , s8 * z ) ;
extern int ams_sensor_attach ( void ) ;
extern int ams_pmu_init ( struct device_node * np ) ;
extern int ams_i2c_init ( struct device_node * np ) ;
extern int ams_input_init ( void ) ;
extern void ams_input_exit ( void ) ;