Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753237AbbGBRvP (ORCPT ); Thu, 2 Jul 2015 13:51:15 -0400 Received: from [192.147.44.131] ([192.147.44.131]:53732 "EHLO us-mx1.synaptics.com" rhost-flags-FAIL-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1754110AbbGBRvA (ORCPT ); Thu, 2 Jul 2015 13:51:00 -0400 X-PGP-Universal: processed; by securemail.synaptics.com on Thu, 02 Jul 2015 11:37:34 -0700 Message-ID: <55957A01.2080007@synaptics.com> Date: Thu, 2 Jul 2015 10:50:57 -0700 From: Andrew Duggan User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Benjamin Tissoires , Dmitry Torokhov , Christopher Heiny , Allie Xiong CC: Stephen Chandler Paul , , , , Vincent Huang Subject: Re: [PATCH 08/11] Input: synaptics-rmi4 - f11: use the unified input node if available References: <1435087050-11444-1-git-send-email-benjamin.tissoires@redhat.com> <1435087050-11444-9-git-send-email-benjamin.tissoires@redhat.com> In-Reply-To: <1435087050-11444-9-git-send-email-benjamin.tissoires@redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.4.10.145] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4560 Lines: 141 On 06/23/2015 12:17 PM, Benjamin Tissoires wrote: > Signed-off-by: Benjamin Tissoires > --- Reviewed-by: Andrew Duggan > drivers/input/rmi4/rmi_f11.c | 60 ++++++++++++++++++++++++++------------------ > 1 file changed, 35 insertions(+), 25 deletions(-) > > diff --git a/drivers/input/rmi4/rmi_f11.c b/drivers/input/rmi4/rmi_f11.c > index c3b757b..061530a 100644 > --- a/drivers/input/rmi4/rmi_f11.c > +++ b/drivers/input/rmi4/rmi_f11.c > @@ -34,7 +34,6 @@ > #define DEFAULT_MAX_ABS_MT_ORIENTATION 1 > #define DEFAULT_MIN_ABS_MT_TRACKING_ID 1 > #define DEFAULT_MAX_ABS_MT_TRACKING_ID 10 > -#define NAME_BUFFER_SIZE 256 > #define FUNCTION_NUMBER 0x11 > > /** A note about RMI4 F11 register structure. > @@ -518,6 +517,7 @@ struct f11_2d_sensor { > u32 type_a; /* boolean but debugfs API requires u32 */ > enum rmi_f11_sensor_type sensor_type; > struct input_dev *input; > + bool unified_input; > struct rmi_function *fn; > char input_phys[NAME_BUFFER_SIZE]; > u8 report_abs; > @@ -737,7 +737,8 @@ static void rmi_f11_finger_handler(struct f11_data *f11, > } > > input_mt_sync_frame(sensor->input); > - input_sync(sensor->input); > + if (!sensor->unified_input) > + input_sync(sensor->input); > } > > static int f11_2d_construct_data(struct f11_2d_sensor *sensor) > @@ -1373,35 +1374,42 @@ static int rmi_f11_initialize(struct rmi_function *fn) > static int rmi_f11_register_devices(struct rmi_function *fn) > { > struct rmi_device *rmi_dev = fn->rmi_dev; > + struct rmi_driver_data *drv_data = dev_get_drvdata(&rmi_dev->dev); > struct f11_data *f11 = dev_get_drvdata(&fn->dev); > struct input_dev *input_dev; > struct rmi_driver *driver = rmi_dev->driver; > struct f11_2d_sensor *sensor = &f11->sensor; > int rc; > > - input_dev = input_allocate_device(); > + if (!drv_data->input) { > + input_dev = input_allocate_device(); > + } else { > + input_dev = drv_data->input; > + sensor->unified_input = true; > + } > if (!input_dev) { > rc = -ENOMEM; > goto error_unregister; > } > > sensor->input = input_dev; > - if (driver->set_input_params) { > - rc = driver->set_input_params(rmi_dev, input_dev); > - if (rc < 0) { > - dev_err(&fn->dev, > - "%s: Error in setting input device.\n", > - __func__); > - goto error_unregister; > + > + if (!sensor->unified_input) { > + if (driver->set_input_params) { > + rc = driver->set_input_params(rmi_dev, input_dev); > + if (rc < 0) { > + dev_err(&fn->dev, > + "%s: Error in setting input device.\n", > + __func__); > + goto error_unregister; > + } > } > + sprintf(sensor->input_phys, "%s.abs/input0", > + dev_name(&fn->dev)); > + input_dev->phys = sensor->input_phys; > + input_dev->dev.parent = &rmi_dev->dev; > } > - sprintf(sensor->input_phys, "%s.abs/input0", > - dev_name(&fn->dev)); > - input_dev->phys = sensor->input_phys; > - input_dev->dev.parent = &rmi_dev->dev; > - input_set_drvdata(input_dev, f11); > > - set_bit(EV_SYN, input_dev->evbit); > set_bit(EV_ABS, input_dev->evbit); > input_set_capability(input_dev, EV_KEY, BTN_TOUCH); > > @@ -1413,19 +1421,21 @@ static int rmi_f11_register_devices(struct rmi_function *fn) > set_bit(REL_X, input_dev->relbit); > set_bit(REL_Y, input_dev->relbit); > } > - rc = input_register_device(input_dev); > - if (rc) { > - input_free_device(input_dev); > - sensor->input = NULL; > - goto error_unregister; > + if (!sensor->unified_input) { > + rc = input_register_device(input_dev); > + if (rc) { > + input_free_device(input_dev); > + sensor->input = NULL; > + goto error_unregister; > + } > } > > return 0; > > error_unregister: > - if (f11->sensor.input) { > - input_unregister_device(f11->sensor.input); > - f11->sensor.input = NULL; > + if (!sensor->unified_input && sensor->input) { > + input_unregister_device(sensor->input); > + sensor->input = NULL; > } > > return rc; > @@ -1525,7 +1535,7 @@ static void rmi_f11_remove(struct rmi_function *fn) > { > struct f11_data *f11 = dev_get_drvdata(&fn->dev); > > - if (f11->sensor.input) > + if (!f11->sensor.unified_input && f11->sensor.input) > input_unregister_device(f11->sensor.input); > } > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/