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