aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/touchscreen/mms_ts.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/touchscreen/mms_ts.c')
-rw-r--r--drivers/input/touchscreen/mms_ts.c509
1 files changed, 90 insertions, 419 deletions
diff --git a/drivers/input/touchscreen/mms_ts.c b/drivers/input/touchscreen/mms_ts.c
index 3afd366..67c6841 100644
--- a/drivers/input/touchscreen/mms_ts.c
+++ b/drivers/input/touchscreen/mms_ts.c
@@ -16,7 +16,7 @@
#define DEBUG
/* #define VERBOSE_DEBUG */
-#define SEC_TSP_DEBUG
+/*#define SEC_TSP_DEBUG*/
/* #define SEC_TSP_VERBOSE_DEBUG */
/* #define FORCE_FW_FLASH */
@@ -49,17 +49,9 @@
#include <linux/platform_data/mms_ts.h>
#include <asm/unaligned.h>
-//#include "mms_ts_fw.h"
#include "../keyboard/cypress/cypress-touchkey.h"
-#ifdef CONFIG_INPUT_FBSUSPEND
-#ifdef CONFIG_DRM
-#include <drm/drm_backlight.h>
-#endif
-#include <linux/fb.h>
-#endif
-
#define MAX_FINGERS 10
#define MAX_WIDTH 30
#define MAX_PRESSURE 255
@@ -111,25 +103,8 @@ enum {
#define ISC_CHECK_STATUS_CMD 0xAF
#define ISC_CONFIRM_CRC 0x03
#define ISC_DEFAULT_CRC 0xFFFF
-
#endif
-#if defined(CONFIG_MACH_M0)
-#define TSP_FW_UPDATEABLE_HW_REV 11
-#elif defined(CONFIG_MACH_C1) && !defined(CONFIG_TARGET_LOCALE_KOR)
-#define TSP_FW_UPDATEABLE_HW_REV 6
-#elif defined(CONFIG_MACH_C1_KOR_SKT)
-#define TSP_FW_UPDATEABLE_HW_REV 9
-#elif defined(CONFIG_MACH_C1_KOR_KT)
-#define TSP_FW_UPDATEABLE_HW_REV 9
-#elif defined(CONFIG_MACH_C1_KOR_LGT)
-#define TSP_FW_UPDATEABLE_HW_REV 6
-#else
-#define TSP_FW_UPDATEABLE_HW_REV 11
-#endif
-
-
-
#ifdef SEC_TSP_FACTORY_TEST
#define TX_NUM 26
#define RX_NUM 14
@@ -171,14 +146,6 @@ int touch_is_pressed = 0;
/* 4.8" OCTA LCD */
#define FW_VERSION_4_8 0xBB
-/* 4.65" OCTA LCD */
-#ifdef CONFIG_SLP
-#define FW_VERSION_4_65 0x66
-#include "465_SMD_V66.h"
-#else
-#define FW_VERSION_4_65 0xA8
-#include "M0_D2_C1_VA8.h"
-#endif
#define MAX_FW_PATH 255
#define TSP_FW_FILENAME "melfas_fw.bin"
@@ -277,38 +244,33 @@ struct mms_ts_info {
bool invert_y;
const u8 *config_fw_version;
int irq;
- char *fw_name;
- int (*power) (int on);
- void (*input_event)(void *data);
+ int (*power) (bool on);
struct melfas_tsi_platform_data *pdata;
struct early_suspend early_suspend;
-#if TOUCH_BOOSTER
- struct delayed_work work_dvfs_off;
- struct delayed_work work_dvfs_chg;
- bool dvfs_lock_status;
- int cpufreq_level;
- struct mutex dvfs_lock;
-#endif
/* protects the enabled flag */
struct mutex lock;
bool enabled;
-
- enum fw_flash_mode fw_flash_mode;
void (*register_cb)(void *);
struct tsp_callbacks callbacks;
bool ta_status;
bool noise_mode;
-
-#if defined(SEC_TSP_DEBUG) || defined(SEC_TSP_VERBOSE_DEBUG)
unsigned char finger_state[MAX_FINGERS];
-#endif
#if defined(SEC_TSP_FW_UPDATE)
u8 fw_update_state;
#endif
-u8 fw_ic_ver;
+ u8 fw_ic_ver;
+ enum fw_flash_mode fw_flash_mode;
+
+#if TOUCH_BOOSTER
+ struct delayed_work work_dvfs_off;
+ struct delayed_work work_dvfs_chg;
+ bool dvfs_lock_status;
+ int cpufreq_level;
+ struct mutex dvfs_lock;
+#endif
#if defined(SEC_TSP_FACTORY_TEST)
struct list_head cmd_list_head;
@@ -325,13 +287,6 @@ u8 fw_ic_ver;
unsigned int intensity[NODE_NUM];
bool ft_flag;
#endif /* SEC_TSP_FACTORY_TEST */
-
- int (*lcd_type) (void);
-
-#ifdef CONFIG_INPUT_FBSUSPEND
- struct notifier_block fb_notif;
- bool was_enabled_at_suspend;
-#endif
};
struct mms_fw_image {
@@ -390,10 +345,10 @@ struct tsp_cmd tsp_cmds[] = {
{TSP_CMD("get_fw_ver_ic", get_fw_ver_ic),},
{TSP_CMD("get_config_ver", get_config_ver),},
{TSP_CMD("get_threshold", get_threshold),},
- {TSP_CMD("module_off_master", module_off_master),},
+/* {TSP_CMD("module_off_master", module_off_master),},
{TSP_CMD("module_on_master", module_on_master),},
{TSP_CMD("module_off_slave", not_support_cmd),},
- {TSP_CMD("module_on_slave", not_support_cmd),},
+ {TSP_CMD("module_on_slave", not_support_cmd),}, */
{TSP_CMD("get_chip_vendor", get_chip_vendor),},
{TSP_CMD("get_chip_name", get_chip_name),},
{TSP_CMD("get_x_num", get_x_num),},
@@ -498,122 +453,6 @@ out:
#endif
-#ifdef CONFIG_INPUT_FBSUSPEND
-#ifdef CONFIG_DRM
-static void melfas_set_power(void *priv, int power)
-{
- struct mms_ts_info *info = (struct mms_ts_info *)priv;
- int i;
-
- switch (power) {
- case FB_BLANK_UNBLANK:
- if (info->enabled == 0) {
- info->pdata->power(true);
- msleep(200);
- enable_irq(info->client->irq);
- info->enabled = 1;
- } else {
- pr_err("[TSP] touchscreen already on\n");
- }
- break;
- case FB_BLANK_POWERDOWN:
- for (i = 0; i < MAX_FINGERS; i++) {
- input_mt_slot(info->input_dev, i);
- input_mt_report_slot_state(info->input_dev,
- MT_TOOL_FINGER, false);
- input_sync(info->input_dev);
- }
- if (info->enabled == 1) {
- disable_irq(info->client->irq);
- info->pdata->power(false);
- info->enabled = 0;
- } else {
- pr_err("[TSP] touchscreen already off\n");
- }
- break;
- default:
- break;
- }
-}
-
-static struct drm_bl_notifier bl_notifier = {
- .set_power = melfas_set_power
-};
-
-static int tsp_register_fb(struct mms_ts_info *info)
-{
- bl_notifier.dev = info->input_dev->dev;
- bl_notifier.priv = (void *)info;
-
- return drm_bl_register(&bl_notifier.dev, BL_TSP_CLASS);
-}
-
-static void tsp_unregister_fb(struct mms_ts_info *info)
-{
- drm_bl_unregister(&bl_notifier.dev);
-}
-#else
-static int
-melfas_fb_notifier_callback(struct notifier_block *self,
- unsigned long event, void *fb_evdata)
-{
- struct mms_ts_info *info;
- struct fb_event *evdata = fb_evdata;
- int blank;
- int i;
-
- /* If we aren't interested in this event, skip it immediately ... */
- if (event != FB_EVENT_BLANK)
- return 0;
-
- info = container_of(self, struct mms_ts_info, fb_notif);
- blank = *(int *)evdata->data;
-
- switch (blank) {
- case FB_BLANK_UNBLANK:
- if (info->enabled == 0) {
- info->pdata->power(true);
- msleep(200);
- enable_irq(info->client->irq);
- info->enabled = 1;
- } else {
- pr_err("[TSP] touchscreen already on\n");
- }
- break;
- case FB_BLANK_POWERDOWN:
- for (i = 0; i < MAX_FINGERS; i++) {
- input_mt_slot(info->input_dev, i);
- input_mt_report_slot_state(info->input_dev,
- MT_TOOL_FINGER, false);
- input_sync(info->input_dev);
- }
- if (info->enabled == 1) {
- disable_irq(info->client->irq);
- info->pdata->power(false);
- info->enabled = 0;
- } else {
- pr_err("[TSP] touchscreen already off\n");
- }
- break;
- default:
- break;
- }
- return 0;
-}
-
-static int tsp_register_fb(struct mms_ts_info *info)
-{
- memset(&info->fb_notif, 0, sizeof(info->fb_notif));
- info->fb_notif.notifier_call = melfas_fb_notifier_callback;
- return fb_register_client(&info->fb_notif);
-}
-static void tsp_unregister_fb(struct mms_ts_info *info)
-{
- fb_unregister_client(&info->fb_notif);
-}
-#endif
-#endif
-
static inline void mms_pwr_on_reset(struct mms_ts_info *info)
{
struct i2c_adapter *adapter = to_i2c_adapter(info->client->dev.parent);
@@ -627,12 +466,12 @@ static inline void mms_pwr_on_reset(struct mms_ts_info *info)
i2c_lock_adapter(adapter);
info->pdata->mux_fw_flash(true);
- info->pdata->power(0);
+ info->pdata->power(false);
gpio_direction_output(info->pdata->gpio_sda, 0);
gpio_direction_output(info->pdata->gpio_scl, 0);
gpio_direction_output(info->pdata->gpio_int, 0);
msleep(50);
- info->pdata->power(1);
+ info->pdata->power(true);
msleep(200);
info->pdata->mux_fw_flash(false);
@@ -642,6 +481,7 @@ static inline void mms_pwr_on_reset(struct mms_ts_info *info)
* Find the right value */
msleep(250);
}
+
static void release_all_fingers(struct mms_ts_info *info)
{
struct i2c_client *client = info->client;
@@ -650,11 +490,9 @@ static void release_all_fingers(struct mms_ts_info *info)
printk(KERN_DEBUG "[TSP] %s\n", __func__);
for (i = 0; i < MAX_FINGERS; i++) {
-#ifdef SEC_TSP_DEBUG
if (info->finger_state[i] == 1) {
dev_notice(&client->dev, "finger %d up(force)\n", i);
}
-#endif
info->finger_state[i] = 0;
input_mt_slot(info->input_dev, i);
input_mt_report_slot_state(info->input_dev, MT_TOOL_FINGER,
@@ -708,9 +546,8 @@ static void reset_mms_ts(struct mms_ts_info *info)
} else {
dev_notice(&client->dev, "TA disconnect!!!\n");
i2c_smbus_write_byte_data(info->client, 0x33, 0x2);
- mms_set_noise_mode(info);
}
-
+ mms_set_noise_mode(info);
dev_notice(&client->dev, "%s--\n", __func__);
}
@@ -731,13 +568,9 @@ static void melfas_ta_cb(struct tsp_callbacks *cb, bool ta_status)
} else {
dev_notice(&client->dev, "TA disconnect!!!\n");
i2c_smbus_write_byte_data(info->client, 0x33, 0x2);
+ }
mms_set_noise_mode(info);
-}
}
-
-/* if (!ta_status)
- mms_set_noise_mode(info);
-*/
}
static irqreturn_t mms_ts_interrupt(int irq, void *dev_id)
@@ -748,9 +581,7 @@ static irqreturn_t mms_ts_interrupt(int irq, void *dev_id)
int ret;
int i;
int sz;
- u8 finger_event_sz;
u8 reg = MMS_INPUT_EVENT0;
- int _touch_is_pressed = 0;
struct i2c_msg msg[] = {
{
.addr = client->addr,
@@ -764,14 +595,8 @@ static irqreturn_t mms_ts_interrupt(int irq, void *dev_id)
},
};
-#ifdef CONFIG_SLP
- if (info->input_event)
- info->input_event(info);
-#endif
-
sz = i2c_smbus_read_byte_data(client, MMS_INPUT_EVENT_PKT_SZ);
- #if !defined(CONFIG_TARGET_LOCALE_KOR)
if (sz < 0) {
dev_err(&client->dev, "%s bytes=%d\n", __func__, sz);
for (i = 0; i < 50; i++) {
@@ -787,24 +612,6 @@ static irqreturn_t mms_ts_interrupt(int irq, void *dev_id)
goto out;
}
}
- #else
- if (sz < 0) {
- dev_err(&client->dev, "%s bytes=%d\n", __func__, sz);
- for (i = 0; i < 5; i++) {
- msleep(20);
- sz = i2c_smbus_read_byte_data(client,
- MMS_INPUT_EVENT_PKT_SZ);
- if (sz > 0)
- break;
- }
-
- if (i == 5) {
- dev_dbg(&client->dev, "[TSP] i2c failed E1... reset!!\n");
- reset_mms_ts(info);
- goto out;
- }
- }
- #endif
/* BUG_ON(sz > MAX_FINGERS*FINGER_EVENT_SZ); */
if (sz == 0)
@@ -821,33 +628,14 @@ static irqreturn_t mms_ts_interrupt(int irq, void *dev_id)
dev_err(&client->dev,
"failed to read %d bytes of touch data (%d)\n",
sz, ret);
- #if !defined(CONFIG_TARGET_LOCALE_KOR)
goto out;
- #else
- if (ret < 0) {
- dev_err(&client->dev,
- "%s bytes=%d\n", __func__, sz);
- for (i = 0; i < 5; i++) {
- msleep(20);
- ret = i2c_transfer(client->adapter,
- msg, ARRAY_SIZE(msg));
- if (ret > 0)
- break;
- }
- if (i == 5) {
- dev_dbg(&client->dev,
- "[TSP] i2c failed E2... reset!!\n");
- reset_mms_ts(info);
- goto out;
- }
- }
- #endif
}
+
#if defined(VERBOSE_DEBUG)
print_hex_dump(KERN_DEBUG, "mms_ts raw: ",
DUMP_PREFIX_OFFSET, 32, 1, buf, sz, false);
-
#endif
+
if (buf[0] == 0x0F) { /* ESD */
dev_dbg(&client->dev, "ESD DETECT.... reset!!\n");
reset_mms_ts(info);
@@ -868,6 +656,7 @@ static irqreturn_t mms_ts_interrupt(int irq, void *dev_id)
int y = tmp[3] | (((tmp[1] >> 4) & 0xf) << 8);
int angle = (tmp[5] >= 127) ? (-(256 - tmp[5])) : tmp[5];
int palm = (tmp[0] & 0x10) >> 4;
+
if (info->invert_x) {
x = info->max_x - x;
if (x < 0)
@@ -886,33 +675,25 @@ static irqreturn_t mms_ts_interrupt(int irq, void *dev_id)
}
if ((tmp[0] & 0x80) == 0) {
-#if 0 /*defined(SEC_TSP_DEBUG)*/
+#if defined(SEC_TSP_DEBUG)
dev_dbg(&client->dev,
"finger id[%d]: x=%d y=%d p=%d w=%d major=%d minor=%d angle=%d palm=%d\n",
id, x, y, tmp[5], tmp[4], tmp[6], tmp[7]
, angle, palm);
#else
if (info->finger_state[id] != 0) {
-
// report state to cypress-touchkey for backlight timeout
touchscreen_state_report(0);
-#if defined(SEC_TSP_EVENT_DEBUG) && defined(CONFIG_TARGET_LOCALE_KOR)
- printk(KERN_DEBUG "[TSP] POS[%d](%4d,%4d)[U] tp = %d\n",
- id, x, y, touch_is_pressed);
-#else
dev_notice(&client->dev,
"finger [%d] up, palm %d\n", id, palm);
-#endif
}
#endif
input_mt_slot(info->input_dev, id);
input_mt_report_slot_state(info->input_dev,
MT_TOOL_FINGER, false);
-#if defined(SEC_TSP_DEBUG) || defined(SEC_TSP_VERBOSE_DEBUG)
info->finger_state[id] = 0;
-#endif
continue;
}
@@ -927,7 +708,7 @@ static irqreturn_t mms_ts_interrupt(int irq, void *dev_id)
input_report_abs(info->input_dev, ABS_MT_ANGLE, angle);
input_report_abs(info->input_dev, ABS_MT_PALM, palm);
-#if 0/*defined(SEC_TSP_DEBUG)*/
+#if defined(SEC_TSP_DEBUG)
if (info->finger_state[id] == 0) {
info->finger_state[id] = 1;
dev_dbg(&client->dev,
@@ -946,16 +727,10 @@ static irqreturn_t mms_ts_interrupt(int irq, void *dev_id)
// report state to cypress-touchkey for backlight timeout
touchscreen_state_report(1);
-#if defined(SEC_TSP_EVENT_DEBUG) && defined(CONFIG_TARGET_LOCALE_KOR)
- printk(KERN_DEBUG "[TSP] POS[%d](%4d,%4d)[D] tp = %d\n",
- id, x, y, touch_is_pressed);
-#elif defined(SEC_TSP_DEBUG)
dev_notice(&client->dev,
"finger [%d] down, palm %d\n", id, palm);
-#endif
}
#endif
-
}
input_sync(info->input_dev);
touch_is_pressed = 0;
@@ -968,7 +743,6 @@ static irqreturn_t mms_ts_interrupt(int irq, void *dev_id)
#if TOUCH_BOOSTER
set_dvfs_lock(info, !!touch_is_pressed);
#endif
-
out:
return IRQ_HANDLED;
}
@@ -1542,12 +1316,12 @@ ISC_ERROR_HANDLE:
static void hw_reboot(struct mms_ts_info *info, bool bootloader)
{
- info->pdata->power(0);
+ info->pdata->power(false);
gpio_direction_output(info->pdata->gpio_sda, bootloader ? 0 : 1);
gpio_direction_output(info->pdata->gpio_scl, bootloader ? 0 : 1);
gpio_direction_output(info->pdata->gpio_int, 0);
msleep(30);
- info->pdata->power(1);
+ info->pdata->power(true);
msleep(30);
if (bootloader) {
@@ -1800,7 +1574,7 @@ static int fw_download(struct mms_ts_info *info, const u8 * data, size_t len)
dev_info(&client->dev, "fw download start\n");
- info->pdata->power(0);
+ info->pdata->power(false);
gpio_direction_output(info->pdata->gpio_sda, 0);
gpio_direction_output(info->pdata->gpio_scl, 0);
gpio_direction_output(info->pdata->gpio_int, 0);
@@ -2029,16 +1803,9 @@ static int mms_ts_finish_config(struct mms_ts_info *info)
struct i2c_client *client = info->client;
int ret;
- #if defined(CONFIG_TARGET_LOCALE_KOR)
- ret = request_threaded_irq(client->irq, NULL, mms_ts_interrupt,
- IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
- MELFAS_TS_NAME, info);
- #else
ret = request_threaded_irq(client->irq, NULL, mms_ts_interrupt,
IRQF_TRIGGER_LOW | IRQF_ONESHOT,
MELFAS_TS_NAME, info);
- #endif
-
if (ret < 0) {
ret = 1;
@@ -2253,22 +2020,22 @@ static void get_raw_data_all(struct mms_ts_info *info, u8 cmd)
}
if (cmd == MMS_VSC_CMD_INTENSITY) {
- info->intensity[j * RX_NUM + i] = raw_data;
+ info->intensity[i * TX_NUM + j] = raw_data;
dev_dbg(&info->client->dev, "[TSP] intensity[%d][%d] = %d\n",
- i, j, info->intensity[j * RX_NUM + i]);
+ j, i, info->intensity[i * TX_NUM + j]);
} else if (cmd == MMS_VSC_CMD_CM_DELTA) {
- info->inspection[j * RX_NUM + i] = raw_data;
+ info->inspection[i * TX_NUM + j] = raw_data;
dev_dbg(&info->client->dev, "[TSP] delta[%d][%d] = %d\n",
- i, j, info->inspection[j * RX_NUM + i]);
+ j, i, info->inspection[i * TX_NUM + j]);
} else if (cmd == MMS_VSC_CMD_CM_ABS) {
- info->raw[j * RX_NUM + i] = raw_data;
+ info->raw[i * TX_NUM + j] = raw_data;
dev_dbg(&info->client->dev, "[TSP] raw[%d][%d] = %d\n",
- i, j, info->raw[j * RX_NUM + i]);
+ j, i, info->raw[i * TX_NUM + j]);
} else if (cmd == MMS_VSC_CMD_REFER) {
- info->reference[j * RX_NUM + i] =
+ info->reference[i * TX_NUM + j] =
raw_data >> 3;
dev_dbg(&info->client->dev, "[TSP] reference[%d][%d] = %d\n",
- i, j, info->reference[j * RX_NUM + i]);
+ j, i, info->reference[i * TX_NUM + j]);
}
}
@@ -2372,7 +2139,7 @@ static int check_rx_tx_num(void *device_data)
node = -1;
return node;
}
- node = info->cmd_param[1] * RX_NUM + info->cmd_param[0];
+ node = info->cmd_param[1] * TX_NUM + info->cmd_param[0];
dev_info(&info->client->dev, "%s: node = %d\n", __func__,
node);
return node;
@@ -2399,61 +2166,40 @@ static void fw_update(void *device_data)
struct i2c_client *client = info->client;
struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
int ret = 0;
- int ver = 0, hw_rev = 0, fw_bin_ver = 0;
+ int ver = 0, fw_bin_ver = 0;
int retries = 5;
const u8 *buff = 0;
mm_segment_t old_fs = {0};
struct file *fp = NULL;
long fsize = 0, nread = 0;
- const struct firmware *tsp_fw = NULL;
char fw_path[MAX_FW_PATH+1];
char result[16] = {0};
set_default_result(info);
- hw_rev = get_hw_version(info);
- if (hw_rev == 0x1)
- fw_bin_ver = FW_VERSION_4_8;
- else if (hw_rev == 0x0C)
- fw_bin_ver = FW_VERSION_4_65;
-
dev_info(&client->dev,
"fw_ic_ver = 0x%02x, fw_bin_ver = 0x%02x\n",
info->fw_ic_ver, fw_bin_ver);
- if (info->cmd_param[0] == 0
- && info->fw_ic_ver >= fw_bin_ver) {
- dev_info(&client->dev,
- "fw version update does not need\n");
- info->cmd_state = 2;
- goto do_not_need_update;
- }
-
switch (info->cmd_param[0]) {
case BUILT_IN:
- if (hw_rev == 0x1) {
- dev_info(&client->dev, "built in 4.8 fw is loaded!!\n");
-
- while (retries--) {
- ret = mms100_ISC_download_mbinary(info);
- ver = get_fw_version(info);
- info->fw_ic_ver = ver;
- if (ret == 0) {
- pr_err("[TSP] mms100_ISC_download_mbinary success");
- info->cmd_state = 2;
- return;
- } else {
- pr_err("[TSP] mms100_ISC_download_mbinary fail[%d]",
- ret);
- info->cmd_state = 3;
- }
+ dev_info(&client->dev, "built in 4.8 fw is loaded!!\n");
+
+ while (retries--) {
+ ret = mms100_ISC_download_mbinary(info);
+ ver = get_fw_version(info);
+ info->fw_ic_ver = ver;
+ if (ret == 0) {
+ pr_err("[TSP] mms100_ISC_download_mbinary success");
+ info->cmd_state = 2;
+ return;
+ } else {
+ pr_err("[TSP] mms100_ISC_download_mbinary fail[%d]",
+ ret);
+ info->cmd_state = 3;
}
- return;
- } else if (hw_rev == 0x0C) {
- buff = MELFAS_binary_4_65;
- fsize = MELFAS_binary_nLength_4_65;
- dev_info(&client->dev, "built in 4.65 fw is loaded!!\n");
}
+ return;
break;
case UMS:
@@ -2490,29 +2236,6 @@ static void fw_update(void *device_data)
set_fs(old_fs);
dev_info(&client->dev, "ums fw is loaded!!\n");
break;
-
- case REQ_FW:
- dev_info(&client->dev, "Entered REQ_FW case\n");
- ret = request_firmware(&tsp_fw, TSP_FW_FILENAME,
- &(client->dev));
- if (ret) {
- dev_err(&client->dev, "request firmware error!!\n");
- goto not_support;
- }
-
- fsize = tsp_fw->size;
- buff = kzalloc((size_t)fsize, GFP_KERNEL);
- if (!buff) {
- dev_err(&client->dev, "fail to alloc buffer for fw\n");
- info->cmd_state = 3;
- release_firmware(tsp_fw);
- goto not_support;
- }
-
- memcpy((void *)buff, tsp_fw->data, fsize);
- release_firmware(tsp_fw);
- break;
-
default:
dev_err(&client->dev, "invalid fw file type!!\n");
goto not_support;
@@ -2587,11 +2310,8 @@ static void get_fw_ver_bin(void *device_data)
int hw_rev;
set_default_result(info);
- hw_rev = get_hw_version(info);
- if (hw_rev == 0x01)
- snprintf(buff, sizeof(buff), "%#02x", FW_VERSION_4_8);
- else
- snprintf(buff, sizeof(buff), "%#02x", FW_VERSION_4_65);
+
+ snprintf(buff, sizeof(buff), "%#02x", FW_VERSION_4_8);
set_cmd_result(info, buff, strnlen(buff, sizeof(buff)));
info->cmd_state = 2;
@@ -2655,7 +2375,7 @@ static void get_threshold(void *device_data)
dev_info(&info->client->dev, "%s: %s(%d)\n", __func__,
buff, strnlen(buff, sizeof(buff)));
}
-
+/*
static void module_off_master(void *device_data)
{
struct mms_ts_info *info = (struct mms_ts_info *)device_data;
@@ -2733,7 +2453,7 @@ static void module_on_slave(void *device_data)
not_support_cmd(info);
}
-
+*/
static void get_chip_vendor(void *device_data)
{
struct mms_ts_info *info = (struct mms_ts_info *)device_data;
@@ -3212,7 +2932,7 @@ static int __devinit mms_ts_probe(struct i2c_client *client,
#endif
touch_is_pressed = 0;
-#if defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_C1)
+#if 0
gpio_request(GPIO_OLED_DET, "OLED_DET");
ret = gpio_get_value(GPIO_OLED_DET);
printk(KERN_DEBUG
@@ -3247,7 +2967,7 @@ static int __devinit mms_ts_probe(struct i2c_client *client,
info->pdata = client->dev.platform_data;
if (NULL == info->pdata) {
pr_err("failed to get platform data\n");
- goto err_config;
+ goto err_reg_input_dev;
}
info->irq = -1;
mutex_init(&info->lock);
@@ -3258,45 +2978,12 @@ static int __devinit mms_ts_probe(struct i2c_client *client,
info->invert_x = info->pdata->invert_x;
info->invert_y = info->pdata->invert_y;
info->config_fw_version = info->pdata->config_fw_version;
- info->lcd_type = info->pdata->lcd_type;
- info->input_event = info->pdata->input_event;
info->register_cb = info->pdata->register_cb;
} else {
info->max_x = 720;
info->max_y = 1280;
}
- i2c_set_clientdata(client, info);
-
- info->callbacks.inform_charger = melfas_ta_cb;
- if (info->register_cb)
- info->register_cb(&info->callbacks);
-
- info->pdata->power(true);
- msleep(100);
-
- ret = i2c_master_recv(client, buf, 1);
- if (ret < 0) { /* tsp connect check */
- pr_err("%s: i2c fail...tsp driver unload [%d], Add[%d]\n",
- __func__, ret, info->client->addr);
- goto err_config;
- }
-
-#if defined(CONFIG_MACH_M0_CMCC) || defined(CONFIG_MACH_M0_CTC)\
-|| defined(CONFIG_MACH_M0_CHNOPEN)
- /* do nothing */
-#else
- if (system_rev >= TSP_FW_UPDATEABLE_HW_REV)
- ret = mms_ts_fw_load(info);
- else
-#endif
- ret = mms_ts_fw_info(info);
-
- if (ret) {
- dev_err(&client->dev, "failed to initialize (%d)\n", ret);
- goto err_config;
- }
-
snprintf(info->phys, sizeof(info->phys),
"%s/input0", dev_name(&client->dev));
input_dev->name = "sec_touchscreen"; /*= "Melfas MMSxxx Touchscreen";*/
@@ -3305,22 +2992,15 @@ static int __devinit mms_ts_probe(struct i2c_client *client,
input_dev->dev.parent = &client->dev;
__set_bit(EV_ABS, input_dev->evbit);
-#ifdef CONFIG_SLP
- __set_bit(EV_KEY, input_dev->evbit);
- __set_bit(BTN_TOUCH, input_dev->keybit);
-#endif
__set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
input_mt_init_slots(input_dev, MAX_FINGERS);
- input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, MAX_WIDTH, 0, 0);
+ input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR,
+ 0, MAX_WIDTH, 0, 0);
input_set_abs_params(input_dev, ABS_MT_POSITION_X,
0, (info->max_x)-1, 0, 0);
input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
0, (info->max_y)-1, 0, 0);
-#ifdef CONFIG_SLP
- input_set_abs_params(input_dev, ABS_X, 0, info->max_x, 0, 0);
- input_set_abs_params(input_dev, ABS_Y, 0, info->max_y, 0, 0);
-#endif
input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
0, MAX_PRESSURE, 0, 0);
input_set_abs_params(input_dev, ABS_MT_TOUCH_MINOR,
@@ -3347,25 +3027,37 @@ static int __devinit mms_ts_probe(struct i2c_client *client,
info->dvfs_lock_status = false;
#endif
+ i2c_set_clientdata(client, info);
+ info->pdata->power(true);
+ msleep(100);
+
+ ret = i2c_master_recv(client, buf, 1);
+ if (ret < 0) { /* tsp connect check */
+ pr_err("%s: i2c fail...tsp driver unload [%d], Add[%d]\n",
+ __func__, ret, info->client->addr);
+ goto err_config;
+ }
+
+ ret = mms_ts_fw_load(info);
+/* ret = mms_ts_fw_info(info); */
+
+ if (ret) {
+ dev_err(&client->dev, "failed to initialize (%d)\n", ret);
+ goto err_config;
+ }
+
info->enabled = true;
+ info->callbacks.inform_charger = melfas_ta_cb;
+ if (info->register_cb)
+ info->register_cb(&info->callbacks);
#ifdef CONFIG_HAS_EARLYSUSPEND
-#if defined(CONFIG_TARGET_LOCALE_KOR)
- info->early_suspend.level = EARLY_SUSPEND_LEVEL_DISABLE_FB+1;
-#else
info->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
-#endif
info->early_suspend.suspend = mms_ts_early_suspend;
info->early_suspend.resume = mms_ts_late_resume;
register_early_suspend(&info->early_suspend);
#endif
-#ifdef CONFIG_INPUT_FBSUSPEND
- ret = tsp_register_fb(info);
- if (ret)
- pr_err("[TSP] Failed to register fb\n");
-#endif
-
sec_touchscreen = device_create(sec_class,
NULL, 0, info, "sec_touchscreen");
if (IS_ERR(sec_touchscreen)) {
@@ -3394,14 +3086,12 @@ static int __devinit mms_ts_probe(struct i2c_client *client,
#endif
return 0;
-err_reg_input_dev:
+err_config:
input_unregister_device(input_dev);
+err_reg_input_dev:
input_free_device(input_dev);
-err_config:
- //input_unregister_device(input_dev);
- //input_dev = NULL;
err_input_alloc:
- kfree(info->fw_name);
+ input_dev = NULL;
kfree(info);
err_alloc:
return ret;
@@ -3413,13 +3103,10 @@ static int __devexit mms_ts_remove(struct i2c_client *client)
struct mms_ts_info *info = i2c_get_clientdata(client);
unregister_early_suspend(&info->early_suspend);
-#ifdef CONFIG_INPUT_FBSUSPEND
- tsp_unregister_fb(info);
-#endif
+
if (info->irq >= 0)
free_irq(info->irq, info);
input_unregister_device(info->input_dev);
- kfree(info->fw_name);
kfree(info);
return 0;
@@ -3431,16 +3118,9 @@ static int mms_ts_suspend(struct device *dev)
struct i2c_client *client = to_i2c_client(dev);
struct mms_ts_info *info = i2c_get_clientdata(client);
- if (!info->enabled) {
-#ifdef CONFIG_INPUT_FBSUSPEND
- info->was_enabled_at_suspend = false;
-#endif
+ if (!info->enabled)
return 0;
- }
-#ifdef CONFIG_INPUT_FBSUSPEND
- info->was_enabled_at_suspend = true;
-#endif
dev_notice(&info->client->dev, "%s: users=%d\n", __func__,
info->input_dev->users);
@@ -3448,7 +3128,7 @@ static int mms_ts_suspend(struct device *dev)
info->enabled = false;
touch_is_pressed = 0;
release_all_fingers(info);
- info->pdata->power(0);
+ info->pdata->power(false);
/* This delay needs to prevent unstable POR by
rapid frequently pressing of PWR key. */
msleep(50);
@@ -3464,13 +3144,9 @@ static int mms_ts_resume(struct device *dev)
if (info->enabled)
return 0;
-#ifdef CONFIG_INPUT_FBSUSPEND
- if (!info->was_enabled_at_suspend)
- return 0;
-#endif
dev_notice(&info->client->dev, "%s: users=%d\n", __func__,
info->input_dev->users);
- info->pdata->power(1);
+ info->pdata->power(true);
msleep(120);
if (info->ta_status) {
@@ -3481,18 +3157,13 @@ static int mms_ts_resume(struct device *dev)
i2c_smbus_write_byte_data(info->client, 0x33, 0x2);
}
- mms_set_noise_mode(info);
-
/* Because irq_type by EXT_INTxCON register is changed to low_level
* after wakeup, irq_type set to falling edge interrupt again.
*/
- #if defined(CONFIG_TARGET_LOCALE_KOR)
- irq_set_irq_type(client->irq, IRQ_TYPE_EDGE_FALLING);
- msleep(20);
- #endif
enable_irq(info->irq);
info->enabled = true;
+ mms_set_noise_mode(info);
return 0;
}
#endif