diff mbox

input: synaptics-rmi4 - cleanup rmi_i2c_probe()

Message ID 1389219092-32042-1-git-send-email-cheiny@synaptics.com (mailing list archive)
State New, archived
Headers show

Commit Message

Christopher Heiny Jan. 8, 2014, 10:11 p.m. UTC
Moves i2c_check_functionality to occur before the gpio_config() call.  This 
can catch some issues that would otherwise result in mysterious problems
in gpio_config().

Reduces debugging output; updates remaining output to be more accurate.

Signed-off-by: Christopher Heiny <cheiny@synaptics.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>

---

 drivers/input/rmi4/rmi_i2c.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Dmitry Torokhov Jan. 8, 2014, 10:46 p.m. UTC | #1
On Wed, Jan 08, 2014 at 02:11:32PM -0800, Christopher Heiny wrote:
> Moves i2c_check_functionality to occur before the gpio_config() call.  This 
> can catch some issues that would otherwise result in mysterious problems
> in gpio_config().
> 
> Reduces debugging output; updates remaining output to be more accurate.

What kind of gpio config is there? Did not we add proper configuration
of attn_gpio to the core? Do you really need these callbacks? They will
hurt you when you will try to move to devicetree-based setups.

Thanks.
Christopher Heiny Jan. 8, 2014, 11:04 p.m. UTC | #2
On 01/08/2014 02:46 PM, Dmitry Torokhov wrote:
> On Wed, Jan 08, 2014 at 02:11:32PM -0800, Christopher Heiny wrote:
>> Moves i2c_check_functionality to occur before the gpio_config() call.  This
>> can catch some issues that would otherwise result in mysterious problems
>> in gpio_config().
>>
>> Reduces debugging output; updates remaining output to be more accurate.
>
> What kind of gpio config is there? Did not we add proper configuration
> of attn_gpio to the core? Do you really need these callbacks? They will
> hurt you when you will try to move to devicetree-based setups.

This is a gpio_config() does the platform specific gpio setup (power 
configuration, voltage levels, hardware reset lines, and so on).  This 
is used on every production platform using the driver that I know of, 
and the setup is different on every platform (sometimes even between 
revs of that platform).  We'd go crazy trying to handle that in 
rmi_i2c.c or rmi_driver.c, so it's pushed to the platform.

And yeah, I figure it'll hurt when we move to devicetree.  Right now 
we're just trying to get the current state of the code in the 
synaptics-rmi4 branch from "horribly broken" to "it lives!".  We're 
willing to put off that devicetree pain in order to get the code on its 
feet.
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dmitry Torokhov Jan. 9, 2014, 8:06 a.m. UTC | #3
On Wed, Jan 08, 2014 at 02:11:32PM -0800, Christopher Heiny wrote:
> Moves i2c_check_functionality to occur before the gpio_config() call.  This 
> can catch some issues that would otherwise result in mysterious problems
> in gpio_config().
> 
> Reduces debugging output; updates remaining output to be more accurate.
> 
> Signed-off-by: Christopher Heiny <cheiny@synaptics.com>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Applied, thank you.

> 
> ---
> 
>  drivers/input/rmi4/rmi_i2c.c | 18 ++++++++----------
>  1 file changed, 8 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/input/rmi4/rmi_i2c.c b/drivers/input/rmi4/rmi_i2c.c
> index 43b0e53..b4bd8ae 100644
> --- a/drivers/input/rmi4/rmi_i2c.c
> +++ b/drivers/input/rmi4/rmi_i2c.c
> @@ -274,26 +274,24 @@ static int rmi_i2c_probe(struct i2c_client *client,
>  		dev_err(&client->dev, "no platform data\n");
>  		return -EINVAL;
>  	}
> -	dev_info(&client->dev, "Probing %s at %#02x (IRQ %d).\n",
> +	dev_dbg(&client->dev, "Probing %s at %#02x (GPIO %d).\n",
>  		pdata->sensor_name ? pdata->sensor_name : "-no name-",
>  		client->addr, pdata->attn_gpio);
>  
> +	retval = i2c_check_functionality(client->adapter, I2C_FUNC_I2C);
> +	if (!retval) {
> +		dev_err(&client->dev, "i2c_check_functionality error %d.\n",
> +			retval);
> +		return retval;
> +	}
> +
>  	if (pdata->gpio_config) {
> -		dev_dbg(&client->dev, "Configuring GPIOs.\n");
>  		retval = pdata->gpio_config(pdata->gpio_data, true);
>  		if (retval < 0) {
>  			dev_err(&client->dev, "Failed to configure GPIOs, code: %d.\n",
>  				retval);
>  			return retval;
>  		}
> -		dev_info(&client->dev, "Done with GPIO configuration.\n");
> -	}
> -
> -	retval = i2c_check_functionality(client->adapter, I2C_FUNC_I2C);
> -	if (!retval) {
> -		dev_err(&client->dev, "i2c_check_functionality error %d.\n",
> -			retval);
> -		return retval;
>  	}
>  
>  	xport = devm_kzalloc(&client->dev, sizeof(struct rmi_transport_dev),
diff mbox

Patch

diff --git a/drivers/input/rmi4/rmi_i2c.c b/drivers/input/rmi4/rmi_i2c.c
index 43b0e53..b4bd8ae 100644
--- a/drivers/input/rmi4/rmi_i2c.c
+++ b/drivers/input/rmi4/rmi_i2c.c
@@ -274,26 +274,24 @@  static int rmi_i2c_probe(struct i2c_client *client,
 		dev_err(&client->dev, "no platform data\n");
 		return -EINVAL;
 	}
-	dev_info(&client->dev, "Probing %s at %#02x (IRQ %d).\n",
+	dev_dbg(&client->dev, "Probing %s at %#02x (GPIO %d).\n",
 		pdata->sensor_name ? pdata->sensor_name : "-no name-",
 		client->addr, pdata->attn_gpio);
 
+	retval = i2c_check_functionality(client->adapter, I2C_FUNC_I2C);
+	if (!retval) {
+		dev_err(&client->dev, "i2c_check_functionality error %d.\n",
+			retval);
+		return retval;
+	}
+
 	if (pdata->gpio_config) {
-		dev_dbg(&client->dev, "Configuring GPIOs.\n");
 		retval = pdata->gpio_config(pdata->gpio_data, true);
 		if (retval < 0) {
 			dev_err(&client->dev, "Failed to configure GPIOs, code: %d.\n",
 				retval);
 			return retval;
 		}
-		dev_info(&client->dev, "Done with GPIO configuration.\n");
-	}
-
-	retval = i2c_check_functionality(client->adapter, I2C_FUNC_I2C);
-	if (!retval) {
-		dev_err(&client->dev, "i2c_check_functionality error %d.\n",
-			retval);
-		return retval;
 	}
 
 	xport = devm_kzalloc(&client->dev, sizeof(struct rmi_transport_dev),