blob: 392dbbfe982163e305b9799a99c36cd227ce0c6c [file] [log] [blame]
#ifndef __AP3212C_PLS_H__
#define __AP3212C_PLS_H__
#define AP3212C_PLS_DEVICE "ap321xc"
#define AP3212C_PLS_INPUT_DEV "proximity"
#define AP3212C_PLS_ADDRESS 0x39
#define AP3212C_PLS_RETRY_COUNT 3
#include <linux/types.h>
#include <linux/ioctl.h>
#define LTR_IOCTL_MAGIC 0x1C
#define LTR_IOCTL_GET_PFLAG _IOR(LTR_IOCTL_MAGIC, 1, int)
#define LTR_IOCTL_GET_LFLAG _IOR(LTR_IOCTL_MAGIC, 2, int)
#define LTR_IOCTL_SET_PFLAG _IOW(LTR_IOCTL_MAGIC, 3, int)
#define LTR_IOCTL_SET_LFLAG _IOW(LTR_IOCTL_MAGIC, 4, int)
#define LTR_IOCTL_PROX_CALI _IOR(LTR_IOCTL_MAGIC, 5, int)
#define LTR_IOCTL_GET_DATA _IOW(LTR_IOCTL_MAGIC, 6, unsigned char)
#define AP3212C_RAN_COMMAND 0x10
#define AP3212C_RAN_MASK 0x30
#define AP3212C_RAN_SHIFT (4)
/*ALS interrupt filter*/
#define AP3212C_AIF_COMMAND 0x10
#define AP3212C_AIF_MASK 0x0F
#define AP3212C_AIF_SHIFT (0)
/*PS interrupt filter*/
#define AP3212C_PIF_COMMAND 0x20
#define AP3212C_PIF_MASK 0x03
#define AP3212C_PIF_SHIFT (0)
#define AP3212C_MODE_COMMAND 0x00
#define AP3212C_MODE_SHIFT (0)
#define AP3212C_MODE_MASK 0x07
#define AP3212C_MODE_ALS_MASK 0x01
#define AP3212C_MODE_PRX_MASK 0x02
#define AP3212C_ADC_LSB 0x0c
#define AP3212C_ADC_MSB 0x0d
#define AP3212C_PX_LSB 0x0e
#define AP3212C_PX_MSB 0x0f
#define AP3212C_PX_LSB_MASK 0x0f
#define AP3212C_PX_MSB_MASK 0x3f
#define AP3212C_OBJ_COMMAND 0x0f
#define AP3212C_OBJ_MASK 0x80
#define AP3212C_OBJ_SHIFT (7)
#define AP3212C_INT_COMMAND 0x01
#define AP3212C_INT_SHIFT (0)
#define AP3212C_INT_MASK 0x03
#define AP3212C_INT_PMASK 0x02
#define AP3212C_INT_AMASK 0x01
#define AP3212C_ALS_LTHL 0x1a
#define AP3212C_ALS_LTHL_SHIFT (0)
#define AP3212C_ALS_LTHL_MASK 0xff
#define AP3212C_ALS_LTHH 0x1b
#define AP3212C_ALS_LTHH_SHIFT (0)
#define AP3212C_ALS_LTHH_MASK 0xff
#define AP3212C_ALS_HTHL 0x1c
#define AP3212C_ALS_HTHL_SHIFT (0)
#define AP3212C_ALS_HTHL_MASK 0xff
#define AP3212C_ALS_HTHH 0x1d
#define AP3212C_ALS_HTHH_SHIFT (0)
#define AP3212C_ALS_HTHH_MASK 0xff
#define AP3212C_PX_LTHL 0x2a
#define AP3212C_PX_LTHL_SHIFT (0)
#define AP3212C_PX_LTHL_MASK 0x03
#define AP3212C_PX_LTHH 0x2b
#define AP3212C_PX_LTHH_SHIFT (0)
#define AP3212C_PX_LTHH_MASK 0xff
#define AP3212C_PX_HTHL 0x2c
#define AP3212C_PX_HTHL_SHIFT (0)
#define AP3212C_PX_HTHL_MASK 0x03
#define AP3212C_PX_HTHH 0x2d
#define AP3212C_PX_HTHH_SHIFT (0)
#define AP3212C_PX_HTHH_MASK 0xff
#define AP3212C_PX_CONFIGURE 0x20
#define AP3212C_PX_LED 0x21
#define LSC_DBG
#ifdef LSC_DBG
#define LDBG(s, args...) { printk(KERN_INFO"LDBG: func[%s],line [%d], ",\
__func__, __LINE__); printk(s, ## args); }
#else
#define LDBG(s, args...) {}
#endif
#define AP3212C_PLS_BOTH_ACTIVE 0x03
#define AP3212C_PLS_ALPS_ACTIVE 0x01
#define AP3212C_PLS_PXY_ACTIVE 0x02
#define AP3212C_PLS_BOTH_DEACTIVE 0x00
#define AP3212B_NUM_CACHABLE_REGS 23
#define AP3216C_NUM_CACHABLE_REGS 26
/*system regitser table*/
#define AP321XC_SYS_CFG_REG 0x00
#define AP321XC_INT_STS_REG 0x01
#define AP321XC_INT_CLR_REG 0x02
#define AP321XC_IR_DL_REG 0x0A
#define AP321XC_IR_DH_REG 0x0B
#define AP321XC_ALS_DL_REG 0x0C
#define AP321XC_ALS_DH_REG 0x0D
#define AP321XC_PS_DL_REG 0x0E
#define AP321XC_PS_DH_REG 0x0F
/*ALS register table*/
#define AP321XC_ALS_CFG_REG 0x10
#define AP321XC_ALS_CAL_REG 0x19
#define AP321XC_ALS_LTL_REG 0x1A
#define AP321XC_ALS_LTH_REG 0x1B
#define AP321XC_ALS_HTL_REG 0x1C
#define AP321XC_ALS_HTH_REG 0x1D
/*PS register table*/
#define AP321XC_PS_CFG_REG 0x20
#define AP321XC_PS_LED_REG 0x21
#define AP321XC_PS_INT_REG 0x22
#define AP321XC_PS_MT_REG 0x23
#define AP321XC_PS_LEDWT_REG 0x24
#define AP321XC_PS_CALL_REG 0x28
#define AP321XC_PS_CALH_REG 0x29
#define AP321XC_PS_LTL_REG 0x2A
#define AP321XC_PS_LTH_REG 0x2B
#define AP321XC_PS_HTL_REG 0x2C
#define AP321XC_PS_HTH_REG 0x2D
enum SENSOR_TYPE {
AP3212C_PLS_ALPS = 0,
AP3212C_PLS_PXY,
AP3212C_PLS_BOTH,
};
struct ap3212c_pls_t {
struct input_dev *input;
struct i2c_client *client;
struct work_struct work;
struct workqueue_struct *ltr_work_queue;
struct early_suspend ltr_early_suspend;
struct mutex proximity_calibrating;
u16 prox_threshold_hi;
u16 prox_threshold_lo;
u16 prox_threshold_hi_def;
u16 prox_threshold_lo_def;
u8 prox_pulse_cnt;
u8 prox_gain;
u8 prox_offset;
u8 prox_boot_cali;
};
#define ADD_TO_IDX(addr, idx) { \
int i; \
for (i = 0; i < reg_num; i++) { \
if (addr == reg_array[i]) { \
idx = i; \
break; \
} \
} \
}
#endif