311 lines
7.1 KiB
C
311 lines
7.1 KiB
C
/*
|
|
* Copyright (C) 2010, Samsung Electronics Co. Ltd. All Rights Reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* 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 __MXT540E_H__
|
|
#define __MXT540E_H__
|
|
|
|
#include <linux/gpio.h>
|
|
|
|
#define MXT540E_DEV_NAME "Atmel MXT540E"
|
|
|
|
#define MXT540E_SW_RESET_TIME 300 /* msec */
|
|
#define MXT540E_HW_RESET_TIME 130 /* msec */
|
|
|
|
enum {
|
|
RESERVED_T0 = 0,
|
|
RESERVED_T1,
|
|
DEBUG_DELTAS_T2,
|
|
DEBUG_REFERENCES_T3,
|
|
DEBUG_SIGNALS_T4,
|
|
GEN_MESSAGEPROCESSOR_T5,
|
|
GEN_COMMANDPROCESSOR_T6,
|
|
GEN_POWERCONFIG_T7,
|
|
GEN_ACQUISITIONCONFIG_T8,
|
|
TOUCH_MULTITOUCHSCREEN_T9,
|
|
TOUCH_SINGLETOUCHSCREEN_T10,
|
|
TOUCH_XSLIDER_T11,
|
|
TOUCH_YSLIDER_T12,
|
|
TOUCH_XWHEEL_T13,
|
|
TOUCH_YWHEEL_T14,
|
|
TOUCH_KEYARRAY_T15,
|
|
PROCG_SIGNALFILTER_T16,
|
|
PROCI_LINEARIZATIONTABLE_T17,
|
|
SPT_COMCONFIG_T18,
|
|
SPT_GPIOPWM_T19,
|
|
PROCI_GRIPFACESUPPRESSION_T20,
|
|
RESERVED_T21,
|
|
PROCG_NOISESUPPRESSION_T22,
|
|
TOUCH_PROXIMITY_T23,
|
|
PROCI_ONETOUCHGESTUREPROCESSOR_T24,
|
|
SPT_SELFTEST_T25,
|
|
DEBUG_CTERANGE_T26,
|
|
PROCI_TWOTOUCHGESTUREPROCESSOR_T27,
|
|
SPT_CTECONFIG_T28,
|
|
SPT_GPI_T29,
|
|
SPT_GATE_T30,
|
|
TOUCH_KEYSET_T31,
|
|
TOUCH_XSLIDERSET_T32,
|
|
RESERVED_T33,
|
|
GEN_MESSAGEBLOCK_T34,
|
|
SPARE_T35,
|
|
RESERVED_T36,
|
|
DEBUG_DIAGNOSTIC_T37,
|
|
SPT_USERDATA_T38,
|
|
SPARE_T39,
|
|
PROCI_GRIPSUPPRESSION_T40,
|
|
SPARE_T41,
|
|
PROCI_TOUCHSUPPRESSION_T42,
|
|
SPT_DIGITIZER_T43,
|
|
SPARE_T44,
|
|
SPARE_T45,
|
|
SPT_CTECONFIG_T46,
|
|
PROCI_STYLUS_T47,
|
|
PROCG_NOISESUPPRESSION_T48,
|
|
SPARE_T49,
|
|
SPARE_T50,
|
|
SPARE_T51,
|
|
TOUCH_PROXKEY_T52,
|
|
GEN_DATASOURCE_T53,
|
|
SPARE_T54,
|
|
ADAPTIVE_T55,
|
|
SPARE_T56,
|
|
SPT_GENERICDATA_T57,
|
|
SPARE_T58,
|
|
SPARE_T59,
|
|
SPARE_T60,
|
|
SPT_TIMER_T61,
|
|
RESERVED_T255 = 255,
|
|
};
|
|
|
|
struct mxt540e_platform_data {
|
|
int max_finger_touches;
|
|
const u8 **config_e;
|
|
int gpio_read_done;
|
|
int min_x;
|
|
int max_x;
|
|
int min_y;
|
|
int max_y;
|
|
int min_z;
|
|
int max_z;
|
|
int min_w;
|
|
int max_w;
|
|
u8 irqf_trigger_type;
|
|
u8 chrgtime_batt;
|
|
u8 chrgtime_charging;
|
|
u8 tchthr_batt;
|
|
u8 tchthr_charging;
|
|
u8 actvsyncsperx_batt;
|
|
u8 actvsyncsperx_charging;
|
|
u8 calcfg_batt_e;
|
|
u8 calcfg_charging_e;
|
|
u8 atchfrccalthr_e;
|
|
u8 atchfrccalratio_e;
|
|
const u8 *t48_config_batt_e;
|
|
const u8 *t48_config_chrg_e;
|
|
void (*power_on) (struct device *);
|
|
void (*power_off) (struct device *);
|
|
void (*power_on_with_oleddet) (void);
|
|
void (*power_off_with_oleddet) (void);
|
|
void (*register_cb) (void *);
|
|
void (*read_ta_status) (void *);
|
|
};
|
|
|
|
enum {
|
|
MXT_PAGE_UP = 0x01,
|
|
MXT_PAGE_DOWN = 0x02,
|
|
MXT_DELTA_MODE = 0x10,
|
|
MXT_REFERENCE_MODE = 0x11,
|
|
MXT_CTE_MODE = 0x31
|
|
};
|
|
|
|
int get_tsp_status(void);
|
|
|
|
#define GPIO_LEVEL_LOW 0
|
|
|
|
static struct charging_status_callbacks {
|
|
void (*tsp_set_charging_cable) (int type);
|
|
} charging_cbs;
|
|
|
|
bool is_cable_attached;
|
|
|
|
static void tsp_register_callback(void *function)
|
|
{
|
|
charging_cbs.tsp_set_charging_cable = function;
|
|
}
|
|
|
|
static void tsp_read_ta_status(void *ta_status)
|
|
{
|
|
*(bool *)ta_status = is_cable_attached;
|
|
}
|
|
|
|
static void mxt540e_power_on(struct device *dev)
|
|
{
|
|
struct pinctrl *pinctrl;
|
|
|
|
pinctrl = devm_pinctrl_get_select(dev, "tsp_on");
|
|
if (IS_ERR(pinctrl))
|
|
pr_err("touch pin not configured for power on\n");
|
|
}
|
|
|
|
static void mxt540e_power_off(struct device *dev)
|
|
{
|
|
struct mxt540e_platform_data *pdata = dev->platform_data;
|
|
struct pinctrl *pinctrl;
|
|
|
|
pinctrl = devm_pinctrl_get_select(dev, "tsp_off");
|
|
if (IS_ERR(pinctrl))
|
|
pr_err("touch pin not configured for power off\n");
|
|
|
|
gpio_direction_output(pdata->gpio_read_done, GPIO_LEVEL_LOW);
|
|
}
|
|
|
|
#define MXT540E_MAX_MT_FINGERS 10
|
|
#define MXT540E_CHRGTIME_BATT 48
|
|
#define MXT540E_CHRGTIME_CHRG 48
|
|
#define MXT540E_THRESHOLD_BATT 50
|
|
#define MXT540E_THRESHOLD_CHRG 40
|
|
#define MXT540E_ACTVSYNCSPERX_BATT 24
|
|
#define MXT540E_ACTVSYNCSPERX_CHRG 28
|
|
#define MXT540E_CALCFG_BATT 98
|
|
#define MXT540E_CALCFG_CHRG 114
|
|
#define MXT540E_ATCHFRCCALTHR_WAKEUP 8
|
|
#define MXT540E_ATCHFRCCALRATIO_WAKEUP 180
|
|
#define MXT540E_ATCHFRCCALTHR_NORMAL 40
|
|
#define MXT540E_ATCHFRCCALRATIO_NORMAL 55
|
|
|
|
static u8 t7_config_e[] = { GEN_POWERCONFIG_T7,
|
|
48, 255, 50
|
|
};
|
|
|
|
static u8 t8_config_e[] = { GEN_ACQUISITIONCONFIG_T8,
|
|
MXT540E_CHRGTIME_BATT, 0, 5, 1, 0, 0, 4, 20,
|
|
MXT540E_ATCHFRCCALTHR_WAKEUP, MXT540E_ATCHFRCCALRATIO_WAKEUP
|
|
};
|
|
|
|
static u8 t9_config_e[] = { TOUCH_MULTITOUCHSCREEN_T9,
|
|
131, 0, 0, 16, 26, 0, 192, MXT540E_THRESHOLD_BATT, 2, 6,
|
|
10, 10, 10, 80, MXT540E_MAX_MT_FINGERS, 20, 40, 20, 31, 3,
|
|
255, 4, 3, 3, 2, 2, 136, 60, 136, 40,
|
|
18, 15, 0, 0, 0
|
|
};
|
|
|
|
static u8 t15_config_e[] = { TOUCH_KEYARRAY_T15,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t18_config_e[] = { SPT_COMCONFIG_T18,
|
|
0, 0
|
|
};
|
|
|
|
static u8 t19_config_e[] = { SPT_GPIOPWM_T19,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t24_config_e[] = { PROCI_ONETOUCHGESTUREPROCESSOR_T24,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t25_config_e[] = { SPT_SELFTEST_T25,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t27_config_e[] = { PROCI_TWOTOUCHGESTUREPROCESSOR_T27,
|
|
0, 0, 0, 0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t40_config_e[] = { PROCI_GRIPSUPPRESSION_T40,
|
|
0, 0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t42_config_e[] = { PROCI_TOUCHSUPPRESSION_T42,
|
|
0, 0, 0, 0, 0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t43_config_e[] = { SPT_DIGITIZER_T43,
|
|
0, 0, 0, 0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t46_config_e[] = { SPT_CTECONFIG_T46,
|
|
0, 0, 16, MXT540E_ACTVSYNCSPERX_BATT, 0, 0, 1, 0
|
|
};
|
|
|
|
static u8 t47_config_e[] = { PROCI_STYLUS_T47,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t48_config_e[] = { PROCG_NOISESUPPRESSION_T48,
|
|
3, 132, MXT540E_CALCFG_BATT, 0, 0, 0, 0, 0, 1, 2,
|
|
0, 0, 0, 6, 6, 0, 0, 28, 4, 64,
|
|
10, 0, 20, 6, 0, 30, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 192, MXT540E_THRESHOLD_BATT, 2, 10, 10, 47,
|
|
MXT540E_MAX_MT_FINGERS, 5, 20, 253, 0, 7, 7, 160, 55, 136,
|
|
0, 18, 5, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t48_config_chrg_e[] = { PROCG_NOISESUPPRESSION_T48,
|
|
3, 132, MXT540E_CALCFG_CHRG, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 6, 6, 0, 0, 36, 4, 64,
|
|
10, 0, 10, 6, 0, 20, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 112, MXT540E_THRESHOLD_CHRG, 2, 10, 5, 47,
|
|
MXT540E_MAX_MT_FINGERS, 5, 20, 253, 0, 7, 7, 160, 55, 136,
|
|
0, 18, 10, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t52_config_e[] = { TOUCH_PROXKEY_T52,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t55_config_e[] = {ADAPTIVE_T55,
|
|
0, 0, 0, 0, 0, 0
|
|
};
|
|
|
|
static u8 t57_config_e[] = {SPT_GENERICDATA_T57,
|
|
243, 25, 1
|
|
};
|
|
|
|
static u8 t61_config_e[] = {SPT_TIMER_T61,
|
|
0, 0, 0, 0, 0
|
|
};
|
|
|
|
static u8 end_config_e[] = { RESERVED_T255 };
|
|
|
|
static const u8 *mxt540e_config[] = {
|
|
t7_config_e,
|
|
t8_config_e,
|
|
t9_config_e,
|
|
t15_config_e,
|
|
t18_config_e,
|
|
t19_config_e,
|
|
t24_config_e,
|
|
t25_config_e,
|
|
t27_config_e,
|
|
t40_config_e,
|
|
t42_config_e,
|
|
t43_config_e,
|
|
t46_config_e,
|
|
t47_config_e,
|
|
t48_config_e,
|
|
t52_config_e,
|
|
t55_config_e,
|
|
t57_config_e,
|
|
t61_config_e,
|
|
end_config_e,
|
|
};
|
|
#endif
|