blob: 46b821312ff0111ec436f3b47fd97202a2e1c814 [file] [log] [blame]
/* 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