aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/touchscreen/synaptics_sysfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/touchscreen/synaptics_sysfs.c')
-rw-r--r--drivers/input/touchscreen/synaptics_sysfs.c866
1 files changed, 0 insertions, 866 deletions
diff --git a/drivers/input/touchscreen/synaptics_sysfs.c b/drivers/input/touchscreen/synaptics_sysfs.c
deleted file mode 100644
index 8aa6b88..0000000
--- a/drivers/input/touchscreen/synaptics_sysfs.c
+++ /dev/null
@@ -1,866 +0,0 @@
-/*
- * drivers/input/touchscreen/synaptics_sysfs.c
- *
- * Copyright (C) 2012 Samsung Electronics, Inc.
- *
- * This software is licensed under the terms of the GNU General Public
- * License version 2, as published by the Free Software Foundation, and
- * may be copied, distributed, and modified under those terms.
- *
- * 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.
- */
-
-#include <linux/uaccess.h>
-#include <linux/fs.h>
-#include <linux/synaptics_s7301.h>
-#include "synaptics_sysfs.h"
-
-const char *sec_sysfs_cmd_list[] = {
- "fw_update",
- "get_fw_ver_bin",
- "get_fw_ver_ic",
- "get_config_ver",
- "get_threshold",
- "module_off_master",
- "module_on_master",
- "get_chip_vendor",
- "get_chip_name",
- "get_x_num",
- "get_y_num",
- "run_rawcap_read",
- "run_rx_to_rx_read",
- "run_tx_to_tx_read",
- "run_tx_to_gnd_read",
- "get_rawcap",
- "get_rx_to_rx",
- "get_tx_to_tx",
- "get_tx_to_gnd"
-};
-
-static int synaptics_ts_load_fw(struct synaptics_drv_data *data)
-{
- struct file *fp;
- mm_segment_t old_fs;
- u16 fw_size, nread;
- int error = 0;
-
- old_fs = get_fs();
- set_fs(KERNEL_DS);
-
- fp = filp_open(SYNAPTICS_FW, O_RDONLY, S_IRUSR);
- if (IS_ERR(fp)) {
- printk(KERN_ERR "[TSP] failed to open %s.\n", SYNAPTICS_FW);
- error = -ENOENT;
- goto open_err;
- }
-
- fw_size = fp->f_path.dentry->d_inode->i_size;
- if (0 < fw_size) {
- u8 *fw_data;
- fw_data = kzalloc(fw_size, GFP_KERNEL);
- nread = vfs_read(fp, (char __user *)fw_data,
- fw_size, &fp->f_pos);
- printk(KERN_DEBUG "[TSP] start, file path %s, size %u Bytes\n",
- SYNAPTICS_FW, fw_size);
- if (nread != fw_size) {
- printk(KERN_ERR
- "[TSP] failed to read firmware file, nread %u Bytes\n",
- nread);
- error = -EIO;
- } else
- synaptics_fw_updater(data, fw_data);
-
- kfree(fw_data);
- }
-
- filp_close(fp, current->files);
- open_err:
- set_fs(old_fs);
- return error;
-}
-
-static int set_report_type(struct synaptics_drv_data *data, u8 command)
-{
- return synaptics_ts_write_data(data,
- data->f54.data_base_addr,
- command);
-}
-
-static int set_report_index(struct synaptics_drv_data *data, u16 index)
-{
- u8 buf[2];
- buf[0] = index & 0xff;
- buf[1] = (index & 0xff00) >> 8;
- return synaptics_ts_write_block(data,
- data->f54.data_base_addr + 1,
- buf, 2);
-}
-
-static void set_report_mode(struct synaptics_drv_data *data,
- u8 command, u8 result)
-{
- u8 buf, cnt = 0;
-
- synaptics_ts_write_data(data,
- data->f54.command_base_addr,
- command);
-
- /* Wait until the command is completed */
- do {
- msleep(20);
- synaptics_ts_read_data(data,
- data->f54.command_base_addr,
- &buf);
- if (cnt++ > 150) {
- printk(KERN_WARNING
- "[TSP] Fail - cmd : %u, result : %u\n",
- command, result);
- break;
- }
-
- } while (buf != result);
-}
-
-static void soft_reset(struct synaptics_drv_data *data)
-{
- u8 buf;
- synaptics_ts_write_data(data, 0xff, 0x00);
- synaptics_ts_write_data(data,
- data->f01.command_base_addr,
- 0x01);
-
- msleep(160);
-
- /* Read Interrupt status register to Interrupt line goes to high */
- synaptics_ts_read_data(data,
- data->f01.data_base_addr + 1,
- &buf);
-}
-
-static void check_all_raw_cap(struct synaptics_drv_data *data)
-{
- int i;
- u8 *buff;
- u16 temp = 0;
- u16 length = data->x_line * data->y_line * 2;
-
- buff = kzalloc(length, GFP_KERNEL);
- data->refer_min = 0xffff;
- data->refer_max = 0x0;
-
- /* set the index */
- set_report_index(data, 0x0000);
-
- /* Set the GetReport bit to run the AutoScan */
- set_report_mode(data, 0x01, 0x00);
-
- /* read all report data */
- synaptics_ts_read_block(data,
- data->f54.data_base_addr + 3,
- buff, length);
-
- for (i = 0; i < length; i += 2) {
- temp = (u16)(buff[i] | (buff[i+1] << 8));
- if (data->debug) {
- if ((temp <= FULL_RAW_CAP_LOWER_LIMIT)
- || (temp >= FULL_RAW_CAP_UPPER_LIMIT)) {
- printk(KERN_DEBUG
- "[TSP] raw cap[%d] : %u\n",
- i, temp);
- }
- }
- data->references[i / 2] = temp;
- if (temp < data->refer_min)
- data->refer_min = temp;
- if (temp > data->refer_max)
- data->refer_max = temp;
- }
- printk(KERN_DEBUG "[TSP] min : %u, max : %u\n",
- data->refer_min, data->refer_max);
-
- kfree(buff);
-}
-
-static void check_tx_to_tx(struct synaptics_drv_data *data)
-{
- int i = 0;
- u8 *buff;
- u8 length = (data->x_line / 8) + 1;
-
- buff = kzalloc(length, GFP_KERNEL);
-
- /* set the index */
- set_report_index(data, 0x0000);
-
- /* Set the GetReport bit to run the AutoScan */
- set_report_mode(data, 0x01, 0x00);
-
- synaptics_ts_read_block(data,
- data->f54.data_base_addr + 3,
- buff, length);
-
- /*
- * Byte-0 houses Tx responses Tx7:Tx0
- * Byte-1 houses Tx responses Tx15:Tx8
- * Byte-2 houses Tx responses Tx23:Tx16
- * Byte-3 houses Tx responses Tx31:Tx24
- */
- for (i = 0; i < data->x_line; i++) {
- if (buff[i / 8] & (0x1 << i % 8)) {
- data->tx_to_tx[i] = 0x1;
- printk(KERN_WARNING
- "[TSP] %s %d short\n",
- __func__, i);
- } else
- data->tx_to_tx[i] = 0x0;
- }
- kfree(buff);
-}
-
-static void check_tx_to_gnd(struct synaptics_drv_data *data)
-{
- int i = 0;
- u8 *buff;
- u8 length = (data->x_line / 8) + 1;
-
- buff = kzalloc(length, GFP_KERNEL);
-
- /* set the index */
- set_report_index(data, 0x0000);
-
- /* Set the GetReport bit to run the AutoScan */
- set_report_mode(data, 0x01, 0x00);
-
- synaptics_ts_read_block(data,
- data->f54.data_base_addr + 3,
- buff, length);
-
- /*
- * Byte-0 houses Tx responses Tx7:Tx0
- * Byte-1 houses Tx responses Tx15:Tx8
- * Byte-2 houses Tx responses Tx23:Tx16
- * Byte-3 houses Tx responses Tx31:Tx24
- */
- for (i = 0; i < data->x_line; i++) {
- if (buff[i / 8] & (0x1 << i % 8)) {
- data->tx_to_gnd[i] = 0x1;
- printk(KERN_WARNING
- "[TSP] %s %d short\n",
- __func__, i);
- } else
- data->tx_to_gnd[i] = 0x0;
- }
- kfree(buff);
-}
-
-static void check_rx_to_rx(struct synaptics_drv_data *data)
-{
- int i = 0, j = 0, k = 0;
- u8 *buff;
- u16 length = data->y_line * data->y_line * 2;
- u16 temp = 0;
-
- buff = kzalloc(length, GFP_KERNEL);
-
- /* disable the CBC setting */
- synaptics_ts_write_data(data,
- data->f54.control_base_addr + 8,
- 0x00);
-
- /* noCDM4 */
- synaptics_ts_write_data(data,
- data->f54.control_base_addr + 0xa6,
- 0x01);
-
- set_report_mode(data, 0x04, 0x00);
- set_report_mode(data, 0x02, 0x00);
-
- /* set the index */
- set_report_index(data, 0x0000);
-
- /* Set the GetReport bit to run the AutoScan */
- set_report_mode(data, 0x01, 0x00);
-
- /* read 1st rx_to_rx data */
- length = data->x_line * data->y_line * 2;
-
- synaptics_ts_read_block(data,
- data->f54.data_base_addr + 3,
- buff, length);
-
- for (i = 0, k = 0; i < data->x_line; i++) {
- for (j = 0; j < data->y_line; j++, k += 2) {
- temp = buff[k] | (buff[k+1] << 8);
- data->rx_to_rx[i][j] = temp;
- }
- }
-
- /* read 2nd rx_to_rx data */
- length = data->y_line *
- (data->y_line - data->x_line) * 2;
-
- set_report_type(data,
- REPORT_TYPE_RX_TO_RX2);
-
- /* set the index */
- set_report_index(data, 0x0000);
-
- set_report_mode(data, 0x01, 0x00);
-
- synaptics_ts_read_block(data,
- data->f54.data_base_addr + 3,
- buff, length);
-
- for (k = 0; i < data->y_line; i++) {
- for (j = 0; j < data->y_line; j++, k += 2) {
- temp = buff[k] | (buff[k+1] << 8);
- data->rx_to_rx[i][j] = temp;
- }
- }
-
- if (data->debug) {
- for (i = 0; i < data->y_line; i++) {
- printk("[TSP] line %d :", i);
- for (j = 0; j < data->y_line; j++)
- printk(" %d", (s16)(data->rx_to_rx[j][i]));
- printk("\n");
- }
- }
-
- /* to the calibration */
- set_report_mode(data, 0x02, 0x00);
-
- kfree(buff);
-}
-
-static void check_diagnostics_mode(struct synaptics_drv_data *data)
-{
- /* Set report mode */
- set_report_type(data, data->cmd_report_type);
-
- switch (data->cmd_report_type) {
- case REPORT_TYPE_RAW_CAP:
- check_all_raw_cap(data);
- break;
-
- case REPORT_TYPE_TX_TO_TX:
- check_tx_to_tx(data);
- break;
- case REPORT_TYPE_TX_TO_GND:
- check_tx_to_gnd(data);
- break;
-
- case REPORT_TYPE_RX_TO_RX:
- /* check the result */
- check_rx_to_rx(data);
- break;
-
- default:
- break;
- }
-
- /* Reset */
- soft_reset(data);
-}
-
-static u16 synaptics_get_threshold(struct synaptics_drv_data *data)
-{
- u8 tmp = 0;
- synaptics_ts_read_data(data,
- data->f11.control_base_addr + 10,
- &tmp);
- printk(KERN_DEBUG "[TSP] threshold : %u\n", tmp);
- return (u16)tmp;
-}
-
-static void synaptics_fw_phone(struct synaptics_drv_data *data,
- u8 *buf)
-{
- strncpy(buf, data->firm_version,
- sizeof(data->firm_version));
- printk(KERN_DEBUG "[TSP] firm phone : %s\n",
- data->firm_version);
-}
-
-static void synaptics_fw_panel(struct synaptics_drv_data *data,
- u8 *buf)
-{
-
- synaptics_ts_read_block(data,
- data->f34.control_base_addr,
- buf, 4);
-
- printk(KERN_DEBUG "[TSP] firm panel : %s\n", buf);
-}
-
-static void synaptics_fw_config(struct synaptics_drv_data *data,
- u8 *buf)
-{
-
- strncpy(buf, data->firm_config,
- sizeof(data->firm_config));
- printk(KERN_DEBUG "[TSP] config : %s\n",
- data->firm_config);
-}
-
-static int sec_fw_cmd(struct synaptics_drv_data *data,
- u32 type)
-{
- int ret = 0;
- switch (type) {
- case CMD_FW_CMD_BUILT_IN:
- ret = synaptics_fw_updater(data, NULL);
- break;
-
- case CMD_FW_CMD_UMS:
- ret = synaptics_ts_load_fw(data);
- break;
-
- default:
- break;
- }
-
- return ret;
-}
-
-static u16 get_value(struct synaptics_drv_data *data,
- u32 pos_x, u32 pos_y)
-{
- u16 tmp = 0;
- u16 position = (u16)(data->y_line * pos_x) + pos_y;
-
- switch (data->cmd_report_type) {
- case REPORT_TYPE_RAW_CAP:
- tmp = data->references[position];
- break;
-
- case REPORT_TYPE_TX_TO_TX:
- tmp = data->tx_to_tx[pos_x];
- break;
- case REPORT_TYPE_TX_TO_GND:
- tmp = data->tx_to_gnd[pos_x];
- break;
-
- case REPORT_TYPE_RX_TO_RX:
- tmp = data->rx_to_rx[pos_x][pos_y];
- break;
-
- default:
- break;
- }
-
- return tmp;
-}
-
-static int sec_sysfs_check_cmd(u8 *buf,
- u32 *param)
-{
- int cmd = 0;
- u8 cnt = 0, cnt2 = 0, start = 0;
- u8 end = strlen(buf);
- do {
- if (!strncmp(sec_sysfs_cmd_list[cmd],
- buf, strlen(sec_sysfs_cmd_list[cmd])))
- break;
- cmd++;
- } while (cmd < CMD_LIST_MAX);
-
- if (CMD_LIST_MAX == cmd)
- return cmd;
-
- printk(KERN_DEBUG
- "[TSP] mode : %s\n",
- sec_sysfs_cmd_list[cmd]);
-
- cnt = start = strlen(sec_sysfs_cmd_list[cmd]) + 1;
-
- while (cnt < end) {
- if ((buf[cnt] == ',') || cnt == end - 1) {
- u8 *tmp;
- int len = 0;
- len = cnt - start;
- if (cnt == end - 1)
- len++;
- tmp = kzalloc(len, GFP_KERNEL);
- memcpy(tmp, &buf[start], len);
- printk(KERN_DEBUG
- "[TSP] param[%u] : %s\n",
- cnt2, tmp);
- if (!kstrtouint(tmp, 10, &param[cnt2]))
- cnt2++;
- kfree(tmp);
- start = cnt + 1;
- }
- cnt++;
- }
-
- return cmd;
-}
-
-static void sec_sysfs_numstr(s16 data, u8 *str)
-{
- sprintf(str, "%d", data);
-}
-
-static void sec_sysfs_cmd(struct synaptics_drv_data *data,
- const char *str)
-{
- int cmd = 0, cnt = 0;
- int buf_size = 0, i = 0;
- int ret = 0;
- int irq = gpio_to_irq(data->gpio);
- u8 *buf, *buf2, *buf3;
- u8 *tmp_str[7];
- u16 temp = 0;
- u32 param[2] = {0,};
-
- buf = kzalloc(strlen(str), GFP_KERNEL);
- buf2 = kzalloc(8, GFP_KERNEL);
- buf3 = kzalloc(8, GFP_KERNEL);
- memset(data->cmd_result, 0x0, sizeof(data->cmd_result));
-
- sscanf(str, "%s", buf);
- cmd = sec_sysfs_check_cmd(buf, param);
-
- tmp_str[cnt++] = buf;
- tmp_str[cnt++] = ":";
-
- printk(KERN_DEBUG
- "[TSP] %s : %u, %u\n",
- __func__,
- param[0], param[1]);
-
- if (CMD_STATUS_WAITING == data->cmd_status)
- data->cmd_status = CMD_STATUS_RUNNING;
- else
- data->cmd_status = CMD_STATUS_WAITING;
-
- disable_irq(irq);
-
- switch (cmd) {
- case CMD_LIST_FW_UPDATE:
- ret = sec_fw_cmd(data, param[0]);
- if (ret)
- tmp_str[cnt++] = "FAIL";
- else
- tmp_str[cnt++] = "PASS";
- break;
-
- case CMD_LIST_FW_VER_BIN:
- synaptics_fw_phone(data, buf2);
- tmp_str[cnt++] = buf2;
- break;
-
- case CMD_LIST_FW_VER_IC:
- synaptics_fw_panel(data, buf2);
- tmp_str[cnt++] = buf2;
- break;
-
- case CMD_LIST_CONFIG_VER:
- synaptics_fw_config(data, buf2);
- tmp_str[cnt++] = buf2;
- break;
-
- case CMD_LIST_GET_THRESHOLD:
- temp = synaptics_get_threshold(data);
- sec_sysfs_numstr(temp, buf2);
- tmp_str[cnt++] = buf2;
- break;
-
- case CMD_LIST_POWER_OFF:
- ret = data->pdata->set_power(false);
- if (ret)
- tmp_str[cnt++] = "FAIL";
- else
- tmp_str[cnt++] = "PASS";
- break;
-
- case CMD_LIST_POWER_ON:
- ret = data->pdata->set_power(true);
- if (ret)
- tmp_str[cnt++] = "FAIL";
- else
- tmp_str[cnt++] = "PASS";
- break;
-
- case CMD_LIST_VENDOR:
- tmp_str[cnt++] = "Synaptics";
- break;
-
- case CMD_LIST_IC_NAME:
- tmp_str[cnt++] = "S7301";
- break;
-
- case CMD_LIST_X_SIZE:
- sec_sysfs_numstr(data->x_line, buf2);
- tmp_str[cnt++] = buf2;
- break;
-
- case CMD_LIST_Y_SIZE:
- sec_sysfs_numstr(data->y_line, buf2);
- tmp_str[cnt++] = buf2;
- break;
-
- case CMD_LIST_READ_REF:
- data->cmd_report_type = REPORT_TYPE_RAW_CAP;
- check_diagnostics_mode(data);
- sec_sysfs_numstr(data->refer_min, buf2);
- tmp_str[cnt++] = buf2;
- tmp_str[cnt++] = ",";
- sec_sysfs_numstr(data->refer_max, buf3);
- tmp_str[cnt++] = buf3;
- break;
-
- case CMD_LIST_READ_RX:
- data->cmd_report_type = REPORT_TYPE_RX_TO_RX;
- check_diagnostics_mode(data);
- break;
-
- case CMD_LIST_READ_TX:
- data->cmd_report_type = REPORT_TYPE_TX_TO_TX;
- check_diagnostics_mode(data);
- break;
-
- case CMD_LIST_READ_TXG:
- data->cmd_report_type = REPORT_TYPE_TX_TO_GND;
- check_diagnostics_mode(data);
- break;
-
- case CMD_LIST_GET_REF:
- data->cmd_report_type = REPORT_TYPE_RAW_CAP;
- temp = get_value(data, param[0], param[1]);
- sec_sysfs_numstr(temp, buf2);
- tmp_str[cnt++] = buf2;
- break;
-
- case CMD_LIST_GET_RX:
- data->cmd_report_type = REPORT_TYPE_RX_TO_RX;
- temp = get_value(data, param[0], param[1]);
- sec_sysfs_numstr(temp, buf2);
- tmp_str[cnt++] = buf2;
- break;
-
- case CMD_LIST_GET_TX:
- data->cmd_report_type = REPORT_TYPE_TX_TO_TX;
- temp = get_value(data, param[0], param[1]);
- sec_sysfs_numstr(temp, buf2);
- tmp_str[cnt++] = buf2;
- break;
-
- case CMD_LIST_GET_TXG:
- data->cmd_report_type = REPORT_TYPE_TX_TO_GND;
- temp = get_value(data, param[0], param[1]);
- sec_sysfs_numstr(temp, buf2);
- tmp_str[cnt++] = buf2;
- break;
-
- default:
- printk(KERN_DEBUG
- "[TSP] unkown mode : %s\n", buf);
- break;
- }
-
- enable_irq(irq);
-
- for (i = 0; i < cnt; i++) {
- if (buf_size < MAX_CMD_SIZE) {
- memcpy(&data->cmd_result[buf_size],
- tmp_str[i], strlen(tmp_str[i]));
- buf_size += strlen(tmp_str[i]);
- } else
- break;
- }
-
- if (cmd == CMD_LIST_MAX)
- data->cmd_status = CMD_STATUS_FAIL;
- else
- data->cmd_status = CMD_STATUS_OK;
-
- kfree(buf);
- kfree(buf2);
- kfree(buf3);
-}
-
-static void sec_sysfs_cmd_status(struct synaptics_drv_data *data)
-{
- u8 buf[8] = {0, };
- switch (data->cmd_status) {
- case CMD_STATUS_OK:
- strcpy(buf, "OK");
- break;
-
- case CMD_STATUS_FAIL:
- strcpy(buf, "FAIL");
- break;
-
- case CMD_STATUS_WAITING:
- strcpy(buf, "WAITING");
- break;
-
- case CMD_STATUS_RUNNING:
- strcpy(buf, "RUNNING");
- break;
-
- default:
- break;
- }
- data->cmd_temp = buf;
- printk(KERN_DEBUG
- "[TSP] unkown mode : %s\n", buf);
-}
-
-static ssize_t sec_sysfs_show_cmd_list(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- int i = 0, cnt = 0;
- for (i = 0; i < CMD_LIST_MAX; i++)
- cnt += sprintf(buf + cnt,
- "%s\n", sec_sysfs_cmd_list[i]);
- return cnt;
-}
-static void sec_sysfs_set_debug(struct synaptics_drv_data *data,
- const char *str)
-{
- u32 buf = 0;
- sscanf(str, "%u", &buf);
- data->debug = !!buf;
-}
-
-void synaptics_ts_drawing_mode(struct synaptics_drv_data *data)
-{
- u8 val = 0;
-#if 0
- u8 threshold = 0;
-#endif
- u16 addr = 0;
-
- addr = data->f11.control_base_addr;
- synaptics_ts_read_data(data, addr, &val);
-
- if (!data->drawing_mode) {
- val |= ABS_POS_BIT;
-#if 0
- threshold = 0x80;
-#endif
- printk(KERN_DEBUG
- "[TSP] set normal mode\n");
- } else {
- val &= ~(ABS_POS_BIT);
-#if 0
- threshold = 0x4d;
-#endif
- printk(KERN_DEBUG
- "[TSP] set drawing mode\n");
- }
- /* set ads pos filter */
- synaptics_ts_write_data(data, addr, val);
-#if 0
- /* set pixel threshold */
- addr = data->f54.control_base_addr + 4;
- synaptics_ts_write_data(data, addr, threshold);
-#endif
-}
-
-static void set_abs_pos_filter(struct synaptics_drv_data *data,
- const char *str)
-{
- u32 buf = 0;
- sscanf(str, "%u", &buf);
- data->drawing_mode = !buf;
- if (data->ready)
- synaptics_ts_drawing_mode(data);
-}
-
-#define SET_SHOW_FN(name, fn, format, ...) \
-static ssize_t sec_sysfs_show_##name(struct device *dev, \
- struct device_attribute *attr, \
- char *buf) \
-{ \
- struct synaptics_drv_data *data = dev_get_drvdata(dev); \
- fn; \
- return sprintf(buf, format "\n", ## __VA_ARGS__); \
-}
-
-#define SET_STORE_FN(name, fn) \
-static ssize_t sec_sysfs_store_##name(struct device *dev, \
- struct device_attribute *attr, \
- const char *buf, size_t size) \
-{ \
- struct synaptics_drv_data *data = dev_get_drvdata(dev); \
- fn(data, buf); \
- return size; \
-}
-
-SET_SHOW_FN(cmd_status,
- sec_sysfs_cmd_status(data),
- "%s", data->cmd_temp);
-SET_SHOW_FN(cmd_result,
- printk(KERN_DEBUG "[TSP] cmd result - %s\n",
- data->cmd_result),
- "%s", data->cmd_result);
-
-SET_STORE_FN(cmd, sec_sysfs_cmd);
-SET_STORE_FN(set_debug, sec_sysfs_set_debug);
-SET_STORE_FN(set_jitter, set_abs_pos_filter);
-
-static DEVICE_ATTR(cmd, S_IWUSR | S_IWGRP,
- NULL, sec_sysfs_store_cmd);
-static DEVICE_ATTR(cmd_status, S_IRUGO,
- sec_sysfs_show_cmd_status, NULL);
-static DEVICE_ATTR(cmd_result, S_IRUGO,
- sec_sysfs_show_cmd_result, NULL);
-static DEVICE_ATTR(cmd_list, S_IRUGO,
- sec_sysfs_show_cmd_list, NULL);
-static DEVICE_ATTR(set_debug, S_IWUSR,
- NULL, sec_sysfs_store_set_debug);
-static DEVICE_ATTR(set_jitter, S_IWUSR | S_IWGRP,
- NULL, sec_sysfs_store_set_jitter);
-
-static struct attribute *sec_sysfs_attributes[] = {
- &dev_attr_cmd.attr,
- &dev_attr_cmd_status.attr,
- &dev_attr_cmd_result.attr,
- &dev_attr_cmd_list.attr,
- &dev_attr_set_debug.attr,
- &dev_attr_set_jitter.attr,
- NULL,
-};
-
-static struct attribute_group sec_sysfs_attr_group = {
- .attrs = sec_sysfs_attributes,
-};
-
-int set_tsp_sysfs(struct synaptics_drv_data *data)
-{
- int ret = 0;
- u16 tmp = 0;
- tmp = data->x_line * data->y_line;
- data->references = kzalloc(tmp * sizeof(u16), GFP_KERNEL);
- data->tx_to_tx = kzalloc(data->x_line, GFP_KERNEL);
- data->tx_to_gnd = kzalloc(data->x_line, GFP_KERNEL);
-
- data->dev = device_create(sec_class, NULL, 0, data, "tsp");
- if (IS_ERR(data->dev)) {
- pr_err("[TSP] failed to create device for the sysfs\n");
- ret = -ENODEV;
- goto err_device_create;
- }
-
- ret = sysfs_create_group(&data->dev->kobj, &sec_sysfs_attr_group);
- if (ret) {
- pr_err("[TSP] failed to create sysfs group\n");
- goto err_device_create;
- }
- return 0;
-
-err_device_create:
- return ret;
-}
-
-MODULE_AUTHOR("junki671.min@samsung.com");
-MODULE_DESCRIPTION("sec sysfs for synaptics tsp");
-MODULE_LICENSE("GPL");
-