mirror of https://gitee.com/openkylin/linux.git
Input: atmel_mxt_ts - allow board code to suppliy controller config
As there is no common configuration settings that would work in every situation, remove the fixed config data from driver code and add config data to platform data. Signed-off-by: Iiro Valkonen <iiro.valkonen@atmel.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
parent
46ee2a05a4
commit
71749f5c66
|
@ -199,122 +199,6 @@
|
|||
|
||||
#define MXT_MAX_FINGER 10
|
||||
|
||||
/* Initial register values recommended from chip vendor */
|
||||
static const u8 init_vals_ver_20[] = {
|
||||
/* MXT_GEN_COMMAND(6) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_GEN_POWER(7) */
|
||||
0x20, 0xff, 0x32,
|
||||
/* MXT_GEN_ACQUIRE(8) */
|
||||
0x08, 0x05, 0x05, 0x00, 0x00, 0x00, 0x05, 0x14,
|
||||
/* MXT_TOUCH_MULTI(9) */
|
||||
0x00, 0x00, 0x00, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00,
|
||||
0x00, 0x01, 0x01, 0x0e, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x64,
|
||||
/* MXT_TOUCH_KEYARRAY(15) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00,
|
||||
/* MXT_SPT_GPIOPWM(19) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00,
|
||||
/* MXT_PROCI_GRIPFACE(20) */
|
||||
0x00, 0x64, 0x64, 0x64, 0x64, 0x00, 0x00, 0x1e, 0x14, 0x04,
|
||||
0x1e, 0x00,
|
||||
/* MXT_PROCG_NOISE(22) */
|
||||
0x05, 0x00, 0x00, 0x19, 0x00, 0xe7, 0xff, 0x04, 0x32, 0x00,
|
||||
0x01, 0x0a, 0x0f, 0x14, 0x00, 0x00, 0xe8,
|
||||
/* MXT_TOUCH_PROXIMITY(23) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00,
|
||||
/* MXT_PROCI_ONETOUCH(24) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_SPT_SELFTEST(25) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_PROCI_TWOTOUCH(27) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_SPT_CTECONFIG(28) */
|
||||
0x00, 0x00, 0x00, 0x04, 0x08,
|
||||
};
|
||||
|
||||
static const u8 init_vals_ver_21[] = {
|
||||
/* MXT_GEN_COMMAND(6) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_GEN_POWER(7) */
|
||||
0x20, 0xff, 0x32,
|
||||
/* MXT_GEN_ACQUIRE(8) */
|
||||
0x0a, 0x00, 0x05, 0x00, 0x00, 0x00, 0x09, 0x23,
|
||||
/* MXT_TOUCH_MULTI(9) */
|
||||
0x00, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00,
|
||||
0x00, 0x01, 0x01, 0x0e, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_TOUCH_KEYARRAY(15) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00,
|
||||
/* MXT_SPT_GPIOPWM(19) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_PROCI_GRIPFACE(20) */
|
||||
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x28, 0x04,
|
||||
0x0f, 0x0a,
|
||||
/* MXT_PROCG_NOISE(22) */
|
||||
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x23, 0x00,
|
||||
0x00, 0x05, 0x0f, 0x19, 0x23, 0x2d, 0x03,
|
||||
/* MXT_TOUCH_PROXIMITY(23) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00,
|
||||
/* MXT_PROCI_ONETOUCH(24) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_SPT_SELFTEST(25) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_PROCI_TWOTOUCH(27) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_SPT_CTECONFIG(28) */
|
||||
0x00, 0x00, 0x00, 0x08, 0x10, 0x00,
|
||||
};
|
||||
|
||||
static const u8 init_vals_ver_22[] = {
|
||||
/* MXT_GEN_COMMAND(6) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_GEN_POWER(7) */
|
||||
0x20, 0xff, 0x32,
|
||||
/* MXT_GEN_ACQUIRE(8) */
|
||||
0x0a, 0x00, 0x05, 0x00, 0x00, 0x00, 0x09, 0x23,
|
||||
/* MXT_TOUCH_MULTI(9) */
|
||||
0x00, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00,
|
||||
0x00, 0x01, 0x01, 0x0e, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00,
|
||||
/* MXT_TOUCH_KEYARRAY(15) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00,
|
||||
/* MXT_SPT_GPIOPWM(19) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_PROCI_GRIPFACE(20) */
|
||||
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x28, 0x04,
|
||||
0x0f, 0x0a,
|
||||
/* MXT_PROCG_NOISE(22) */
|
||||
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x23, 0x00,
|
||||
0x00, 0x05, 0x0f, 0x19, 0x23, 0x2d, 0x03,
|
||||
/* MXT_TOUCH_PROXIMITY(23) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_PROCI_ONETOUCH(24) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_SPT_SELFTEST(25) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_PROCI_TWOTOUCH(27) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_SPT_CTECONFIG(28) */
|
||||
0x00, 0x00, 0x00, 0x08, 0x10, 0x00,
|
||||
};
|
||||
|
||||
struct mxt_info {
|
||||
u8 family_id;
|
||||
u8 variant_id;
|
||||
|
@ -714,26 +598,15 @@ static irqreturn_t mxt_interrupt(int irq, void *dev_id)
|
|||
|
||||
static int mxt_check_reg_init(struct mxt_data *data)
|
||||
{
|
||||
const struct mxt_platform_data *pdata = data->pdata;
|
||||
struct mxt_object *object;
|
||||
struct device *dev = &data->client->dev;
|
||||
int index = 0;
|
||||
int i, j;
|
||||
u8 version = data->info.version;
|
||||
u8 *init_vals;
|
||||
int i, j, config_offset;
|
||||
|
||||
switch (version) {
|
||||
case MXT_VER_20:
|
||||
init_vals = (u8 *)init_vals_ver_20;
|
||||
break;
|
||||
case MXT_VER_21:
|
||||
init_vals = (u8 *)init_vals_ver_21;
|
||||
break;
|
||||
case MXT_VER_22:
|
||||
init_vals = (u8 *)init_vals_ver_22;
|
||||
break;
|
||||
default:
|
||||
dev_err(dev, "Firmware version %d doesn't support\n", version);
|
||||
return -EINVAL;
|
||||
if (!pdata->config) {
|
||||
dev_dbg(dev, "No cfg data defined, skipping reg init\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < data->info.object_num; i++) {
|
||||
|
@ -742,10 +615,15 @@ static int mxt_check_reg_init(struct mxt_data *data)
|
|||
if (!mxt_object_writable(object->type))
|
||||
continue;
|
||||
|
||||
for (j = 0; j < object->size + 1; j++)
|
||||
for (j = 0; j < object->size + 1; j++) {
|
||||
config_offset = index + j;
|
||||
if (config_offset > pdata->config_length) {
|
||||
dev_err(dev, "Not enough config data!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
mxt_write_object(data, object->type, j,
|
||||
init_vals[index + j]);
|
||||
|
||||
pdata->config[config_offset]);
|
||||
}
|
||||
index += object->size + 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
#ifndef __LINUX_ATMEL_MXT_TS_H
|
||||
#define __LINUX_ATMEL_MXT_TS_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* Orient */
|
||||
#define MXT_NORMAL 0x0
|
||||
#define MXT_DIAGONAL 0x1
|
||||
|
@ -25,6 +27,9 @@
|
|||
|
||||
/* The platform data for the Atmel maXTouch touchscreen driver */
|
||||
struct mxt_platform_data {
|
||||
const u8 *config;
|
||||
size_t config_length;
|
||||
|
||||
unsigned int x_line;
|
||||
unsigned int y_line;
|
||||
unsigned int x_size;
|
||||
|
|
Loading…
Reference in New Issue