diff mbox

[v2] Input: elan_i2c - check if device is there before really probing

Message ID 20170509004553.GA21295@dtor-ws (mailing list archive)
State New, archived
Headers show

Commit Message

Dmitry Torokhov May 9, 2017, 12:45 a.m. UTC
Before trying to properly initialize the touchpad and generate bunch of
errors, let's first see it there is anything at the given address. If we
get error, fail silently with -ENXIO.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---

v2: switched over to i2c_smbus_read_byte() as Guenter suggested

 drivers/input/mouse/elan_i2c_core.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Fabio Estevam May 9, 2017, 1:43 a.m. UTC | #1
On Mon, May 8, 2017 at 9:45 PM, Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:

> +       /* Make sure there is something at this address */
> +       error = i2c_smbus_read_byte(client);
> +       if (error < 0) {
> +               dev_dbg(&client->dev, "nothing at this address: %d\n", error);
> +               return -ENXIO;

You could return the real error code here: 'return error'
--
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 May 10, 2017, 12:46 a.m. UTC | #2
On Mon, May 08, 2017 at 10:43:36PM -0300, Fabio Estevam wrote:
> On Mon, May 8, 2017 at 9:45 PM, Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
> 
> > +       /* Make sure there is something at this address */
> > +       error = i2c_smbus_read_byte(client);
> > +       if (error < 0) {
> > +               dev_dbg(&client->dev, "nothing at this address: %d\n", error);
> > +               return -ENXIO;
> 
> You could return the real error code here: 'return error'

That is the point of the patch - we want to fail silently if the device
is not actually there and fails even the simplest communication. Driver
core treats ENXIO and ENODEV as special and does not log errors.

Thanks.
Fabio Estevam May 10, 2017, 12:49 a.m. UTC | #3
On Tue, May 9, 2017 at 9:46 PM, Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:

> That is the point of the patch - we want to fail silently if the device
> is not actually there and fails even the simplest communication. Driver
> core treats ENXIO and ENODEV as special and does not log errors.

Got it, thanks for the explanation!
--
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
Guenter Roeck May 11, 2017, 8:51 p.m. UTC | #4
On Mon, May 08, 2017 at 05:45:53PM -0700, Dmitry Torokhov wrote:
> Before trying to properly initialize the touchpad and generate bunch of
> errors, let's first see it there is anything at the given address. If we
> get error, fail silently with -ENXIO.
> 
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

Reviewed-by: Guenter Roeck <linux@roeck-us.net>

> ---
> 
> v2: switched over to i2c_smbus_read_byte() as Guenter suggested
> 
>  drivers/input/mouse/elan_i2c_core.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
> index 5d3b53dd2fa2..3b616cb7c67f 100644
> --- a/drivers/input/mouse/elan_i2c_core.c
> +++ b/drivers/input/mouse/elan_i2c_core.c
> @@ -1091,6 +1091,13 @@ static int elan_probe(struct i2c_client *client,
>  		return error;
>  	}
>  
> +	/* Make sure there is something at this address */
> +	error = i2c_smbus_read_byte(client);
> +	if (error < 0) {
> +		dev_dbg(&client->dev, "nothing at this address: %d\n", error);
> +		return -ENXIO;
> +	}
> +
>  	/* Initialize the touchpad. */
>  	error = elan_initialize(data);
>  	if (error)
--
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
diff mbox

Patch

diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
index 5d3b53dd2fa2..3b616cb7c67f 100644
--- a/drivers/input/mouse/elan_i2c_core.c
+++ b/drivers/input/mouse/elan_i2c_core.c
@@ -1091,6 +1091,13 @@  static int elan_probe(struct i2c_client *client,
 		return error;
 	}
 
+	/* Make sure there is something at this address */
+	error = i2c_smbus_read_byte(client);
+	if (error < 0) {
+		dev_dbg(&client->dev, "nothing at this address: %d\n", error);
+		return -ENXIO;
+	}
+
 	/* Initialize the touchpad. */
 	error = elan_initialize(data);
 	if (error)