/* include/linux/cm3629.h
 *
 * Copyright (C) 2010 HTC, Inc.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 */

#ifndef __LINUX_CM3629_H
#define __LINUX_CM3629_H

#define CM3629_I2C_NAME "CM3629"


#define ALS_config_cmd		0x00
#define ALS_high_thd		0x01
#define ALS_low_thd		0x02

#define PS_config		0x03
#define PS_config_ms		0x04
#define PS_CANC			0x05
#define PS_1_thd		0x06
#define PS_2_thd		0x07
#define PS_data			0x08
#define ALS_data		0x09
#define INT_FLAG		0x0B
#define CH_ID			0x0C


#define ALS_CALIBRATED		0x6DA5
#define PS_CALIBRATED		0x5053

#define CM3629_ALS_IT_50ms 	(0 << 6)
#define CM3629_ALS_IT_100ms 	(1 << 6)
#define CM3629_ALS_IT_200ms 	(2 << 6)
#define CM3629_ALS_IT_400ms 	(3 << 6)

#define CM3629_ALS_IT_80ms 		(0 << 6)
#define CM3629_ALS_IT_160ms 	(1 << 6)
#define CM3629_ALS_IT_320ms 	(2 << 6)
#define CM3629_ALS_IT_640ms 	(3 << 6)


#define CM3629_ALS_AV_1		(0 << 4)
#define CM3629_ALS_AV_2		(1 << 4)
#define CM3629_ALS_AV_4		(2 << 4)
#define CM3629_ALS_AV_8		(3 << 4)
#define CM3629_ALS_PERS_1 	(0 << 2) 
#define CM3629_ALS_PERS_2 	(1 << 2)
#define CM3629_ALS_PERS_4 	(2 << 2)
#define CM3629_ALS_PERS_8 	(3 << 2)
#define CM3629_ALS_INT_EN	(1 << 1) 
#define CM3629_ALS_SD		(1 << 0) 

#define CM3629_PS_63_STEPS 	(0 << 4)
#define CM3629_PS_120_STEPS 	(1 << 4)
#define CM3629_PS_191_STEPS 	(2 << 4)
#define CM3629_PS_255_STEPS 	(3 << 4)



#define CM3629_PS_DR_1_40 	(0 << 6)
#define CM3629_PS_DR_1_80 	(1 << 6)
#define CM3629_PS_DR_1_160 	(2 << 6)
#define CM3629_PS_DR_1_320 	(3 << 6)

#define CM3629_PS_IT_1T 	(0 << 4)
#define CM3629_PS_IT_1_3T 	(1 << 4)
#define CM3629_PS_IT_1_6T 	(2 << 4)
#define CM3629_PS_IT_2T 	(3 << 4)

#define CM3629_PS1_PERS_1 	(0 << 2)
#define CM3629_PS1_PERS_2 	(1 << 2)
#define CM3629_PS1_PERS_3 	(2 << 2)
#define CM3629_PS1_PERS_4 	(3 << 2)

#define CM3629_PS2_SD		(1 << 1) 
#define CM3629_PS1_SD		(1 << 0) 

#define CM3629_PS_ITB_1_2 	(0 << 6)
#define CM3629_PS_ITB_1 	(1 << 6)
#define CM3629_PS_ITB_2 	(2 << 6)
#define CM3629_PS_ITB_4 	(3 << 6)

#define CM3629_PS_ITR_1 	(0 << 4)
#define CM3629_PS_ITR_1_2  	(1 << 4)
#define CM3629_PS_ITR_1_4 	(2 << 4)
#define CM3629_PS_ITR_1_8 	(3 << 4)

#define CM3629_PS2_INT_DIS 	(0 << 2)
#define CM3629_PS2_INT_CLS 	(1 << 2)
#define CM3629_PS2_INT_AWY 	(2 << 2)
#define CM3629_PS2_INT_BOTH	(3 << 2)

#define CM3629_PS1_INT_DIS 	(0 << 0)
#define CM3629_PS1_INT_CLS 	(1 << 0)
#define CM3629_PS1_INT_AWY 	(2 << 0)
#define CM3629_PS1_INT_BOTH	(3 << 0)


#define CM3629_PS2_PROL_4 	(0 << 6)
#define CM3629_PS2_PROL_8 	(1 << 6)
#define CM3629_PS2_PROL_16	(2 << 6)
#define CM3629_PS2_PROL_32 	(3 << 6)

#define CM3629_PS_INTT 		(1 << 5)
#define CM3629_PS_SMART_PRES 	(1 << 4)
#define CM3629_PS_PS_FOR 	(1 << 3)
#define CM3629_PS_PS_TRIG	(1 << 2)

#define CM3629_PS2_PERS_1 	(0 << 0)
#define CM3629_PS2_PERS_2 	(1 << 0)
#define CM3629_PS2_PERS_3 	(2 << 0)
#define CM3629_PS2_PERS_4 	(3 << 0)

#define CM3629_PS_MS 		(1 << 5)

#define CM3629_PS2_SPFLAG 	(1 << 7)
#define CM3629_PS1_SPFLAG 	(1 << 6)

#define CM3629_ALS_IF_L 	(1 << 5)
#define CM3629_ALS_IF_H 	(1 << 4)
#define CM3629_PS2_IF_CLOSE	(1 << 3)
#define CM3629_PS2_IF_AWAY	(1 << 2)
#define CM3629_PS1_IF_CLOSE	(1 << 1)
#define CM3629_PS1_IF_AWAY	(1 << 0)

extern unsigned int ps_kparam1;
extern unsigned int ps_kparam2;
extern unsigned int als_kadc;
enum {
	CAPELLA_CM36282,
	CAPELLA_CM36292,
};

enum {
	CM3629_PS_DISABLE,
	CM3629_PS1_ONLY,
	CM3629_PS2_ONLY,
	CM3629_PS1_PS2_BOTH,
};

struct cm3629_platform_data {
	int model;
	int intr;
	uint16_t levels[10];
	uint16_t golden_adc;
	int (*power)(int, uint8_t); 
	int (*lpm_power)(uint8_t); 
	uint16_t cm3629_slave_address;
	uint8_t ps_select;
	uint8_t ps1_thd_set;
	uint8_t ps1_thh_diff;
	uint8_t ps2_thd_set;
	uint8_t inte_cancel_set;
	
	uint8_t ps_conf2_val; 
	uint8_t *mapping_table;
	uint8_t mapping_size;
	uint8_t ps_base_index;

	uint8_t ps_calibration_rule;
	uint8_t ps_conf1_val;
	uint8_t ps_conf3_val;
	uint8_t enable_polling_ignore;
	uint8_t ps1_thd_no_cal;
	uint8_t ps1_thd_with_cal;
	uint8_t ps2_thd_no_cal;
	uint8_t ps2_thd_with_cal;
	uint8_t ls_cmd;
	uint8_t ps1_adc_offset;
	uint8_t ps2_adc_offset;
	uint8_t ps_debounce;
	uint16_t ps_delay_time;
	unsigned int no_need_change_setting;
	uint8_t dark_level;
};

int power_key_check_in_pocket(void);
#endif
