diff options
| author | Shantanu Jain <shjain@codeaurora.org> | 2015-05-17 16:07:42 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-08-01 00:27:46 -0700 |
| commit | 2f1436b0338ae0a6c527c523c0167ba4a621b00a (patch) | |
| tree | ffa79184126e713f35f6f6cc0cd11d80b35fc8e8 /drivers/input | |
| parent | 1d948645a68b288c45cf8f35a8319ae8694acfa1 (diff) | |
input: touchscreen: clean ITE tech TS driver
Clean ITE tech touchscreen driver.
Structurize driver data members, replace standard logging
function calls & messages, change to proper function names,
change to proper variable names, remove unnecessary sysfs entry.
Change-Id: I02bcea18e93146b68aaeb8d81fa7bec67b5bcc73
Signed-off-by: Shantanu Jain <shjain@codeaurora.org>
Diffstat (limited to 'drivers/input')
| -rw-r--r-- | drivers/input/touchscreen/it7258_ts_i2c.c | 661 |
1 files changed, 315 insertions, 346 deletions
diff --git a/drivers/input/touchscreen/it7258_ts_i2c.c b/drivers/input/touchscreen/it7258_ts_i2c.c index 008c9372bc1b..5ab1a6d8f9b0 100644 --- a/drivers/input/touchscreen/it7258_ts_i2c.c +++ b/drivers/input/touchscreen/it7258_ts_i2c.c @@ -82,10 +82,6 @@ #define FW_WRITE_CHUNK_SIZE 128 #define FW_WRITE_RETRY_COUNT 4 #define CHIP_FLASH_SIZE 0x8000 -#define SYSFS_FW_UPLOAD_MODE_MANUAL 2 -#define SYSFS_RESULT_FAIL (-1) -#define SYSFS_RESULT_NOT_DONE 0 -#define SYSFS_RESULT_SUCCESS 1 #define DEVICE_READY_MAX_WAIT 500 /* result of reading with BUF_QUERY bits */ @@ -99,28 +95,6 @@ /* no new data but finder(s) still down */ #define BT_INFO_NONE_BUT_DOWN 0x08 -/* use this to include integers in commands */ -#define CMD_UINT16(v) ((uint8_t)(v)) , ((uint8_t)((v) >> 8)) - -/* Function declarations */ -static int fb_notifier_callback(struct notifier_block *self, - unsigned long event, void *data); -static int IT7260_ts_resume(struct device *dev); -static int IT7260_ts_suspend(struct device *dev); - -struct FingerData { - uint8_t xLo; - uint8_t hi; - uint8_t yLo; - uint8_t pressure; -} __packed; - -struct PointData { - uint8_t flags; - uint8_t palm; - struct FingerData fd[3]; -} __packed; - #define PD_FLAGS_DATA_TYPE_BITS 0xF0 /* other types (like chip-detected gestures) exist but we do not care */ #define PD_FLAGS_DATA_TYPE_TOUCH 0x00 @@ -142,6 +116,19 @@ struct PointData { #define IT_I2C_VTG_MIN_UV 2600000 #define IT_I2C_VTG_MAX_UV 3300000 +struct FingerData { + uint8_t xLo; + uint8_t hi; + uint8_t yLo; + uint8_t pressure; +} __packed; + +struct PointData { + uint8_t flags; + uint8_t palm; + struct FingerData fd[3]; +} __packed; + struct IT7260_ts_platform_data { u32 irqflags; u32 irq_gpio; @@ -162,21 +149,22 @@ struct IT7260_ts_data { bool device_needs_wakeup; bool suspended; struct work_struct work_pm_relax; + bool fw_upgrade_result; + bool calibration_success; + bool had_finger_down; #ifdef CONFIG_FB struct notifier_block fb_notif; #endif struct dentry *dir; }; -static int8_t fwUploadResult; -static int8_t calibrationWasSuccessful; -static bool devicePresent; -static bool hadFingerDown; -static struct input_dev *input_dev; -static struct IT7260_ts_data *gl_ts; +/* Function declarations */ +static int fb_notifier_callback(struct notifier_block *self, + unsigned long event, void *data); +static int IT7260_ts_resume(struct device *dev); +static int IT7260_ts_suspend(struct device *dev); -#define LOGE(...) pr_err(DEVICE_NAME ": " __VA_ARGS__) -#define LOGI(...) printk(DEVICE_NAME ": " __VA_ARGS__) +static struct IT7260_ts_data *gl_ts; static int IT7260_debug_suspend_set(void *_data, u64 val) { @@ -199,45 +187,48 @@ DEFINE_SIMPLE_ATTRIBUTE(debug_suspend_fops, IT7260_debug_suspend_get, IT7260_debug_suspend_set, "%lld\n"); /* internal use func - does not make sure chip is ready before read */ -static bool i2cReadNoReadyCheck(uint8_t bufferIndex, uint8_t *dataBuffer, - uint16_t dataLength) +static bool IT7260_i2cReadNoReadyCheck(uint8_t buf_index, uint8_t *buffer, + uint16_t buf_len) { struct i2c_msg msgs[2] = { { .addr = gl_ts->client->addr, .flags = I2C_M_NOSTART, .len = 1, - .buf = &bufferIndex + .buf = &buf_index }, { .addr = gl_ts->client->addr, .flags = I2C_M_RD, - .len = dataLength, - .buf = dataBuffer + .len = buf_len, + .buf = buffer } }; - memset(dataBuffer, 0xFF, dataLength); + memset(buffer, 0xFF, buf_len); return i2c_transfer(gl_ts->client->adapter, msgs, 2); } -static bool i2cWriteNoReadyCheck(uint8_t bufferIndex, - const uint8_t *dataBuffer, uint16_t dataLength) +static bool IT7260_i2cWriteNoReadyCheck(uint8_t buf_index, + const uint8_t *buffer, uint16_t buf_len) { uint8_t txbuf[257]; struct i2c_msg msg = { .addr = gl_ts->client->addr, .flags = 0, - .len = dataLength + 1, + .len = buf_len + 1, .buf = txbuf }; /* just to be careful */ - BUG_ON(dataLength > sizeof(txbuf) - 1); + if (buf_len > sizeof(txbuf) - 1) { + dev_err(&gl_ts->client->dev, "buf length is out of limit\n"); + return false; + } - txbuf[0] = bufferIndex; - memcpy(txbuf + 1, dataBuffer, dataLength); + txbuf[0] = buf_index; + memcpy(txbuf + 1, buffer, buf_len); return i2c_transfer(gl_ts->client->adapter, &msg, 1); } @@ -247,81 +238,83 @@ static bool i2cWriteNoReadyCheck(uint8_t bufferIndex, * register reads/writes. This function ascertains it is ready * for that too. the results of this call often were ignored. */ -static bool waitDeviceReady(bool forever, bool slowly) +static bool IT7260_waitDeviceReady(bool forever, bool slowly) { - uint8_t ucQuery; + uint8_t query; uint32_t count = DEVICE_READY_MAX_WAIT; do { - if (!i2cReadNoReadyCheck(BUF_QUERY, &ucQuery, sizeof(ucQuery))) - ucQuery = CMD_STATUS_BUSY; + if (!IT7260_i2cReadNoReadyCheck(BUF_QUERY, &query, + sizeof(query))) + query = CMD_STATUS_BUSY; if (slowly) mdelay(1000); if (!forever) count--; - } while ((ucQuery & CMD_STATUS_BUSY) && count); + } while ((query & CMD_STATUS_BUSY) && count); - return !ucQuery; + return !query; } -static bool i2cRead(uint8_t bufferIndex, uint8_t *dataBuffer, - uint16_t dataLength) +static bool IT7260_i2cRead(uint8_t buf_index, uint8_t *buffer, + uint16_t buf_len) { - waitDeviceReady(false, false); - return i2cReadNoReadyCheck(bufferIndex, dataBuffer, dataLength); + IT7260_waitDeviceReady(false, false); + return IT7260_i2cReadNoReadyCheck(buf_index, buffer, buf_len); } -static bool i2cWrite(uint8_t bufferIndex, const uint8_t *dataBuffer, - uint16_t dataLength) +static bool IT7260_i2cWrite(uint8_t buf_index, const uint8_t *buffer, + uint16_t buf_len) { - waitDeviceReady(false, false); - return i2cWriteNoReadyCheck(bufferIndex, dataBuffer, dataLength); + IT7260_waitDeviceReady(false, false); + return IT7260_i2cWriteNoReadyCheck(buf_index, buffer, buf_len); } -static bool chipFirmwareReinitialize(uint8_t cmdOfChoice) +static bool IT7260_chipFirmwareReinitialize(uint8_t command) { - uint8_t cmd[] = {cmdOfChoice}; + uint8_t cmd[] = {command}; uint8_t rsp[2]; - if (!i2cWrite(BUF_COMMAND, cmd, sizeof(cmd))) + if (!IT7260_i2cWrite(BUF_COMMAND, cmd, sizeof(cmd))) return false; - if (!i2cRead(BUF_RESPONSE, rsp, sizeof(rsp))) + if (!IT7260_i2cRead(BUF_RESPONSE, rsp, sizeof(rsp))) return false; /* a reply of two zero bytes signifies success */ return !rsp[0] && !rsp[1]; } -static bool chipFirmwareUpgradeModeEnterExit(bool enter) +static bool IT7260_chipFirmwareUpgradeModeEnterExit(bool enter) { uint8_t cmd[] = {CMD_FIRMWARE_UPGRADE, 0, 'I', 'T', '7', '2', '6', '0', 0x55, 0xAA}; uint8_t resp[2]; cmd[1] = enter ? FIRMWARE_MODE_ENTER : FIRMWARE_MODE_EXIT; - if (!i2cWrite(BUF_COMMAND, cmd, sizeof(cmd))) + if (!IT7260_i2cWrite(BUF_COMMAND, cmd, sizeof(cmd))) return false; - if (!i2cRead(BUF_RESPONSE, resp, sizeof(resp))) + if (!IT7260_i2cRead(BUF_RESPONSE, resp, sizeof(resp))) return false; /* a reply of two zero bytes signifies success */ return !resp[0] && !resp[1]; } -static bool chipSetStartOffset(uint16_t offset) +static bool IT7260_chipSetStartOffset(uint16_t offset) { - uint8_t cmd[] = {CMD_SET_START_OFFSET, 0, CMD_UINT16(offset)}; + uint8_t cmd[] = {CMD_SET_START_OFFSET, 0, ((uint8_t)(offset)), + ((uint8_t)((offset) >> 8))}; uint8_t resp[2]; - if (!i2cWrite(BUF_COMMAND, cmd, 4)) + if (!IT7260_i2cWrite(BUF_COMMAND, cmd, 4)) return false; - if (!i2cRead(BUF_RESPONSE, resp, sizeof(resp))) + if (!IT7260_i2cRead(BUF_RESPONSE, resp, sizeof(resp))) return false; @@ -330,90 +323,99 @@ static bool chipSetStartOffset(uint16_t offset) } -/* write fwLength bytes from fwData at chip offset writeStartOffset */ -static bool chipFlashWriteAndVerify(unsigned int fwLength, - const uint8_t *fwData, uint16_t writeStartOffset) +/* write fw_length bytes from fw_data at chip offset wr_start_offset */ +static bool IT7260_chipFlashWriteAndVerify(unsigned int fw_length, + const uint8_t *fw_data, uint16_t wr_start_offset) { - uint32_t curDataOfst; + uint32_t cur_data_off; - for (curDataOfst = 0; curDataOfst < fwLength; - curDataOfst += FW_WRITE_CHUNK_SIZE) { + for (cur_data_off = 0; cur_data_off < fw_length; + cur_data_off += FW_WRITE_CHUNK_SIZE) { - uint8_t cmdWrite[2 + FW_WRITE_CHUNK_SIZE] = {CMD_FW_WRITE}; - uint8_t bufRead[FW_WRITE_CHUNK_SIZE]; - uint8_t cmdRead[2] = {CMD_FW_READ}; - unsigned i, nRetries; - uint32_t curWriteSz; + uint8_t cmd_write[2 + FW_WRITE_CHUNK_SIZE] = {CMD_FW_WRITE}; + uint8_t buf_read[FW_WRITE_CHUNK_SIZE]; + uint8_t cmd_read[2] = {CMD_FW_READ}; + unsigned i, retries; + uint32_t cur_wr_size; /* figure out how much to write */ - curWriteSz = fwLength - curDataOfst; - if (curWriteSz > FW_WRITE_CHUNK_SIZE) - curWriteSz = FW_WRITE_CHUNK_SIZE; + cur_wr_size = fw_length - cur_data_off; + if (cur_wr_size > FW_WRITE_CHUNK_SIZE) + cur_wr_size = FW_WRITE_CHUNK_SIZE; /* prepare the write command */ - cmdWrite[1] = curWriteSz; - for (i = 0; i < curWriteSz; i++) - cmdWrite[i + 2] = fwData[curDataOfst + i]; + cmd_write[1] = cur_wr_size; + for (i = 0; i < cur_wr_size; i++) + cmd_write[i + 2] = fw_data[cur_data_off + i]; /* prepare the read command */ - cmdRead[1] = curWriteSz; + cmd_read[1] = cur_wr_size; - for (nRetries = 0; nRetries < FW_WRITE_RETRY_COUNT; - nRetries++) { + for (retries = 0; retries < FW_WRITE_RETRY_COUNT; + retries++) { /* set write offset and write the data */ - chipSetStartOffset(writeStartOffset + curDataOfst); - i2cWrite(BUF_COMMAND, cmdWrite, 2 + curWriteSz); + IT7260_chipSetStartOffset( + wr_start_offset + cur_data_off); + IT7260_i2cWrite(BUF_COMMAND, cmd_write, + cur_wr_size + 2); /* set offset and read the data back */ - chipSetStartOffset(writeStartOffset + curDataOfst); - i2cWrite(BUF_COMMAND, cmdRead, sizeof(cmdRead)); - i2cRead(BUF_RESPONSE, bufRead, curWriteSz); + IT7260_chipSetStartOffset( + wr_start_offset + cur_data_off); + IT7260_i2cWrite(BUF_COMMAND, cmd_read, + sizeof(cmd_read)); + IT7260_i2cRead(BUF_RESPONSE, buf_read, cur_wr_size); /* verify. If success break out of retry loop */ i = 0; - while (i < curWriteSz && bufRead[i] == cmdWrite[i + 2]) + while (i < cur_wr_size && + buf_read[i] == cmd_write[i + 2]) i++; - if (i == curWriteSz) + if (i == cur_wr_size) break; - pr_err("write of data offset %u failed on try %u at byte %u/%u\n", - curDataOfst, nRetries, i, curWriteSz); } /* if we've failed after all the retries, tell the caller */ - if (nRetries == FW_WRITE_RETRY_COUNT) + if (retries == FW_WRITE_RETRY_COUNT) { + dev_err(&gl_ts->client->dev, + "write of data offset %u failed on try %u at byte %u/%u\n", + cur_data_off, retries, i, cur_wr_size); return false; + } } return true; } -static bool chipFirmwareUpload(uint32_t fwLen, const uint8_t *fwData, - uint32_t cfgLen, const uint8_t *cfgData) +static bool IT7260_chipFirmwareUpload(uint32_t fw_len, const uint8_t *fw_data, + uint32_t cfg_len, const uint8_t *cfg_data) { bool success = false; /* enter fw upload mode */ - if (!chipFirmwareUpgradeModeEnterExit(true)) + if (!IT7260_chipFirmwareUpgradeModeEnterExit(true)) return false; /* flash the firmware if requested */ - if (fwLen && fwData && !chipFlashWriteAndVerify(fwLen, fwData, 0)) { - LOGE("failed to upload touch firmware\n"); + if (fw_len && fw_data && !IT7260_chipFlashWriteAndVerify(fw_len, + fw_data, 0)) { + dev_err(&gl_ts->client->dev, "failed to upload touch firmware\n"); goto out; } /* flash config data if requested */ - if (fwLen && fwData && !chipFlashWriteAndVerify(cfgLen, cfgData, - CHIP_FLASH_SIZE - cfgLen)) { - LOGE("failed to upload touch cfg data\n"); + if (cfg_len && cfg_data && !IT7260_chipFlashWriteAndVerify(cfg_len, + cfg_data, CHIP_FLASH_SIZE - cfg_len)) { + dev_err(&gl_ts->client->dev, "failed to upload touch cfg data\n"); goto out; } success = true; out: - return chipFirmwareUpgradeModeEnterExit(false) && - chipFirmwareReinitialize(CMD_FIRMWARE_REINIT_6F) && success; + return IT7260_chipFirmwareUpgradeModeEnterExit(false) && + IT7260_chipFirmwareReinitialize(CMD_FIRMWARE_REINIT_6F) && + success; } @@ -421,45 +423,50 @@ out: * both buffers should be VERSION_LENGTH in size, * but only a part of them is significant */ -static bool chipGetVersions(uint8_t *verFw, uint8_t *verCfg, bool logIt) +static bool IT7260_chipGetVersions(uint8_t *ver_fw, uint8_t *ver_cfg, + bool log_it) { /* * this code to get versions is reproduced as was written, but it does * not make sense. Something here *PROBABLY IS* wrong */ - static const uint8_t cmdReadFwVer[] = {CMD_READ_VERSIONS, VER_FIRMWARE}; - static const uint8_t cmdReadCfgVer[] = {CMD_READ_VERSIONS, VER_CONFIG}; + static const uint8_t cmd_read_fw_ver[] = {CMD_READ_VERSIONS, + VER_FIRMWARE}; + static const uint8_t cmd_read_cfg_ver[] = {CMD_READ_VERSIONS, + VER_CONFIG}; bool ret = true; /* * this structure is so that we definitely do all the calls, but still * return a status in case anyone cares */ - ret = i2cWrite(BUF_COMMAND, cmdReadFwVer, sizeof(cmdReadFwVer)) && ret; - ret = i2cRead(BUF_RESPONSE, verFw, VERSION_LENGTH) && ret; - ret = i2cWrite(BUF_COMMAND, cmdReadCfgVer, - sizeof(cmdReadCfgVer)) && ret; - ret = i2cRead(BUF_RESPONSE, verCfg, VERSION_LENGTH) && ret; - - if (logIt) - LOGI("current versions: fw@{%X,%X,%X,%X}, cfg@{%X,%X,%X,%X}\n", - verFw[5], verFw[6], verFw[7], verFw[8], - verCfg[1], verCfg[2], verCfg[3], verCfg[4]); + ret = IT7260_i2cWrite(BUF_COMMAND, cmd_read_fw_ver, + sizeof(cmd_read_fw_ver)) && ret; + ret = IT7260_i2cRead(BUF_RESPONSE, ver_fw, VERSION_LENGTH) && ret; + ret = IT7260_i2cWrite(BUF_COMMAND, cmd_read_cfg_ver, + sizeof(cmd_read_cfg_ver)) && ret; + ret = IT7260_i2cRead(BUF_RESPONSE, ver_cfg, VERSION_LENGTH) && ret; + + if (log_it) + dev_info(&gl_ts->client->dev, + "current versions: fw@{%X,%X,%X,%X}, cfg@{%X,%X,%X,%X}\n", + ver_fw[5], ver_fw[6], ver_fw[7], ver_fw[8], + ver_cfg[1], ver_cfg[2], ver_cfg[3], ver_cfg[4]); return ret; } static int IT7260_ts_chipLowPowerMode(bool low) { - static const uint8_t cmdGoSleep[] = {CMD_PWR_CTL, + static const uint8_t cmd_sleep[] = {CMD_PWR_CTL, 0x00, PWR_CTL_SLEEP_MODE}; uint8_t dummy; if (low) - i2cWriteNoReadyCheck(BUF_COMMAND, cmdGoSleep, - sizeof(cmdGoSleep)); + IT7260_i2cWriteNoReadyCheck(BUF_COMMAND, cmd_sleep, + sizeof(cmd_sleep)); else - i2cReadNoReadyCheck(BUF_QUERY, &dummy, sizeof(dummy)); + IT7260_i2cReadNoReadyCheck(BUF_QUERY, &dummy, sizeof(dummy)); return 0; } @@ -468,56 +475,56 @@ static ssize_t sysfsUpgradeStore(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { const struct firmware *fw, *cfg; - uint8_t verFw[10], verCfg[10]; - unsigned fwLen = 0, cfgLen = 0; - bool manualUpgrade, success; + uint8_t ver_fw[10], ver_cfg[10]; + unsigned fw_len = 0, cfg_len = 0; + bool success; int mode = 0, ret; ret = request_firmware(&fw, "it7260.fw", dev); if (ret) - LOGE("failed to get firmware for it7260\n"); + dev_dbg(dev, "failed to get firmware for it7260 %d\n", ret); else - fwLen = fw->size; + fw_len = fw->size; ret = request_firmware(&cfg, "it7260.cfg", dev); if (ret) - LOGE("failed to get config data for it7260\n"); + dev_dbg(dev, "failed to get config data for it7260 %d\n", ret); else - cfgLen = cfg->size; + cfg_len = cfg->size; ret = kstrtoint(buf, 10, &mode); - manualUpgrade = mode == SYSFS_FW_UPLOAD_MODE_MANUAL; - LOGI("firmware found %ub of fw and %ub of config in %s mode\n", - fwLen, cfgLen, manualUpgrade ? "manual" : "normal"); - - chipGetVersions(verFw, verCfg, true); - - fwUploadResult = SYSFS_RESULT_NOT_DONE; - if (fwLen && cfgLen) { - if (manualUpgrade || (verFw[5] < fw->data[8] || verFw[6] < - fw->data[9] || verFw[7] < fw->data[10] || verFw[8] < - fw->data[11]) || (verCfg[1] < cfg->data[cfgLen - 8] - || verCfg[2] < cfg->data[cfgLen - 7] || verCfg[3] < - cfg->data[cfgLen - 6] || - verCfg[4] < cfg->data[cfgLen - 5])){ - LOGI("firmware/config will be upgraded\n"); + + IT7260_chipGetVersions(ver_fw, ver_cfg, true); + + gl_ts->fw_upgrade_result = false; + if (fw_len && cfg_len) { + if ((mode > 0) && ((ver_fw[5] < fw->data[8] || + ver_fw[6] < fw->data[9] || + ver_fw[7] < fw->data[10] || + ver_fw[8] < fw->data[11]) || + (ver_cfg[1] < cfg->data[cfg_len - 8] || + ver_cfg[2] < cfg->data[cfg_len - 7] || + ver_cfg[3] < cfg->data[cfg_len - 6] || + ver_cfg[4] < cfg->data[cfg_len - 5]))) { + dev_info(dev, "firmware/config will be upgraded\n"); disable_irq(gl_ts->client->irq); - success = chipFirmwareUpload(fwLen, fw->data, cfgLen, - cfg->data); + /* upgrade the fw and cfg */ + success = IT7260_chipFirmwareUpload(fw_len, fw->data, + cfg_len, cfg->data); enable_irq(gl_ts->client->irq); - fwUploadResult = success ? - SYSFS_RESULT_SUCCESS : SYSFS_RESULT_FAIL; - LOGI("upload %s\n", success ? "success" : "failed"); + gl_ts->fw_upgrade_result = success; + dev_info(dev, "fw/cfg upload %s\n", + success ? "success" : "failed"); } else { - LOGI("firmware/config upgrade not needed\n"); + dev_info(dev, "firmware/config upgrade not needed\n"); } } - if (fwLen) + if (fw_len) release_firmware(fw); - if (cfgLen) + if (cfg_len) release_firmware(cfg); return count; @@ -526,19 +533,21 @@ static ssize_t sysfsUpgradeStore(struct device *dev, static ssize_t sysfsUpgradeShow(struct device *dev, struct device_attribute *attr, char *buf) { - return snprintf(buf, MAX_BUFFER_SIZE, "%d", fwUploadResult); + return snprintf(buf, MAX_BUFFER_SIZE, "%d", gl_ts->fw_upgrade_result); } static ssize_t sysfsCalibrationShow(struct device *dev, struct device_attribute *attr, char *buf) { - return snprintf(buf, MAX_BUFFER_SIZE, "%d", calibrationWasSuccessful); + return snprintf(buf, MAX_BUFFER_SIZE, "%d", gl_ts->calibration_success); } -static bool chipSendCalibrationCmd(bool autoTuneOn) +static bool IT7260_chipSendCalibrationCmd(bool auto_tune_on) { - uint8_t cmdCalibrate[] = {CMD_CALIBRATE, 0, autoTuneOn ? 1 : 0, 0, 0}; - return i2cWrite(BUF_COMMAND, cmdCalibrate, sizeof(cmdCalibrate)); + uint8_t cmd_calibrate[] = {CMD_CALIBRATE, 0, + auto_tune_on ? 1 : 0, 0, 0}; + return IT7260_i2cWrite(BUF_COMMAND, cmd_calibrate, + sizeof(cmd_calibrate)); } static ssize_t sysfsCalibrationStore(struct device *dev, @@ -546,45 +555,44 @@ static ssize_t sysfsCalibrationStore(struct device *dev, { uint8_t resp; - if (!chipSendCalibrationCmd(false)) - LOGE("failed to send calibration command\n"); - else { - calibrationWasSuccessful = - i2cRead(BUF_RESPONSE, &resp, sizeof(resp)) - ? SYSFS_RESULT_SUCCESS : SYSFS_RESULT_FAIL; + if (!IT7260_chipSendCalibrationCmd(false)) { + dev_err(dev, "failed to send calibration command\n"); + } else { + gl_ts->calibration_success = + IT7260_i2cRead(BUF_RESPONSE, &resp, sizeof(resp)); /* * previous logic that was here never called - * chipFirmwareReinitialize() due to checking a + * IT7260_chipFirmwareReinitialize() due to checking a * guaranteed-not-null value against null. We now * call it. Hopefully this is OK */ if (!resp) - LOGI("chipFirmwareReinitialize -> %s\n", - chipFirmwareReinitialize(CMD_FIRMWARE_REINIT_6F) + dev_dbg(dev, "IT7260_chipFirmwareReinitialize -> %s\n", + IT7260_chipFirmwareReinitialize(CMD_FIRMWARE_REINIT_6F) ? "success" : "fail"); } return count; } - +` static ssize_t sysfsPointShow(struct device *dev, struct device_attribute *attr, char *buf) { - uint8_t pointData[sizeof(struct PointData)]; + uint8_t point_data[sizeof(struct PointData)]; bool readSuccess; ssize_t ret; - readSuccess = i2cReadNoReadyCheck(BUF_POINT_INFO, pointData, - sizeof(pointData)); + readSuccess = IT7260_i2cReadNoReadyCheck(BUF_POINT_INFO, point_data, + sizeof(point_data)); ret = snprintf(buf, MAX_BUFFER_SIZE, "point_show read ret[%d]--point[%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][%x][%x]=\n", - readSuccess, pointData[0], pointData[1], pointData[2], - pointData[3], pointData[4], pointData[5], pointData[6], - pointData[7], pointData[8], pointData[9], pointData[10], - pointData[11], pointData[12], pointData[13]); + readSuccess, point_data[0], point_data[1], point_data[2], + point_data[3], point_data[4], point_data[5], point_data[6], + point_data[7], point_data[8], point_data[9], point_data[10], + point_data[11], point_data[12], point_data[13]); - LOGI("%s", buf); + dev_dbg(dev, "%s", buf); return ret; } @@ -595,37 +603,16 @@ static ssize_t sysfsPointStore(struct device *dev, return count; } -static ssize_t sysfsStatusShow(struct device *dev, - struct device_attribute *attr, char *buf) -{ - return snprintf(buf, MAX_BUFFER_SIZE, "%d\n", devicePresent ? 1 : 0); -} - -static ssize_t sysfsStatusStore(struct device *dev, - struct device_attribute *attr, const char *buf, size_t count) -{ - uint8_t verFw[10], verCfg[10]; - - chipGetVersions(verFw, verCfg, true); - - return count; -} - static ssize_t sysfsVersionShow(struct device *dev, struct device_attribute *attr, char *buf) { - uint8_t verFw[10], verCfg[10]; - - chipGetVersions(verFw, verCfg, false); - return snprintf(buf, MAX_BUFFER_SIZE, "%x,%x,%x,%x # %x,%x,%x,%x\n", - verFw[5], verFw[6], verFw[7], verFw[8], - verCfg[1], verCfg[2], verCfg[3], verCfg[4]); -} + uint8_t ver_fw[10], ver_cfg[10]; -static ssize_t sysfsVersionStore(struct device *dev, - struct device_attribute *attr, const char *buf, size_t count) -{ - return count; + IT7260_chipGetVersions(ver_fw, ver_cfg, false); + return snprintf(buf, MAX_BUFFER_SIZE, + "fw{%x,%x,%x,%x} # cfg{%x,%x,%x,%x}\n", + ver_fw[5], ver_fw[6], ver_fw[7], ver_fw[8], + ver_cfg[1], ver_cfg[2], ver_cfg[3], ver_cfg[4]); } static ssize_t sysfsSleepShow(struct device *dev, @@ -670,24 +657,10 @@ static ssize_t sysfsSleepStore(struct device *dev, return count; } -static DEVICE_ATTR(status, S_IRUGO|S_IWUSR|S_IWGRP, - sysfsStatusShow, sysfsStatusStore); -static DEVICE_ATTR(version, S_IRUGO|S_IWUSR|S_IWGRP, - sysfsVersionShow, sysfsVersionStore); -static DEVICE_ATTR(sleep, S_IRUGO|S_IWUSR|S_IWGRP, - sysfsSleepShow, sysfsSleepStore); - -static struct attribute *it7260_attrstatus[] = { - &dev_attr_status.attr, - &dev_attr_version.attr, - &dev_attr_sleep.attr, - NULL -}; - -static const struct attribute_group it7260_attrstatus_group = { - .attrs = it7260_attrstatus, -}; - +static DEVICE_ATTR(version, S_IRUGO | S_IWUSR, + sysfsVersionShow, NULL); +static DEVICE_ATTR(sleep, S_IRUGO | S_IWUSR, + sysfsSleepShow, sysfsSleepStore); static DEVICE_ATTR(calibration, S_IRUGO|S_IWUSR|S_IWGRP, sysfsCalibrationShow, sysfsCalibrationStore); static DEVICE_ATTR(upgrade, S_IRUGO|S_IWUSR|S_IWGRP, @@ -696,6 +669,8 @@ static DEVICE_ATTR(point, S_IRUGO|S_IWUSR|S_IWGRP, sysfsPointShow, sysfsPointStore); static struct attribute *it7260_attributes[] = { + &dev_attr_version.attr, + &dev_attr_sleep.attr, &dev_attr_calibration.attr, &dev_attr_upgrade.attr, &dev_attr_point.attr, @@ -706,22 +681,22 @@ static const struct attribute_group it7260_attr_group = { .attrs = it7260_attributes, }; -static void chipExternalCalibration(bool autoTuneEnabled) +static void IT7260_chipExternalCalibration(bool autoTuneEnabled) { uint8_t resp[2]; - LOGI("sent calibration command -> %d\n", - chipSendCalibrationCmd(autoTuneEnabled)); - waitDeviceReady(true, true); - i2cReadNoReadyCheck(BUF_RESPONSE, resp, sizeof(resp)); - chipFirmwareReinitialize(CMD_FIRMWARE_REINIT_C); + dev_dbg(&gl_ts->client->dev, "sent calibration command -> %d\n", + IT7260_chipSendCalibrationCmd(autoTuneEnabled)); + IT7260_waitDeviceReady(true, true); + IT7260_i2cReadNoReadyCheck(BUF_RESPONSE, resp, sizeof(resp)); + IT7260_chipFirmwareReinitialize(CMD_FIRMWARE_REINIT_C); } -void sendCalibrationCmd(void) +void IT7260_sendCalibrationCmd(void) { - chipExternalCalibration(false); + IT7260_chipExternalCalibration(false); } -EXPORT_SYMBOL(sendCalibrationCmd); +EXPORT_SYMBOL(IT7260_sendCalibrationCmd); static void IT7260_ts_release_all(void) { @@ -730,8 +705,8 @@ static void IT7260_ts_release_all(void) input_sync(gl_ts->input_dev); } -static void readFingerData(uint16_t *xP, uint16_t *yP, uint8_t *pressureP, - const struct FingerData *fd) +static void IT7260_readFingerData(uint16_t *xP, uint16_t *yP, + uint8_t *pressureP, const struct FingerData *fd) { uint16_t x = fd->xLo; uint16_t y = fd->yLo; @@ -749,14 +724,15 @@ static void readFingerData(uint16_t *xP, uint16_t *yP, uint8_t *pressureP, static irqreturn_t IT7260_ts_threaded_handler(int irq, void *devid) { - struct PointData pointData; - uint8_t devStatus; + struct PointData point_data; + uint8_t dev_status; bool palm_detected; uint8_t pressure = FD_PRESSURE_NONE; uint16_t x, y; - /* This code adds the touch-to-wake functioanlity to the ITE tech - * driver. When the device is in suspend driver, it sends the + /* + * This code adds the touch-to-wake functionality to the ITE tech + * driver. When the device is in suspend, driver sends the * KEY_WAKEUP event to wake the device. The pm_stay_awake() call * tells the pm core to stay awake until the CPU cores up already. The * schedule_work() call schedule a work that tells the pm core to relax @@ -773,25 +749,24 @@ static irqreturn_t IT7260_ts_threaded_handler(int irq, void *devid) } /* verify there is point data to read & it is readable and valid */ - i2cReadNoReadyCheck(BUF_QUERY, &devStatus, sizeof(devStatus)); - if (!((devStatus & PT_INFO_BITS) & PT_INFO_YES)) { + IT7260_i2cReadNoReadyCheck(BUF_QUERY, &dev_status, sizeof(dev_status)); + if (!((dev_status & PT_INFO_BITS) & PT_INFO_YES)) return IRQ_HANDLED; - } - if (!i2cReadNoReadyCheck(BUF_POINT_INFO, (void *)&pointData, - sizeof(pointData))) { + if (!IT7260_i2cReadNoReadyCheck(BUF_POINT_INFO, (void *)&point_data, + sizeof(point_data))) { dev_err(&gl_ts->client->dev, - "readTouchDataPoint() failed to read point data buffer\n"); + "failed to read point data buffer\n"); return IRQ_HANDLED; } - if ((pointData.flags & PD_FLAGS_DATA_TYPE_BITS) != + if ((point_data.flags & PD_FLAGS_DATA_TYPE_BITS) != PD_FLAGS_DATA_TYPE_TOUCH) { dev_err(&gl_ts->client->dev, - "readTouchDataPoint() dropping non-point data of type 0x%02X\n", - pointData.flags); + "dropping non-point data of type 0x%02X\n", + point_data.flags); return IRQ_HANDLED; } - palm_detected = pointData.palm & PD_PALM_FLAG_BIT; + palm_detected = point_data.palm & PD_PALM_FLAG_BIT; if (palm_detected && gl_ts->pdata->palm_detect_en) { input_report_key(gl_ts->input_dev, gl_ts->pdata->palm_detect_keycode, 1); @@ -801,14 +776,14 @@ static irqreturn_t IT7260_ts_threaded_handler(int irq, void *devid) input_sync(gl_ts->input_dev); } - if ((pointData.flags & PD_FLAGS_HAVE_FINGERS) & 1) - readFingerData(&x, &y, &pressure, pointData.fd); + if ((point_data.flags & PD_FLAGS_HAVE_FINGERS) & 1) + IT7260_readFingerData(&x, &y, &pressure, point_data.fd); if (pressure >= FD_PRESSURE_LIGHT) { - if (!hadFingerDown) - hadFingerDown = true; + if (!gl_ts->had_finger_down) + gl_ts->had_finger_down = true; - readFingerData(&x, &y, &pressure, pointData.fd); + IT7260_readFingerData(&x, &y, &pressure, point_data.fd); input_report_key(gl_ts->input_dev, BTN_TOUCH, 1); input_report_abs(gl_ts->input_dev, ABS_MT_POSITION_X, x); @@ -817,8 +792,8 @@ static irqreturn_t IT7260_ts_threaded_handler(int irq, void *devid) input_sync(gl_ts->input_dev); - } else if (hadFingerDown) { - hadFingerDown = false; + } else if (gl_ts->had_finger_down) { + gl_ts->had_finger_down = false; input_report_key(gl_ts->input_dev, BTN_TOUCH, 0); input_mt_sync(gl_ts->input_dev); @@ -833,40 +808,43 @@ static void IT7260_ts_work_func(struct work_struct *work) pm_relax(&gl_ts->client->dev); } -static bool chipIdentifyIT7260(void) +static bool IT7260_chipIdentify(void) { - static const uint8_t cmdIdent[] = {CMD_IDENT_CHIP}; - static const uint8_t expectedID[] = {0x0A, 'I', 'T', 'E', '7', + static const uint8_t cmd_ident[] = {CMD_IDENT_CHIP}; + static const uint8_t expected_id[] = {0x0A, 'I', 'T', 'E', '7', '2', '6', '0'}; - uint8_t chipID[10] = {0,}; + uint8_t chip_id[10] = {0,}; - waitDeviceReady(true, false); + IT7260_waitDeviceReady(true, false); - if (!i2cWriteNoReadyCheck(BUF_COMMAND, cmdIdent, sizeof(cmdIdent))) { - LOGE("i2cWrite() failed\n"); + if (!IT7260_i2cWriteNoReadyCheck(BUF_COMMAND, cmd_ident, + sizeof(cmd_ident))) { + dev_err(&gl_ts->client->dev, "failed to write CMD_IDENT_CHIP\n"); return false; } - waitDeviceReady(true, false); + IT7260_waitDeviceReady(true, false); - if (!i2cReadNoReadyCheck(BUF_RESPONSE, chipID, sizeof(chipID))) { - LOGE("i2cRead() failed\n"); + if (!IT7260_i2cReadNoReadyCheck(BUF_RESPONSE, chip_id, + sizeof(chip_id))) { + dev_err(&gl_ts->client->dev, "failed to read chip-id\n"); return false; } - LOGI("chipIdentifyIT7260 read id: %02X %c%c%c%c%c%c%ci %c%c\n", - chipID[0], chipID[1], chipID[2], chipID[3], chipID[4], - chipID[5], chipID[6], chipID[7], chipID[8], chipID[9]); + dev_info(&gl_ts->client->dev, + "IT7260_chipIdentify read id: %02X %c%c%c%c%c%c%c %c%c\n", + chip_id[0], chip_id[1], chip_id[2], chip_id[3], chip_id[4], + chip_id[5], chip_id[6], chip_id[7], chip_id[8], chip_id[9]); - if (memcmp(chipID, expectedID, sizeof(expectedID))) + if (memcmp(chip_id, expected_id, sizeof(expected_id))) return false; - if (chipID[8] == '5' && chipID[9] == '6') - LOGI("rev BX3 found\n"); - else if (chipID[8] == '6' && chipID[9] == '6') - LOGI("rev BX4 found\n"); + if (chip_id[8] == '5' && chip_id[9] == '6') + dev_info(&gl_ts->client->dev, "rev BX3 found\n"); + else if (chip_id[8] == '6' && chip_id[9] == '6') + dev_info(&gl_ts->client->dev, "rev BX4 found\n"); else - LOGI("unknown revision (0x%02X 0x%02X) found\n", - chipID[8], chipID[9]); + dev_info(&gl_ts->client->dev, "unknown revision (0x%02X 0x%02X) found\n", + chip_id[8], chip_id[9]); return true; } @@ -874,7 +852,7 @@ static bool chipIdentifyIT7260(void) static int IT7260_ts_probe(struct i2c_client *client, const struct i2c_device_id *id) { - static const uint8_t cmdStart[] = {CMD_UNKNOWN_7}; + static const uint8_t cmd_start[] = {CMD_UNKNOWN_7}; struct IT7260_ts_platform_data *pdata; uint8_t rsp[2]; int ret = -1; @@ -883,13 +861,13 @@ static int IT7260_ts_probe(struct i2c_client *client, struct dentry *temp; if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { - LOGE("need I2C_FUNC_I2C\n"); + dev_err(&client->dev, "need I2C_FUNC_I2C\n"); ret = -ENODEV; goto err_out; } if (!client->irq) { - LOGE("need IRQ\n"); + dev_err(&client->dev, "need IRQ\n"); ret = -ENODEV; goto err_out; } @@ -916,41 +894,41 @@ static int IT7260_ts_probe(struct i2c_client *client, return -ENOMEM; gl_ts->pdata = pdata; - if (sysfs_create_group(&(client->dev.kobj), &it7260_attrstatus_group)) { - dev_err(&client->dev, "failed to register sysfs #1\n"); - goto err_sysfs_grp_create_1; - } - gl_ts->vdd = regulator_get(&gl_ts->client->dev, "vdd"); + gl_ts->vdd = devm_regulator_get(&gl_ts->client->dev, "vdd"); if (IS_ERR(gl_ts->vdd)) { - dev_err(&gl_ts->client->dev, + dev_err(&client->dev, "Regulator get failed vdd\n"); gl_ts->vdd = NULL; } else { rc = regulator_set_voltage(gl_ts->vdd, IT_VTG_MIN_UV, IT_VTG_MAX_UV); - if (rc) - dev_err(&gl_ts->client->dev, - "Regulator set_vtg failed vdd\n"); + if (rc) { + dev_err(&client->dev, + "Regulator set_vtg failed vdd %d\n", rc); + return rc; + } } - gl_ts->avdd = regulator_get(&gl_ts->client->dev, "avdd"); + gl_ts->avdd = devm_regulator_get(&gl_ts->client->dev, "avdd"); if (IS_ERR(gl_ts->avdd)) { - dev_err(&gl_ts->client->dev, + dev_err(&client->dev, "Regulator get failed avdd\n"); gl_ts->avdd = NULL; } else { rc = regulator_set_voltage(gl_ts->avdd, IT_I2C_VTG_MIN_UV, IT_I2C_VTG_MAX_UV); - if (rc) - dev_err(&gl_ts->client->dev, - "Regulator get failed avdd\n"); + if (rc) { + dev_err(&client->dev, + "Regulator get failed avdd %d\n", rc); + return rc; + } } if (gl_ts->vdd) { rc = regulator_enable(gl_ts->vdd); if (rc) { - dev_err(&gl_ts->client->dev, + dev_err(&client->dev, "Regulator vdd enable failed rc=%d\n", rc); return rc; } @@ -959,7 +937,7 @@ static int IT7260_ts_probe(struct i2c_client *client, if (gl_ts->avdd) { rc = regulator_enable(gl_ts->avdd); if (rc) { - dev_err(&gl_ts->client->dev, + dev_err(&client->dev, "Regulator avdd enable failed rc=%d\n", rc); return rc; } @@ -970,12 +948,16 @@ static int IT7260_ts_probe(struct i2c_client *client, "ite,reset-gpio", 0, &pdata->reset_gpio_flags); if (gpio_is_valid(pdata->reset_gpio)) { - if (gpio_request(pdata->reset_gpio, "ite_reset_gpio")) - dev_err(&gl_ts->client->dev, + if (gpio_request(pdata->reset_gpio, "ite_reset_gpio")) { + dev_err(&client->dev, "gpio_request failed for reset GPIO\n"); - if (gpio_direction_output(pdata->reset_gpio, 0)) - dev_err(&gl_ts->client->dev, + return -EINVAL; + } + if (gpio_direction_output(pdata->reset_gpio, 0)) { + dev_err(&client->dev, "gpio_direction_output for reset GPIO\n"); + return -EINVAL; + } dev_dbg(&gl_ts->client->dev, "Reset GPIO %d\n", pdata->reset_gpio); } else { @@ -1008,34 +990,31 @@ static int IT7260_ts_probe(struct i2c_client *client, } } - if (!chipIdentifyIT7260()) { - LOGI("chipIdentifyIT7260 FAIL"); + if (!IT7260_chipIdentify()) { + dev_err(&client->dev, "Failed to identify chip!!!"); goto err_ident_fail_or_input_alloc; } - input_dev = input_allocate_device(); - if (!input_dev) { - LOGE("failed to allocate input device\n"); + gl_ts->input_dev = input_allocate_device(); + if (!gl_ts->input_dev) { + dev_err(&client->dev, "failed to allocate input device\n"); ret = -ENOMEM; goto err_ident_fail_or_input_alloc; } - gl_ts->input_dev = input_dev; - - input_dev->name = DEVICE_NAME; - input_dev->phys = "I2C"; - input_dev->id.bustype = BUS_I2C; - input_dev->id.vendor = 0x0001; - input_dev->id.product = 0x7260; - set_bit(EV_SYN, input_dev->evbit); - set_bit(EV_KEY, input_dev->evbit); - set_bit(EV_ABS, input_dev->evbit); - set_bit(INPUT_PROP_DIRECT,input_dev->propbit); - set_bit(BTN_TOUCH, input_dev->keybit); - set_bit(KEY_SLEEP,input_dev->keybit); - set_bit(KEY_POWER,input_dev->keybit); - input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, + + gl_ts->input_dev->name = DEVICE_NAME; + gl_ts->input_dev->phys = "I2C"; + gl_ts->input_dev->id.bustype = BUS_I2C; + gl_ts->input_dev->id.vendor = 0x0001; + gl_ts->input_dev->id.product = 0x7260; + set_bit(EV_SYN, gl_ts->input_dev->evbit); + set_bit(EV_KEY, gl_ts->input_dev->evbit); + set_bit(EV_ABS, gl_ts->input_dev->evbit); + set_bit(INPUT_PROP_DIRECT, gl_ts->input_dev->propbit); + set_bit(BTN_TOUCH, gl_ts->input_dev->keybit); + input_set_abs_params(gl_ts->input_dev, ABS_MT_POSITION_X, 0, SCREEN_X_RESOLUTION, 0, 0); - input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, + input_set_abs_params(gl_ts->input_dev, ABS_MT_POSITION_Y, 0, SCREEN_Y_RESOLUTION, 0, 0); input_set_drvdata(gl_ts->input_dev, gl_ts); @@ -1049,8 +1028,8 @@ static int IT7260_ts_probe(struct i2c_client *client, set_bit(gl_ts->pdata->palm_detect_keycode, gl_ts->input_dev->keybit); - if (input_register_device(input_dev)) { - LOGE("failed to register input device\n"); + if (input_register_device(gl_ts->input_dev)) { + dev_err(&client->dev, "failed to register input device\n"); goto err_input_register; } @@ -1074,11 +1053,9 @@ static int IT7260_ts_probe(struct i2c_client *client, ret); #endif - devicePresent = true; - - i2cWriteNoReadyCheck(BUF_COMMAND, cmdStart, sizeof(cmdStart)); + IT7260_i2cWriteNoReadyCheck(BUF_COMMAND, cmd_start, sizeof(cmd_start)); mdelay(10); - i2cReadNoReadyCheck(BUF_RESPONSE, rsp, sizeof(rsp)); + IT7260_i2cReadNoReadyCheck(BUF_RESPONSE, rsp, sizeof(rsp)); mdelay(10); gl_ts->dir = debugfs_create_dir(DEBUGFS_DIR_NAME, NULL); @@ -1115,21 +1092,18 @@ err_sysfs_grp_create_2: free_irq(client->irq, gl_ts); err_irq_reg: - input_unregister_device(input_dev); - input_dev = NULL; + input_unregister_device(gl_ts->input_dev); + gl_ts->input_dev = NULL; err_input_register: if (pdata->wakeup) { cancel_work_sync(&gl_ts->work_pm_relax); device_init_wakeup(&client->dev, false); } - if (input_dev) - input_free_device(input_dev); + if (gl_ts->input_dev) + input_free_device(gl_ts->input_dev); err_ident_fail_or_input_alloc: - sysfs_remove_group(&(client->dev.kobj), &it7260_attrstatus_group); - -err_sysfs_grp_create_1: kfree(gl_ts); err_out: @@ -1148,7 +1122,6 @@ static int IT7260_ts_remove(struct i2c_client *client) cancel_work_sync(&gl_ts->work_pm_relax); device_init_wakeup(&client->dev, false); } - devicePresent = false; return 0; } @@ -1182,11 +1155,9 @@ static int IT7260_ts_resume(struct device *dev) return 0; } - if (device_may_wakeup(dev)) { - if (gl_ts->device_needs_wakeup) { - gl_ts->device_needs_wakeup = false; - disable_irq_wake(gl_ts->client->irq); - } + if (device_may_wakeup(dev) && (gl_ts->device_needs_wakeup)) { + gl_ts->device_needs_wakeup = false; + disable_irq_wake(gl_ts->client->irq); return 0; } @@ -1205,11 +1176,9 @@ static int IT7260_ts_suspend(struct device *dev) return 0; } - if (device_may_wakeup(dev)) { - if (!gl_ts->device_needs_wakeup) { - gl_ts->device_needs_wakeup = true; - enable_irq_wake(gl_ts->client->irq); - } + if (device_may_wakeup(dev) && (!gl_ts->device_needs_wakeup)) { + gl_ts->device_needs_wakeup = true; + enable_irq_wake(gl_ts->client->irq); return 0; } |
