Loading drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.c +39 −32 Original line number Diff line number Diff line Loading @@ -46,7 +46,6 @@ #include <linux/input/mt.h> #endif #include <linux/msm_drm_notify.h> #include <linux/completion.h> #define INPUT_PHYS_NAME "synaptics_dsx/touch_input" Loading Loading @@ -129,7 +128,7 @@ static int synaptics_rmi4_reset_device(struct synaptics_rmi4_data *rmi4_data, bool rebuild); static int synaptics_rmi4_dsi_panel_notifier_cb(struct notifier_block *self, unsigned long event, void *data); struct drm_panel *active_panel; #ifdef CONFIG_HAS_EARLYSUSPEND #ifndef CONFIG_FB #define USE_EARLYSUSPEND Loading Loading @@ -4282,14 +4281,16 @@ static int synaptics_rmi4_probe(struct platform_device *pdev) rmi4_data->initialized = false; rmi4_data->fb_notifier.notifier_call = synaptics_rmi4_dsi_panel_notifier_cb; retval = msm_drm_register_client(&rmi4_data->fb_notifier); if (active_panel) { retval = drm_panel_notifier_register(active_panel, &rmi4_data->fb_notifier); if (retval < 0) { dev_err(&pdev->dev, "%s: Failed to register fb notifier client\n", __func__); goto err_drm_reg; } } rmi4_data->rmi4_probe_wq = create_singlethread_workqueue( "Synaptics_rmi4_probe_wq"); if (!rmi4_data->rmi4_probe_wq) { Loading @@ -4304,7 +4305,9 @@ static int synaptics_rmi4_probe(struct platform_device *pdev) return retval; err_probe_wq: msm_drm_unregister_client(&rmi4_data->fb_notifier); if (active_panel) drm_panel_notifier_unregister(active_panel, &rmi4_data->fb_notifier); err_drm_reg: kfree(rmi4_data); Loading Loading @@ -4536,7 +4539,9 @@ static void synaptics_rmi4_defer_probe(struct work_struct *work) err_get_reg: err_drm_init_wait: msm_drm_unregister_client(&rmi4_data->fb_notifier); if (active_panel) drm_panel_notifier_unregister(active_panel, &rmi4_data->fb_notifier); cancel_work_sync(&rmi4_data->rmi4_probe_work); destroy_workqueue(rmi4_data->rmi4_probe_wq); kfree(rmi4_data); Loading Loading @@ -4576,7 +4581,9 @@ static int synaptics_rmi4_remove(struct platform_device *pdev) synaptics_rmi4_irq_enable(rmi4_data, false, false); msm_drm_unregister_client(&rmi4_data->fb_notifier); if (active_panel) drm_panel_notifier_unregister(active_panel, &rmi4_data->fb_notifier); #ifdef USE_EARLYSUSPEND unregister_early_suspend(&rmi4_data->early_suspend); Loading Loading @@ -4624,18 +4631,18 @@ static int synaptics_rmi4_dsi_panel_notifier_cb(struct notifier_block *self, unsigned long event, void *data) { int transition; struct msm_drm_notifier *evdata = data; struct drm_panel_notifier *evdata = data; struct synaptics_rmi4_data *rmi4_data = container_of(self, struct synaptics_rmi4_data, fb_notifier); if (!evdata || (evdata->id != 0)) if (!evdata) return 0; if (evdata && evdata->data && rmi4_data) { if (event == MSM_DRM_EARLY_EVENT_BLANK) { if (event == DRM_PANEL_EARLY_EVENT_BLANK) { transition = *(int *)evdata->data; if (transition == MSM_DRM_BLANK_POWERDOWN) { if (transition == DRM_PANEL_BLANK_POWERDOWN) { if (rmi4_data->initialized) synaptics_rmi4_suspend( &rmi4_data->pdev->dev); Loading @@ -4645,9 +4652,9 @@ static int synaptics_rmi4_dsi_panel_notifier_cb(struct notifier_block *self, } if (evdata && evdata->data && rmi4_data) { if (event == MSM_DRM_EVENT_BLANK) { if (event == DRM_PANEL_EVENT_BLANK) { transition = *(int *)evdata->data; if (transition == MSM_DRM_BLANK_UNBLANK) { if (transition == DRM_PANEL_BLANK_UNBLANK) { if (rmi4_data->initialized) synaptics_rmi4_resume( &rmi4_data->pdev->dev); Loading drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.h +4 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,8 @@ #include <linux/earlysuspend.h> #endif #include <drm/drm_panel.h> #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38)) #define KERNEL_ABOVE_2_6_38 #endif Loading Loading @@ -133,6 +135,8 @@ enum exp_fn { RMI_LAST, }; extern struct drm_panel *active_panel; /* * struct synaptics_rmi4_fn_desc - function descriptor fields in PDT entry * @query_base_addr: base address for query registers Loading drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_i2c.c +28 −0 Original line number Diff line number Diff line Loading @@ -451,6 +451,30 @@ static int synaptics_rmi4_i2c_write(struct synaptics_rmi4_data *rmi4_data, return retval; } int check_dt(struct device_node *np) { int i; int count; struct device_node *node; struct drm_panel *panel; count = of_count_phandle_with_args(np, "panel", NULL); if (count <= 0) return 0; for (i = 0; i < count; i++) { node = of_parse_phandle(np, "panel", i); panel = of_drm_find_panel(node); of_node_put(node); if (!IS_ERR(panel)) { active_panel = panel; return 0; } } return -ENODEV; } static struct synaptics_dsx_bus_access bus_access = { .type = BUS_I2C, .read = synaptics_rmi4_i2c_read, Loading @@ -466,6 +490,10 @@ static int synaptics_rmi4_i2c_probe(struct i2c_client *client, const struct i2c_device_id *dev_id) { int retval; if (check_dt(client->dev.of_node)) return -ENODEV; if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { dev_err(&client->dev, Loading Loading
drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.c +39 −32 Original line number Diff line number Diff line Loading @@ -46,7 +46,6 @@ #include <linux/input/mt.h> #endif #include <linux/msm_drm_notify.h> #include <linux/completion.h> #define INPUT_PHYS_NAME "synaptics_dsx/touch_input" Loading Loading @@ -129,7 +128,7 @@ static int synaptics_rmi4_reset_device(struct synaptics_rmi4_data *rmi4_data, bool rebuild); static int synaptics_rmi4_dsi_panel_notifier_cb(struct notifier_block *self, unsigned long event, void *data); struct drm_panel *active_panel; #ifdef CONFIG_HAS_EARLYSUSPEND #ifndef CONFIG_FB #define USE_EARLYSUSPEND Loading Loading @@ -4282,14 +4281,16 @@ static int synaptics_rmi4_probe(struct platform_device *pdev) rmi4_data->initialized = false; rmi4_data->fb_notifier.notifier_call = synaptics_rmi4_dsi_panel_notifier_cb; retval = msm_drm_register_client(&rmi4_data->fb_notifier); if (active_panel) { retval = drm_panel_notifier_register(active_panel, &rmi4_data->fb_notifier); if (retval < 0) { dev_err(&pdev->dev, "%s: Failed to register fb notifier client\n", __func__); goto err_drm_reg; } } rmi4_data->rmi4_probe_wq = create_singlethread_workqueue( "Synaptics_rmi4_probe_wq"); if (!rmi4_data->rmi4_probe_wq) { Loading @@ -4304,7 +4305,9 @@ static int synaptics_rmi4_probe(struct platform_device *pdev) return retval; err_probe_wq: msm_drm_unregister_client(&rmi4_data->fb_notifier); if (active_panel) drm_panel_notifier_unregister(active_panel, &rmi4_data->fb_notifier); err_drm_reg: kfree(rmi4_data); Loading Loading @@ -4536,7 +4539,9 @@ static void synaptics_rmi4_defer_probe(struct work_struct *work) err_get_reg: err_drm_init_wait: msm_drm_unregister_client(&rmi4_data->fb_notifier); if (active_panel) drm_panel_notifier_unregister(active_panel, &rmi4_data->fb_notifier); cancel_work_sync(&rmi4_data->rmi4_probe_work); destroy_workqueue(rmi4_data->rmi4_probe_wq); kfree(rmi4_data); Loading Loading @@ -4576,7 +4581,9 @@ static int synaptics_rmi4_remove(struct platform_device *pdev) synaptics_rmi4_irq_enable(rmi4_data, false, false); msm_drm_unregister_client(&rmi4_data->fb_notifier); if (active_panel) drm_panel_notifier_unregister(active_panel, &rmi4_data->fb_notifier); #ifdef USE_EARLYSUSPEND unregister_early_suspend(&rmi4_data->early_suspend); Loading Loading @@ -4624,18 +4631,18 @@ static int synaptics_rmi4_dsi_panel_notifier_cb(struct notifier_block *self, unsigned long event, void *data) { int transition; struct msm_drm_notifier *evdata = data; struct drm_panel_notifier *evdata = data; struct synaptics_rmi4_data *rmi4_data = container_of(self, struct synaptics_rmi4_data, fb_notifier); if (!evdata || (evdata->id != 0)) if (!evdata) return 0; if (evdata && evdata->data && rmi4_data) { if (event == MSM_DRM_EARLY_EVENT_BLANK) { if (event == DRM_PANEL_EARLY_EVENT_BLANK) { transition = *(int *)evdata->data; if (transition == MSM_DRM_BLANK_POWERDOWN) { if (transition == DRM_PANEL_BLANK_POWERDOWN) { if (rmi4_data->initialized) synaptics_rmi4_suspend( &rmi4_data->pdev->dev); Loading @@ -4645,9 +4652,9 @@ static int synaptics_rmi4_dsi_panel_notifier_cb(struct notifier_block *self, } if (evdata && evdata->data && rmi4_data) { if (event == MSM_DRM_EVENT_BLANK) { if (event == DRM_PANEL_EVENT_BLANK) { transition = *(int *)evdata->data; if (transition == MSM_DRM_BLANK_UNBLANK) { if (transition == DRM_PANEL_BLANK_UNBLANK) { if (rmi4_data->initialized) synaptics_rmi4_resume( &rmi4_data->pdev->dev); Loading
drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.h +4 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,8 @@ #include <linux/earlysuspend.h> #endif #include <drm/drm_panel.h> #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 38)) #define KERNEL_ABOVE_2_6_38 #endif Loading Loading @@ -133,6 +135,8 @@ enum exp_fn { RMI_LAST, }; extern struct drm_panel *active_panel; /* * struct synaptics_rmi4_fn_desc - function descriptor fields in PDT entry * @query_base_addr: base address for query registers Loading
drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_i2c.c +28 −0 Original line number Diff line number Diff line Loading @@ -451,6 +451,30 @@ static int synaptics_rmi4_i2c_write(struct synaptics_rmi4_data *rmi4_data, return retval; } int check_dt(struct device_node *np) { int i; int count; struct device_node *node; struct drm_panel *panel; count = of_count_phandle_with_args(np, "panel", NULL); if (count <= 0) return 0; for (i = 0; i < count; i++) { node = of_parse_phandle(np, "panel", i); panel = of_drm_find_panel(node); of_node_put(node); if (!IS_ERR(panel)) { active_panel = panel; return 0; } } return -ENODEV; } static struct synaptics_dsx_bus_access bus_access = { .type = BUS_I2C, .read = synaptics_rmi4_i2c_read, Loading @@ -466,6 +490,10 @@ static int synaptics_rmi4_i2c_probe(struct i2c_client *client, const struct i2c_device_id *dev_id) { int retval; if (check_dt(client->dev.of_node)) return -ENODEV; if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { dev_err(&client->dev, Loading