Loading drivers/input/touchscreen/ft5x06_ts.c +2 −243 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ #include <linux/regulator/consumer.h> #include <linux/firmware.h> #include <linux/debugfs.h> #include <linux/sensors.h> #include <linux/input/ft5x06_ts.h> #include <linux/init.h> #include <linux/fs.h> Loading Loading @@ -80,19 +79,6 @@ #define FT_REG_FW_MIN_VER 0xB2 #define FT_REG_FW_SUB_MIN_VER 0xB3 /* psensor register address*/ #define FT_REG_PSENSOR_ENABLE 0xB0 #define FT_REG_PSENSOR_STATUS 0x01 /* psensor register bits*/ #define FT_PSENSOR_ENABLE_MASK 0x01 #define FT_PSENSOR_STATUS_NEAR 0xC0 #define FT_PSENSOR_STATUS_FAR 0xE0 #define FT_PSENSOR_FAR_TO_NEAR 0 #define FT_PSENSOR_NEAR_TO_FAR 1 #define FT_PSENSOR_ORIGINAL_STATE_FAR 1 #define FT_PSENSOR_WAKEUP_TIMEOUT 500 /* gesture register address*/ #define FT_REG_GESTURE_ENABLE 0xD0 #define FT_REG_GESTURE_OUTPUT 0xD3 Loading Loading @@ -251,7 +237,6 @@ struct ft5x06_ts_data { struct i2c_client *client; struct input_dev *input_dev; const struct ft5x06_ts_platform_data *pdata; struct ft5x06_psensor_platform_data *psensor_pdata; struct ft5x06_gesture_platform_data *gesture_pdata; struct regulator *vdd; struct regulator *vcc_i2c; Loading Loading @@ -281,29 +266,6 @@ struct ft5x06_ts_data { static int ft5x06_ts_start(struct device *dev); static int ft5x06_ts_stop(struct device *dev); static struct sensors_classdev __maybe_unused sensors_proximity_cdev = { .name = "ft5x06-proximity", .vendor = "FocalTech", .version = 1, .handle = SENSORS_PROXIMITY_HANDLE, .type = SENSOR_TYPE_PROXIMITY, .max_range = "5.0", .resolution = "5.0", .sensor_power = "0.1", .min_delay = 0, .fifo_reserved_event_count = 0, .fifo_max_event_count = 0, .enabled = 0, .delay_msec = 200, .sensors_enable = NULL, .sensors_poll_delay = NULL, }; static inline bool ft5x06_psensor_support_enabled(void) { return config_enabled(CONFIG_TOUCHSCREEN_FT5X06_PSENSOR); } static inline bool ft5x06_gesture_support_enabled(void) { return config_enabled(CONFIG_TOUCHSCREEN_FT5X06_GESTURE); Loading Loading @@ -384,84 +346,6 @@ static int ft5x0x_read_reg(struct i2c_client *client, u8 addr, u8 *val) return ft5x06_i2c_read(client, &addr, 1, val, 1); } #ifdef CONFIG_TOUCHSCREEN_FT5X06_PSENSOR static void ft5x06_psensor_enable(struct ft5x06_ts_data *data, int enable) { u8 state; int ret = -1; if (data->client == NULL) return; ft5x0x_read_reg(data->client, FT_REG_PSENSOR_ENABLE, &state); if (enable) state |= FT_PSENSOR_ENABLE_MASK; else state &= ~FT_PSENSOR_ENABLE_MASK; ret = ft5x0x_write_reg(data->client, FT_REG_PSENSOR_ENABLE, state); if (ret < 0) dev_err(&data->client->dev, "write psensor switch command failed\n"); } static int ft5x06_psensor_enable_set(struct sensors_classdev *sensors_cdev, unsigned int enable) { struct ft5x06_psensor_platform_data *psensor_pdata = container_of(sensors_cdev, struct ft5x06_psensor_platform_data, ps_cdev); struct ft5x06_ts_data *data = psensor_pdata->data; struct input_dev *input_dev = data->psensor_pdata->input_psensor_dev; mutex_lock(&input_dev->mutex); ft5x06_psensor_enable(data, enable); psensor_pdata->tp_psensor_data = FT_PSENSOR_ORIGINAL_STATE_FAR; if (enable) psensor_pdata->tp_psensor_opened = 1; else psensor_pdata->tp_psensor_opened = 0; mutex_unlock(&input_dev->mutex); return enable; } static int ft5x06_read_tp_psensor_data(struct ft5x06_ts_data *data) { u8 psensor_status; char tmp; int ret = 1; ft5x0x_read_reg(data->client, FT_REG_PSENSOR_STATUS, &psensor_status); tmp = data->psensor_pdata->tp_psensor_data; if (psensor_status == FT_PSENSOR_STATUS_NEAR) data->psensor_pdata->tp_psensor_data = FT_PSENSOR_FAR_TO_NEAR; else if (psensor_status == FT_PSENSOR_STATUS_FAR) data->psensor_pdata->tp_psensor_data = FT_PSENSOR_NEAR_TO_FAR; if (tmp != data->psensor_pdata->tp_psensor_data) { dev_dbg(&data->client->dev, "%s sensor data changed\n", __func__); ret = 0; } return ret; } #else static int ft5x06_psensor_enable_set(struct sensors_classdev *sensors_cdev, unsigned int enable) { return enable; } static int ft5x06_read_tp_psensor_data(struct ft5x06_ts_data *data) { return 0; } #endif #ifdef CONFIG_TOUCHSCREEN_FT5X06_GESTURE static ssize_t ft5x06_gesture_enable_to_set_show(struct device *dev, struct device_attribute *attr, char *buf) Loading Loading @@ -711,24 +595,6 @@ static irqreturn_t ft5x06_ts_interrupt(int irq, void *dev_id) ip_dev = data->input_dev; buf = data->tch_data; if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support && data->psensor_pdata->tp_psensor_opened) { rc = ft5x06_read_tp_psensor_data(data); if (!rc) { if (data->suspended) pm_wakeup_event(&data->client->dev, FT_PSENSOR_WAKEUP_TIMEOUT); input_report_abs(data->psensor_pdata->input_psensor_dev, ABS_DISTANCE, data->psensor_pdata->tp_psensor_data); input_sync(data->psensor_pdata->input_psensor_dev); if (data->suspended) return IRQ_HANDLED; } if (data->suspended) return IRQ_HANDLED; } if (ft5x06_gesture_support_enabled() && data->pdata->gesture_support) { ft5x0x_read_reg(data->client, FT_REG_GESTURE_ENABLE, &gesture_is_active); Loading Loading @@ -1190,18 +1056,6 @@ static int ft5x06_ts_suspend(struct device *dev) return 0; } if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support && device_may_wakeup(dev) && data->psensor_pdata->tp_psensor_opened) { err = enable_irq_wake(data->client->irq); if (err) dev_err(&data->client->dev, "%s: set_irq_wake failed\n", __func__); data->suspended = true; return err; } if (ft5x06_gesture_support_enabled() && data->pdata->gesture_support && device_may_wakeup(dev) && data->gesture_pdata->gesture_enable_to_set) { Loading @@ -1228,18 +1082,6 @@ static int ft5x06_ts_resume(struct device *dev) return 0; } if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support && device_may_wakeup(dev) && data->psensor_pdata->tp_psensor_opened) { err = disable_irq_wake(data->client->irq); if (err) dev_err(&data->client->dev, "%s: disable_irq_wake failed\n", __func__); data->suspended = false; return err; } if (ft5x06_gesture_support_enabled() && data->pdata->gesture_support && device_may_wakeup(dev) && !(data->gesture_pdata->in_pocket) && Loading Loading @@ -2073,9 +1915,6 @@ static int ft5x06_parse_dt(struct device *dev, pdata->ignore_id_check = of_property_read_bool(np, "focaltech,ignore-id-check"); pdata->psensor_support = of_property_read_bool(np, "focaltech,psensor-support"); pdata->gesture_support = of_property_read_bool(np, "focaltech,gesture-support"); Loading Loading @@ -2114,15 +1953,14 @@ static int ft5x06_ts_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct ft5x06_ts_platform_data *pdata; struct ft5x06_psensor_platform_data *psensor_pdata; struct ft5x06_gesture_platform_data *gesture_pdata; struct ft5x06_ts_data *data; struct input_dev *input_dev; struct input_dev *psensor_input_dev; struct dentry *temp; u8 reg_value; u8 reg_addr; int err, len; if (client->dev.of_node) { pdata = devm_kzalloc(&client->dev, sizeof(struct ft5x06_ts_platform_data), GFP_KERNEL); Loading Loading @@ -2286,55 +2124,6 @@ static int ft5x06_ts_probe(struct i2c_client *client, goto free_gpio; } if (data->pdata->psensor_support && data->pdata->gesture_support) { dev_err(&client->dev, "Unsupport psensor & gesture at the same time\n"); goto irq_free; } if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support) { device_init_wakeup(&client->dev, 1); psensor_pdata = devm_kzalloc(&client->dev, sizeof(struct ft5x06_psensor_platform_data), GFP_KERNEL); if (!psensor_pdata) { dev_err(&client->dev, "Failed to allocate memory\n"); goto irq_free; } data->psensor_pdata = psensor_pdata; psensor_input_dev = input_allocate_device(); if (!psensor_input_dev) { dev_err(&data->client->dev, "Failed to allocate device\n"); goto free_psensor_pdata; } __set_bit(EV_ABS, psensor_input_dev->evbit); input_set_abs_params(psensor_input_dev, ABS_DISTANCE, 0, 1, 0, 0); psensor_input_dev->name = "proximity"; psensor_input_dev->id.bustype = BUS_I2C; psensor_input_dev->dev.parent = &data->client->dev; data->psensor_pdata->input_psensor_dev = psensor_input_dev; err = input_register_device(psensor_input_dev); if (err) { dev_err(&data->client->dev, "Unable to register device, err=%d\n", err); goto free_psensor_input_dev; } psensor_pdata->ps_cdev = sensors_proximity_cdev; psensor_pdata->ps_cdev.sensors_enable = ft5x06_psensor_enable_set; psensor_pdata->data = data; err = sensors_classdev_register(&psensor_input_dev->dev, &psensor_pdata->ps_cdev); if (err) goto unregister_psensor_input_device; } if (ft5x06_gesture_support_enabled() && data->pdata->gesture_support) { device_init_wakeup(&client->dev, 1); gesture_pdata = devm_kzalloc(&client->dev, Loading @@ -2342,7 +2131,7 @@ static int ft5x06_ts_probe(struct i2c_client *client, GFP_KERNEL); if (!gesture_pdata) { dev_err(&client->dev, "Failed to allocate memory\n"); goto free_psensor_class_sysfs; goto free_gesture_dev; } data->gesture_pdata = gesture_pdata; gesture_pdata->data = data; Loading Loading @@ -2522,28 +2311,7 @@ free_gesture_pdata: devm_kfree(&client->dev, gesture_pdata); data->gesture_pdata = NULL; } free_psensor_class_sysfs: if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support) sensors_classdev_unregister(&psensor_pdata->ps_cdev); unregister_psensor_input_device: if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support) input_unregister_device(data->psensor_pdata->input_psensor_dev); free_psensor_input_dev: if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support) input_free_device(data->psensor_pdata->input_psensor_dev); free_psensor_pdata: if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support) { devm_kfree(&client->dev, psensor_pdata); data->psensor_pdata = NULL; } irq_free: if ((ft5x06_psensor_support_enabled() && data->pdata->psensor_support) || (ft5x06_gesture_support_enabled() && data->pdata->gesture_support)) device_init_wakeup(&client->dev, 0); free_irq(client->irq, data); free_gpio: if (gpio_is_valid(pdata->reset_gpio)) gpio_free(pdata->reset_gpio); Loading Loading @@ -2590,15 +2358,6 @@ static int ft5x06_ts_remove(struct i2c_client *client) data->gesture_pdata = NULL; } if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support) { device_init_wakeup(&client->dev, 0); sensors_classdev_unregister(&data->psensor_pdata->ps_cdev); input_unregister_device(data->psensor_pdata->input_psensor_dev); devm_kfree(&client->dev, data->psensor_pdata); data->psensor_pdata = NULL; } debugfs_remove_recursive(data->dir); device_remove_file(&client->dev, &dev_attr_force_update_fw); device_remove_file(&client->dev, &dev_attr_update_fw); Loading include/linux/input/ft5x06_ts.h +0 −9 Original line number Diff line number Diff line Loading @@ -34,14 +34,6 @@ struct fw_upgrade_info { u16 delay_erase_flash; }; struct ft5x06_psensor_platform_data { struct input_dev *input_psensor_dev; struct sensors_classdev ps_cdev; int tp_psensor_opened; char tp_psensor_data; /* 0 near, 1 far */ struct ft5x06_ts_data *data; }; struct ft5x06_gesture_platform_data { int gesture_enable_to_set; /* enable/disable gesture */ int in_pocket; /* whether in pocket mode or not */ Loading Loading @@ -76,7 +68,6 @@ struct ft5x06_ts_platform_data { bool no_force_update; bool i2c_pull_up; bool ignore_id_check; bool psensor_support; bool gesture_support; int (*power_init)(bool); int (*power_on)(bool); Loading Loading
drivers/input/touchscreen/ft5x06_ts.c +2 −243 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ #include <linux/regulator/consumer.h> #include <linux/firmware.h> #include <linux/debugfs.h> #include <linux/sensors.h> #include <linux/input/ft5x06_ts.h> #include <linux/init.h> #include <linux/fs.h> Loading Loading @@ -80,19 +79,6 @@ #define FT_REG_FW_MIN_VER 0xB2 #define FT_REG_FW_SUB_MIN_VER 0xB3 /* psensor register address*/ #define FT_REG_PSENSOR_ENABLE 0xB0 #define FT_REG_PSENSOR_STATUS 0x01 /* psensor register bits*/ #define FT_PSENSOR_ENABLE_MASK 0x01 #define FT_PSENSOR_STATUS_NEAR 0xC0 #define FT_PSENSOR_STATUS_FAR 0xE0 #define FT_PSENSOR_FAR_TO_NEAR 0 #define FT_PSENSOR_NEAR_TO_FAR 1 #define FT_PSENSOR_ORIGINAL_STATE_FAR 1 #define FT_PSENSOR_WAKEUP_TIMEOUT 500 /* gesture register address*/ #define FT_REG_GESTURE_ENABLE 0xD0 #define FT_REG_GESTURE_OUTPUT 0xD3 Loading Loading @@ -251,7 +237,6 @@ struct ft5x06_ts_data { struct i2c_client *client; struct input_dev *input_dev; const struct ft5x06_ts_platform_data *pdata; struct ft5x06_psensor_platform_data *psensor_pdata; struct ft5x06_gesture_platform_data *gesture_pdata; struct regulator *vdd; struct regulator *vcc_i2c; Loading Loading @@ -281,29 +266,6 @@ struct ft5x06_ts_data { static int ft5x06_ts_start(struct device *dev); static int ft5x06_ts_stop(struct device *dev); static struct sensors_classdev __maybe_unused sensors_proximity_cdev = { .name = "ft5x06-proximity", .vendor = "FocalTech", .version = 1, .handle = SENSORS_PROXIMITY_HANDLE, .type = SENSOR_TYPE_PROXIMITY, .max_range = "5.0", .resolution = "5.0", .sensor_power = "0.1", .min_delay = 0, .fifo_reserved_event_count = 0, .fifo_max_event_count = 0, .enabled = 0, .delay_msec = 200, .sensors_enable = NULL, .sensors_poll_delay = NULL, }; static inline bool ft5x06_psensor_support_enabled(void) { return config_enabled(CONFIG_TOUCHSCREEN_FT5X06_PSENSOR); } static inline bool ft5x06_gesture_support_enabled(void) { return config_enabled(CONFIG_TOUCHSCREEN_FT5X06_GESTURE); Loading Loading @@ -384,84 +346,6 @@ static int ft5x0x_read_reg(struct i2c_client *client, u8 addr, u8 *val) return ft5x06_i2c_read(client, &addr, 1, val, 1); } #ifdef CONFIG_TOUCHSCREEN_FT5X06_PSENSOR static void ft5x06_psensor_enable(struct ft5x06_ts_data *data, int enable) { u8 state; int ret = -1; if (data->client == NULL) return; ft5x0x_read_reg(data->client, FT_REG_PSENSOR_ENABLE, &state); if (enable) state |= FT_PSENSOR_ENABLE_MASK; else state &= ~FT_PSENSOR_ENABLE_MASK; ret = ft5x0x_write_reg(data->client, FT_REG_PSENSOR_ENABLE, state); if (ret < 0) dev_err(&data->client->dev, "write psensor switch command failed\n"); } static int ft5x06_psensor_enable_set(struct sensors_classdev *sensors_cdev, unsigned int enable) { struct ft5x06_psensor_platform_data *psensor_pdata = container_of(sensors_cdev, struct ft5x06_psensor_platform_data, ps_cdev); struct ft5x06_ts_data *data = psensor_pdata->data; struct input_dev *input_dev = data->psensor_pdata->input_psensor_dev; mutex_lock(&input_dev->mutex); ft5x06_psensor_enable(data, enable); psensor_pdata->tp_psensor_data = FT_PSENSOR_ORIGINAL_STATE_FAR; if (enable) psensor_pdata->tp_psensor_opened = 1; else psensor_pdata->tp_psensor_opened = 0; mutex_unlock(&input_dev->mutex); return enable; } static int ft5x06_read_tp_psensor_data(struct ft5x06_ts_data *data) { u8 psensor_status; char tmp; int ret = 1; ft5x0x_read_reg(data->client, FT_REG_PSENSOR_STATUS, &psensor_status); tmp = data->psensor_pdata->tp_psensor_data; if (psensor_status == FT_PSENSOR_STATUS_NEAR) data->psensor_pdata->tp_psensor_data = FT_PSENSOR_FAR_TO_NEAR; else if (psensor_status == FT_PSENSOR_STATUS_FAR) data->psensor_pdata->tp_psensor_data = FT_PSENSOR_NEAR_TO_FAR; if (tmp != data->psensor_pdata->tp_psensor_data) { dev_dbg(&data->client->dev, "%s sensor data changed\n", __func__); ret = 0; } return ret; } #else static int ft5x06_psensor_enable_set(struct sensors_classdev *sensors_cdev, unsigned int enable) { return enable; } static int ft5x06_read_tp_psensor_data(struct ft5x06_ts_data *data) { return 0; } #endif #ifdef CONFIG_TOUCHSCREEN_FT5X06_GESTURE static ssize_t ft5x06_gesture_enable_to_set_show(struct device *dev, struct device_attribute *attr, char *buf) Loading Loading @@ -711,24 +595,6 @@ static irqreturn_t ft5x06_ts_interrupt(int irq, void *dev_id) ip_dev = data->input_dev; buf = data->tch_data; if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support && data->psensor_pdata->tp_psensor_opened) { rc = ft5x06_read_tp_psensor_data(data); if (!rc) { if (data->suspended) pm_wakeup_event(&data->client->dev, FT_PSENSOR_WAKEUP_TIMEOUT); input_report_abs(data->psensor_pdata->input_psensor_dev, ABS_DISTANCE, data->psensor_pdata->tp_psensor_data); input_sync(data->psensor_pdata->input_psensor_dev); if (data->suspended) return IRQ_HANDLED; } if (data->suspended) return IRQ_HANDLED; } if (ft5x06_gesture_support_enabled() && data->pdata->gesture_support) { ft5x0x_read_reg(data->client, FT_REG_GESTURE_ENABLE, &gesture_is_active); Loading Loading @@ -1190,18 +1056,6 @@ static int ft5x06_ts_suspend(struct device *dev) return 0; } if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support && device_may_wakeup(dev) && data->psensor_pdata->tp_psensor_opened) { err = enable_irq_wake(data->client->irq); if (err) dev_err(&data->client->dev, "%s: set_irq_wake failed\n", __func__); data->suspended = true; return err; } if (ft5x06_gesture_support_enabled() && data->pdata->gesture_support && device_may_wakeup(dev) && data->gesture_pdata->gesture_enable_to_set) { Loading @@ -1228,18 +1082,6 @@ static int ft5x06_ts_resume(struct device *dev) return 0; } if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support && device_may_wakeup(dev) && data->psensor_pdata->tp_psensor_opened) { err = disable_irq_wake(data->client->irq); if (err) dev_err(&data->client->dev, "%s: disable_irq_wake failed\n", __func__); data->suspended = false; return err; } if (ft5x06_gesture_support_enabled() && data->pdata->gesture_support && device_may_wakeup(dev) && !(data->gesture_pdata->in_pocket) && Loading Loading @@ -2073,9 +1915,6 @@ static int ft5x06_parse_dt(struct device *dev, pdata->ignore_id_check = of_property_read_bool(np, "focaltech,ignore-id-check"); pdata->psensor_support = of_property_read_bool(np, "focaltech,psensor-support"); pdata->gesture_support = of_property_read_bool(np, "focaltech,gesture-support"); Loading Loading @@ -2114,15 +1953,14 @@ static int ft5x06_ts_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct ft5x06_ts_platform_data *pdata; struct ft5x06_psensor_platform_data *psensor_pdata; struct ft5x06_gesture_platform_data *gesture_pdata; struct ft5x06_ts_data *data; struct input_dev *input_dev; struct input_dev *psensor_input_dev; struct dentry *temp; u8 reg_value; u8 reg_addr; int err, len; if (client->dev.of_node) { pdata = devm_kzalloc(&client->dev, sizeof(struct ft5x06_ts_platform_data), GFP_KERNEL); Loading Loading @@ -2286,55 +2124,6 @@ static int ft5x06_ts_probe(struct i2c_client *client, goto free_gpio; } if (data->pdata->psensor_support && data->pdata->gesture_support) { dev_err(&client->dev, "Unsupport psensor & gesture at the same time\n"); goto irq_free; } if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support) { device_init_wakeup(&client->dev, 1); psensor_pdata = devm_kzalloc(&client->dev, sizeof(struct ft5x06_psensor_platform_data), GFP_KERNEL); if (!psensor_pdata) { dev_err(&client->dev, "Failed to allocate memory\n"); goto irq_free; } data->psensor_pdata = psensor_pdata; psensor_input_dev = input_allocate_device(); if (!psensor_input_dev) { dev_err(&data->client->dev, "Failed to allocate device\n"); goto free_psensor_pdata; } __set_bit(EV_ABS, psensor_input_dev->evbit); input_set_abs_params(psensor_input_dev, ABS_DISTANCE, 0, 1, 0, 0); psensor_input_dev->name = "proximity"; psensor_input_dev->id.bustype = BUS_I2C; psensor_input_dev->dev.parent = &data->client->dev; data->psensor_pdata->input_psensor_dev = psensor_input_dev; err = input_register_device(psensor_input_dev); if (err) { dev_err(&data->client->dev, "Unable to register device, err=%d\n", err); goto free_psensor_input_dev; } psensor_pdata->ps_cdev = sensors_proximity_cdev; psensor_pdata->ps_cdev.sensors_enable = ft5x06_psensor_enable_set; psensor_pdata->data = data; err = sensors_classdev_register(&psensor_input_dev->dev, &psensor_pdata->ps_cdev); if (err) goto unregister_psensor_input_device; } if (ft5x06_gesture_support_enabled() && data->pdata->gesture_support) { device_init_wakeup(&client->dev, 1); gesture_pdata = devm_kzalloc(&client->dev, Loading @@ -2342,7 +2131,7 @@ static int ft5x06_ts_probe(struct i2c_client *client, GFP_KERNEL); if (!gesture_pdata) { dev_err(&client->dev, "Failed to allocate memory\n"); goto free_psensor_class_sysfs; goto free_gesture_dev; } data->gesture_pdata = gesture_pdata; gesture_pdata->data = data; Loading Loading @@ -2522,28 +2311,7 @@ free_gesture_pdata: devm_kfree(&client->dev, gesture_pdata); data->gesture_pdata = NULL; } free_psensor_class_sysfs: if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support) sensors_classdev_unregister(&psensor_pdata->ps_cdev); unregister_psensor_input_device: if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support) input_unregister_device(data->psensor_pdata->input_psensor_dev); free_psensor_input_dev: if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support) input_free_device(data->psensor_pdata->input_psensor_dev); free_psensor_pdata: if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support) { devm_kfree(&client->dev, psensor_pdata); data->psensor_pdata = NULL; } irq_free: if ((ft5x06_psensor_support_enabled() && data->pdata->psensor_support) || (ft5x06_gesture_support_enabled() && data->pdata->gesture_support)) device_init_wakeup(&client->dev, 0); free_irq(client->irq, data); free_gpio: if (gpio_is_valid(pdata->reset_gpio)) gpio_free(pdata->reset_gpio); Loading Loading @@ -2590,15 +2358,6 @@ static int ft5x06_ts_remove(struct i2c_client *client) data->gesture_pdata = NULL; } if (ft5x06_psensor_support_enabled() && data->pdata->psensor_support) { device_init_wakeup(&client->dev, 0); sensors_classdev_unregister(&data->psensor_pdata->ps_cdev); input_unregister_device(data->psensor_pdata->input_psensor_dev); devm_kfree(&client->dev, data->psensor_pdata); data->psensor_pdata = NULL; } debugfs_remove_recursive(data->dir); device_remove_file(&client->dev, &dev_attr_force_update_fw); device_remove_file(&client->dev, &dev_attr_update_fw); Loading
include/linux/input/ft5x06_ts.h +0 −9 Original line number Diff line number Diff line Loading @@ -34,14 +34,6 @@ struct fw_upgrade_info { u16 delay_erase_flash; }; struct ft5x06_psensor_platform_data { struct input_dev *input_psensor_dev; struct sensors_classdev ps_cdev; int tp_psensor_opened; char tp_psensor_data; /* 0 near, 1 far */ struct ft5x06_ts_data *data; }; struct ft5x06_gesture_platform_data { int gesture_enable_to_set; /* enable/disable gesture */ int in_pocket; /* whether in pocket mode or not */ Loading Loading @@ -76,7 +68,6 @@ struct ft5x06_ts_platform_data { bool no_force_update; bool i2c_pull_up; bool ignore_id_check; bool psensor_support; bool gesture_support; int (*power_init)(bool); int (*power_on)(bool); Loading