Loading drivers/input/touchscreen/synaptics_dsx/Kconfig +10 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,16 @@ config TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE To compile this driver as a module, choose M here: the module will be called synaptics_dsx_fw_update. config TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS bool "Synaptics DSX firmware update sysfs attributes" depends on TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE help Say Y here to enable support for sysfs attributes for performing firmware update in a development environment. This does not affect the core or other subsystem attributes. If unsure, say N. config TOUCHSCREEN_SYNAPTICS_DSX_TEST_REPORTING tristate "Synaptics DSX test reporting module" depends on TOUCHSCREEN_SYNAPTICS_DSX_CORE Loading drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.c +15 −6 Original line number Diff line number Diff line Loading @@ -4721,6 +4721,8 @@ static int synaptics_rmi4_suspend(struct device *dev) struct synaptics_rmi4_exp_fhandler *exp_fhandler; struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); unsigned char device_ctrl; const struct synaptics_dsx_board_data *bdata = rmi4_data->hw_if->board_data; if (rmi4_data->stay_awake) return 0; Loading Loading @@ -4763,9 +4765,10 @@ static int synaptics_rmi4_suspend(struct device *dev) synaptics_rmi4_free_fingers(rmi4_data); } if (rmi4_data->ts_pinctrl) pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_suspend); if (bdata->reset_gpio >= 0) { gpio_set_value(bdata->reset_gpio, bdata->reset_on_state); msleep(bdata->reset_active_ms); } synaptics_rmi4_enable_reg(rmi4_data, false); Loading @@ -4791,6 +4794,8 @@ static int synaptics_rmi4_resume(struct device *dev) struct synaptics_rmi4_exp_fhandler *exp_fhandler; struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); const struct synaptics_dsx_board_data *bdata = rmi4_data->hw_if->board_data; if (rmi4_data->stay_awake) return 0; Loading @@ -4802,9 +4807,13 @@ static int synaptics_rmi4_resume(struct device *dev) synaptics_rmi4_enable_reg(rmi4_data, true); if (rmi4_data->ts_pinctrl) pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_active); if (bdata->reset_gpio >= 0) { gpio_set_value(bdata->reset_gpio, bdata->reset_on_state); msleep(bdata->reset_active_ms); gpio_set_value(bdata->reset_gpio, !bdata->reset_on_state); msleep(bdata->reset_delay_ms); } rmi4_data->current_page = MASK_8BIT; Loading drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_fw_update.c +25 −0 Original line number Diff line number Diff line Loading @@ -138,6 +138,7 @@ static int fwu_do_reflash(void); static int fwu_recovery_check_status(void); #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static ssize_t fwu_sysfs_show_image(struct file *data_file, struct kobject *kobj, struct bin_attribute *attributes, char *buf, loff_t pos, size_t count); Loading Loading @@ -202,6 +203,8 @@ static ssize_t fwu_sysfs_read_lockdown_code_show(struct device *dev, struct device_attribute *attr, char *buf); #endif #endif enum f34_version { F34_V0 = 0, F34_V1, Loading Loading @@ -758,6 +761,7 @@ struct synaptics_rmi4_fwu_handle { struct work_struct fwu_work; }; #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static struct bin_attribute dev_attr_data = { .attr = { .name = "data", Loading @@ -767,8 +771,10 @@ static struct bin_attribute dev_attr_data = { .read = fwu_sysfs_show_image, .write = fwu_sysfs_store_image, }; #endif static struct device_attribute attrs[] = { #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS __ATTR(dorecovery, 0220, synaptics_rmi4_show_error, fwu_sysfs_do_recovery_store), Loading Loading @@ -822,13 +828,16 @@ static struct device_attribute attrs[] = { fwu_sysfs_read_lockdown_code_show, fwu_sysfs_write_lockdown_code_store), #endif #endif }; static struct synaptics_rmi4_fwu_handle *fwu; DECLARE_COMPLETION(fwu_remove_complete); #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS DEFINE_MUTEX(fwu_sysfs_mutex); #endif static void calculate_checksum(unsigned short *data, unsigned long len, unsigned long *result) Loading Loading @@ -3062,6 +3071,7 @@ static int fwu_check_dp_configuration_size(void) return 0; } #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static int fwu_check_pm_configuration_size(void) { unsigned short block_count; Loading @@ -3078,6 +3088,7 @@ static int fwu_check_pm_configuration_size(void) return 0; } #endif static int fwu_check_bl_configuration_size(void) { Loading Loading @@ -3445,6 +3456,7 @@ static int fwu_write_dp_configuration(void) return fwu_write_configuration(); } #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static int fwu_write_pm_configuration(void) { fwu->config_area = PM_CONFIG_AREA; Loading @@ -3470,6 +3482,7 @@ static int fwu_write_tddi_lockdown_data(void) return 0; } #endif #endif static int fwu_write_flash_configuration(void) { Loading Loading @@ -3758,6 +3771,7 @@ static int fwu_do_reflash(void) return retval; } #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static int fwu_do_read_config(void) { int retval; Loading Loading @@ -3985,6 +3999,7 @@ int set_tddi_lockdown_data(unsigned char *lockdown_data, unsigned short leng) return retval; } #endif #endif static int fwu_do_lockdown_v7(void) { Loading Loading @@ -4135,6 +4150,7 @@ static int fwu_do_restore_f51_cal_data(void) } #endif #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static int fwu_start_write_guest_code(void) { int retval; Loading Loading @@ -4340,6 +4356,7 @@ static int fwu_start_write_config(void) return retval; } #endif static int fwu_start_reflash(void) { Loading Loading @@ -4971,6 +4988,7 @@ static void fwu_startup_fw_update_work(struct work_struct *work) } #endif #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static ssize_t fwu_sysfs_show_image(struct file *data_file, struct kobject *kobj, struct bin_attribute *attributes, char *buf, loff_t pos, size_t count) Loading Loading @@ -5567,6 +5585,7 @@ static ssize_t fwu_sysfs_write_lockdown_code_store(struct device *dev, return count; } #endif #endif static void synaptics_rmi4_fwu_attn(struct synaptics_rmi4_data *rmi4_data, unsigned char intr_mask) { Loading Loading @@ -5669,6 +5688,7 @@ static int synaptics_rmi4_fwu_init(struct synaptics_rmi4_data *rmi4_data) if (ENABLE_SYS_REFLASH == false) return 0; #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS retval = sysfs_create_bin_file(&rmi4_data->input_dev->dev.kobj, &dev_attr_data); if (retval < 0) { Loading @@ -5677,6 +5697,7 @@ static int synaptics_rmi4_fwu_init(struct synaptics_rmi4_data *rmi4_data) __func__); goto exit_free_mem; } #endif for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { retval = sysfs_create_file(&rmi4_data->input_dev->dev.kobj, Loading @@ -5698,7 +5719,9 @@ static int synaptics_rmi4_fwu_init(struct synaptics_rmi4_data *rmi4_data) &attrs[attr_count].attr); } #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS sysfs_remove_bin_file(&rmi4_data->input_dev->dev.kobj, &dev_attr_data); #endif exit_free_mem: kfree(fwu->image_name); Loading Loading @@ -5740,7 +5763,9 @@ static void synaptics_rmi4_fwu_remove(struct synaptics_rmi4_data *rmi4_data) &attrs[attr_count].attr); } #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS sysfs_remove_bin_file(&rmi4_data->input_dev->dev.kobj, &dev_attr_data); #endif exit: complete(&fwu_remove_complete); Loading drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_i2c.c +3 −3 Original line number Diff line number Diff line Loading @@ -403,11 +403,11 @@ static int synaptics_rmi4_i2c_write(struct synaptics_rmi4_data *rmi4_data, struct i2c_client *i2c = to_i2c_client(rmi4_data->pdev->dev.parent); struct i2c_msg msg[2]; mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); retval = synaptics_rmi4_i2c_alloc_buf(rmi4_data, length + 1); if (retval < 0) return retval; mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); goto exit; retval = synaptics_rmi4_i2c_set_page(rmi4_data, addr); if (retval != PAGE_SELECT_LEN) { Loading drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_rmi_dev.c +25 −10 Original line number Diff line number Diff line Loading @@ -568,16 +568,22 @@ static ssize_t rmidev_read(struct file *filp, char __user *buf, return -EBADF; } if (count == 0) return 0; mutex_lock(&(dev_data->file_mutex)); if (*f_pos > REG_ADDR_LIMIT) { retval = -EFAULT; goto clean_up; } if (count > (REG_ADDR_LIMIT - *f_pos)) count = REG_ADDR_LIMIT - *f_pos; if (count == 0) { retval = 0; goto clean_up; } address = (unsigned short)(*f_pos); mutex_lock(&(dev_data->file_mutex)); rmidev_allocate_buffer(count); retval = synaptics_rmi4_reg_read(rmidev->rmi4_data, Loading Loading @@ -639,18 +645,26 @@ static ssize_t rmidev_write(struct file *filp, const char __user *buf, return -EBADF; } if (count == 0) return 0; mutex_lock(&(dev_data->file_mutex)); if (*f_pos > REG_ADDR_LIMIT) { retval = -EFAULT; goto unlock; } if (count > (REG_ADDR_LIMIT - *f_pos)) count = REG_ADDR_LIMIT - *f_pos; mutex_lock(&(dev_data->file_mutex)); if (count == 0) { retval = 0; goto unlock; } rmidev_allocate_buffer(count); if (copy_from_user(rmidev->tmpbuf, buf, count)) return -EFAULT; if (copy_from_user(rmidev->tmpbuf, buf, count)) { retval = -EFAULT; goto unlock; } retval = synaptics_rmi4_reg_write(rmidev->rmi4_data, *f_pos, Loading @@ -659,6 +673,7 @@ static ssize_t rmidev_write(struct file *filp, const char __user *buf, if (retval >= 0) *f_pos += retval; unlock: mutex_unlock(&(dev_data->file_mutex)); return retval; Loading Loading
drivers/input/touchscreen/synaptics_dsx/Kconfig +10 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,16 @@ config TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE To compile this driver as a module, choose M here: the module will be called synaptics_dsx_fw_update. config TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS bool "Synaptics DSX firmware update sysfs attributes" depends on TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE help Say Y here to enable support for sysfs attributes for performing firmware update in a development environment. This does not affect the core or other subsystem attributes. If unsure, say N. config TOUCHSCREEN_SYNAPTICS_DSX_TEST_REPORTING tristate "Synaptics DSX test reporting module" depends on TOUCHSCREEN_SYNAPTICS_DSX_CORE Loading
drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.c +15 −6 Original line number Diff line number Diff line Loading @@ -4721,6 +4721,8 @@ static int synaptics_rmi4_suspend(struct device *dev) struct synaptics_rmi4_exp_fhandler *exp_fhandler; struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); unsigned char device_ctrl; const struct synaptics_dsx_board_data *bdata = rmi4_data->hw_if->board_data; if (rmi4_data->stay_awake) return 0; Loading Loading @@ -4763,9 +4765,10 @@ static int synaptics_rmi4_suspend(struct device *dev) synaptics_rmi4_free_fingers(rmi4_data); } if (rmi4_data->ts_pinctrl) pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_suspend); if (bdata->reset_gpio >= 0) { gpio_set_value(bdata->reset_gpio, bdata->reset_on_state); msleep(bdata->reset_active_ms); } synaptics_rmi4_enable_reg(rmi4_data, false); Loading @@ -4791,6 +4794,8 @@ static int synaptics_rmi4_resume(struct device *dev) struct synaptics_rmi4_exp_fhandler *exp_fhandler; struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); const struct synaptics_dsx_board_data *bdata = rmi4_data->hw_if->board_data; if (rmi4_data->stay_awake) return 0; Loading @@ -4802,9 +4807,13 @@ static int synaptics_rmi4_resume(struct device *dev) synaptics_rmi4_enable_reg(rmi4_data, true); if (rmi4_data->ts_pinctrl) pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_active); if (bdata->reset_gpio >= 0) { gpio_set_value(bdata->reset_gpio, bdata->reset_on_state); msleep(bdata->reset_active_ms); gpio_set_value(bdata->reset_gpio, !bdata->reset_on_state); msleep(bdata->reset_delay_ms); } rmi4_data->current_page = MASK_8BIT; Loading
drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_fw_update.c +25 −0 Original line number Diff line number Diff line Loading @@ -138,6 +138,7 @@ static int fwu_do_reflash(void); static int fwu_recovery_check_status(void); #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static ssize_t fwu_sysfs_show_image(struct file *data_file, struct kobject *kobj, struct bin_attribute *attributes, char *buf, loff_t pos, size_t count); Loading Loading @@ -202,6 +203,8 @@ static ssize_t fwu_sysfs_read_lockdown_code_show(struct device *dev, struct device_attribute *attr, char *buf); #endif #endif enum f34_version { F34_V0 = 0, F34_V1, Loading Loading @@ -758,6 +761,7 @@ struct synaptics_rmi4_fwu_handle { struct work_struct fwu_work; }; #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static struct bin_attribute dev_attr_data = { .attr = { .name = "data", Loading @@ -767,8 +771,10 @@ static struct bin_attribute dev_attr_data = { .read = fwu_sysfs_show_image, .write = fwu_sysfs_store_image, }; #endif static struct device_attribute attrs[] = { #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS __ATTR(dorecovery, 0220, synaptics_rmi4_show_error, fwu_sysfs_do_recovery_store), Loading Loading @@ -822,13 +828,16 @@ static struct device_attribute attrs[] = { fwu_sysfs_read_lockdown_code_show, fwu_sysfs_write_lockdown_code_store), #endif #endif }; static struct synaptics_rmi4_fwu_handle *fwu; DECLARE_COMPLETION(fwu_remove_complete); #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS DEFINE_MUTEX(fwu_sysfs_mutex); #endif static void calculate_checksum(unsigned short *data, unsigned long len, unsigned long *result) Loading Loading @@ -3062,6 +3071,7 @@ static int fwu_check_dp_configuration_size(void) return 0; } #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static int fwu_check_pm_configuration_size(void) { unsigned short block_count; Loading @@ -3078,6 +3088,7 @@ static int fwu_check_pm_configuration_size(void) return 0; } #endif static int fwu_check_bl_configuration_size(void) { Loading Loading @@ -3445,6 +3456,7 @@ static int fwu_write_dp_configuration(void) return fwu_write_configuration(); } #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static int fwu_write_pm_configuration(void) { fwu->config_area = PM_CONFIG_AREA; Loading @@ -3470,6 +3482,7 @@ static int fwu_write_tddi_lockdown_data(void) return 0; } #endif #endif static int fwu_write_flash_configuration(void) { Loading Loading @@ -3758,6 +3771,7 @@ static int fwu_do_reflash(void) return retval; } #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static int fwu_do_read_config(void) { int retval; Loading Loading @@ -3985,6 +3999,7 @@ int set_tddi_lockdown_data(unsigned char *lockdown_data, unsigned short leng) return retval; } #endif #endif static int fwu_do_lockdown_v7(void) { Loading Loading @@ -4135,6 +4150,7 @@ static int fwu_do_restore_f51_cal_data(void) } #endif #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static int fwu_start_write_guest_code(void) { int retval; Loading Loading @@ -4340,6 +4356,7 @@ static int fwu_start_write_config(void) return retval; } #endif static int fwu_start_reflash(void) { Loading Loading @@ -4971,6 +4988,7 @@ static void fwu_startup_fw_update_work(struct work_struct *work) } #endif #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS static ssize_t fwu_sysfs_show_image(struct file *data_file, struct kobject *kobj, struct bin_attribute *attributes, char *buf, loff_t pos, size_t count) Loading Loading @@ -5567,6 +5585,7 @@ static ssize_t fwu_sysfs_write_lockdown_code_store(struct device *dev, return count; } #endif #endif static void synaptics_rmi4_fwu_attn(struct synaptics_rmi4_data *rmi4_data, unsigned char intr_mask) { Loading Loading @@ -5669,6 +5688,7 @@ static int synaptics_rmi4_fwu_init(struct synaptics_rmi4_data *rmi4_data) if (ENABLE_SYS_REFLASH == false) return 0; #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS retval = sysfs_create_bin_file(&rmi4_data->input_dev->dev.kobj, &dev_attr_data); if (retval < 0) { Loading @@ -5677,6 +5697,7 @@ static int synaptics_rmi4_fwu_init(struct synaptics_rmi4_data *rmi4_data) __func__); goto exit_free_mem; } #endif for (attr_count = 0; attr_count < ARRAY_SIZE(attrs); attr_count++) { retval = sysfs_create_file(&rmi4_data->input_dev->dev.kobj, Loading @@ -5698,7 +5719,9 @@ static int synaptics_rmi4_fwu_init(struct synaptics_rmi4_data *rmi4_data) &attrs[attr_count].attr); } #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS sysfs_remove_bin_file(&rmi4_data->input_dev->dev.kobj, &dev_attr_data); #endif exit_free_mem: kfree(fwu->image_name); Loading Loading @@ -5740,7 +5763,9 @@ static void synaptics_rmi4_fwu_remove(struct synaptics_rmi4_data *rmi4_data) &attrs[attr_count].attr); } #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_EXTRA_SYSFS sysfs_remove_bin_file(&rmi4_data->input_dev->dev.kobj, &dev_attr_data); #endif exit: complete(&fwu_remove_complete); Loading
drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_i2c.c +3 −3 Original line number Diff line number Diff line Loading @@ -403,11 +403,11 @@ static int synaptics_rmi4_i2c_write(struct synaptics_rmi4_data *rmi4_data, struct i2c_client *i2c = to_i2c_client(rmi4_data->pdev->dev.parent); struct i2c_msg msg[2]; mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); retval = synaptics_rmi4_i2c_alloc_buf(rmi4_data, length + 1); if (retval < 0) return retval; mutex_lock(&rmi4_data->rmi4_io_ctrl_mutex); goto exit; retval = synaptics_rmi4_i2c_set_page(rmi4_data, addr); if (retval != PAGE_SELECT_LEN) { Loading
drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_rmi_dev.c +25 −10 Original line number Diff line number Diff line Loading @@ -568,16 +568,22 @@ static ssize_t rmidev_read(struct file *filp, char __user *buf, return -EBADF; } if (count == 0) return 0; mutex_lock(&(dev_data->file_mutex)); if (*f_pos > REG_ADDR_LIMIT) { retval = -EFAULT; goto clean_up; } if (count > (REG_ADDR_LIMIT - *f_pos)) count = REG_ADDR_LIMIT - *f_pos; if (count == 0) { retval = 0; goto clean_up; } address = (unsigned short)(*f_pos); mutex_lock(&(dev_data->file_mutex)); rmidev_allocate_buffer(count); retval = synaptics_rmi4_reg_read(rmidev->rmi4_data, Loading Loading @@ -639,18 +645,26 @@ static ssize_t rmidev_write(struct file *filp, const char __user *buf, return -EBADF; } if (count == 0) return 0; mutex_lock(&(dev_data->file_mutex)); if (*f_pos > REG_ADDR_LIMIT) { retval = -EFAULT; goto unlock; } if (count > (REG_ADDR_LIMIT - *f_pos)) count = REG_ADDR_LIMIT - *f_pos; mutex_lock(&(dev_data->file_mutex)); if (count == 0) { retval = 0; goto unlock; } rmidev_allocate_buffer(count); if (copy_from_user(rmidev->tmpbuf, buf, count)) return -EFAULT; if (copy_from_user(rmidev->tmpbuf, buf, count)) { retval = -EFAULT; goto unlock; } retval = synaptics_rmi4_reg_write(rmidev->rmi4_data, *f_pos, Loading @@ -659,6 +673,7 @@ static ssize_t rmidev_write(struct file *filp, const char __user *buf, if (retval >= 0) *f_pos += retval; unlock: mutex_unlock(&(dev_data->file_mutex)); return retval; Loading