/* sysfs: /sys/class/touch/cmcs/cs1_result */ ssize_t ist30xx_cs1_result_show(struct device *dev, struct device_attribute *attr, char *buf) { CMCS_INFO *cmcs = (CMCS_INFO *)&ts_cmcs->cmcs; if (cmcs_ready == CMCS_NOT_READY) return sprintf(buf, "CMCS test is not work!!\n"); if ((cmcs->cmd.mode) && !(cmcs->cmd.mode & FLAG_ENABLE_CS)) return 0; return print_cs_result(ts_cmcs_buf->cs1, buf, 1); }
/* sysfs: /sys/class/touch/cmcs/cs0_result */ ssize_t ist30xx_cs0_result_show(struct device *dev, struct device_attribute *attr, char *buf) { struct ist30xx_data *data = dev_get_drvdata(dev); CMCS_INFO *cmcs = (CMCS_INFO *)&data->cmcs->cmcs; if (data->cmcs_ready == CMCS_NOT_READY) return sprintf(buf, "CMCS test is not work!!\n"); if ((cmcs->cmd.mode) && !(cmcs->cmd.mode & FLAG_ENABLE_CS)) return 0; return print_cs_result(data, data->cmcs_buf->cs0, buf, 0); }
ssize_t ist30xx_cmcs_test_all_show(struct device *dev, struct device_attribute *attr, char *buf) { int ret; char* msg = NULL; struct ist30xx_data *data = dev_get_drvdata(dev); CMCS_INFO *cmcs = (CMCS_INFO *)&data->cmcs->cmcs; msg = kzalloc(sizeof(char) * 4096, GFP_KERNEL); if (!msg) { tsp_err("Memory allocation failed\n"); return 0; } /* CMCS Binary */ ret = ist30xx_load_cmcs_binary(data); if (unlikely(ret)) { kfree(msg); return sprintf(buf, "Binary loaded failed(%d).\n", data->cmcs_bin_size); } ist30xx_get_cmcs_info(data, data->cmcs_bin, data->cmcs_bin_size); mutex_lock(&data->ist30xx_mutex); ret = ist30xx_cmcs_test(data, data->cmcs_bin, data->cmcs_bin_size); mutex_unlock(&data->ist30xx_mutex); if (likely(data->cmcs_bin != NULL)) { kfree(data->cmcs_bin); data->cmcs_bin = NULL; data->cmcs_bin_size = 0; } if (ret == 0) { tsp_debug("CMCS Binary test passed!\n"); } else { kfree(msg); return sprintf(buf, "CMCS Binary test failed!\n"); } if ((cmcs->cmd.mode) && !(cmcs->cmd.mode & FLAG_ENABLE_CM) && !(cmcs->cmd.mode & FLAG_ENABLE_CS)) { kfree(msg); return sprintf(buf, "CMCS not enabled!\n"); } /* CM Result */ memset(msg, 0, sizeof(msg)); ret = print_cm_result(data, msg); if (strncmp(msg, "OK\n", strlen("OK\n")) == 0) { tsp_debug("CM result test passed!\n"); } else { goto out; } /* CM Slope 0 Result */ memset(msg, 0, sizeof(msg)); ret = print_cm_slope_result(data, CMCS_FLAG_CM_SLOPE0, data->cmcs_buf->slope0, msg); if (strncmp(msg, "OK\n", strlen("OK\n")) == 0) { tsp_debug("CM Slope 0 test passed!\n"); } else { goto out; } /* CM Slope 1 Result */ memset(msg, 0, sizeof(msg)); ret = print_cm_slope_result(data, CMCS_FLAG_CM_SLOPE1, data->cmcs_buf->slope1, msg); if (strncmp(msg, "OK\n", strlen("OK\n")) == 0) { tsp_debug("CM Slope 1 test passed!\n"); } else { goto out; } /* CS 0 Result */ memset(msg, 0, sizeof(msg)); ret = print_cs_result(data, data->cmcs_buf->cs0, msg, 0); if (strncmp(msg, "OK\n", strlen("OK\n")) == 0) { tsp_debug("CS 0 test passed!\n"); } else { goto out; } /* CS 1 Result */ memset(msg, 0, sizeof(msg)); ret = print_cs_result(data, data->cmcs_buf->cs1, msg, 1); if (strncmp(msg, "OK\n", strlen("OK\n")) == 0) { tsp_debug("CS 1 test passed!\n"); } else { goto out; } out: ret = sprintf(buf, "%s", msg); kfree(msg); return ret; }