diff mbox series

[2/4] staging: nvec: make touchpad init synchronous

Message ID 20240405140906.77831-3-marvin24@gmx.de
State Superseded
Headers show
Series Improve robustnes during initialization | expand

Commit Message

Marc Dietrich April 5, 2024, 2:09 p.m. UTC
Improve initialization stability by waiting for command completion before
sending the next one.

Signed-off-by: Marc Dietrich <marvin24@gmx.de>
---
 drivers/staging/nvec/nvec_ps2.c | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

--
2.43.0

Comments

Thierry Reding April 5, 2024, 2:40 p.m. UTC | #1
On Fri Apr 5, 2024 at 4:09 PM CEST, Marc Dietrich wrote:
> Improve initialization stability by waiting for command completion before
> sending the next one.
>
> Signed-off-by: Marc Dietrich <marvin24@gmx.de>
> ---
>  drivers/staging/nvec/nvec_ps2.c | 31 +++++++++++++++++++++----------
>  1 file changed, 21 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/staging/nvec/nvec_ps2.c b/drivers/staging/nvec/nvec_ps2.c
> index cb6d71b8dc83..f34016c4a26b 100644
> --- a/drivers/staging/nvec/nvec_ps2.c
> +++ b/drivers/staging/nvec/nvec_ps2.c
> @@ -60,16 +60,6 @@ static void ps2_stopstreaming(struct serio *ser_dev)
>  	nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
>  }
>
> -static int ps2_sendcommand(struct serio *ser_dev, unsigned char cmd)
> -{
> -	unsigned char buf[] = { NVEC_PS2, SEND_COMMAND, ENABLE_MOUSE, 1 };
> -
> -	buf[2] = cmd & 0xff;
> -
> -	dev_dbg(&ser_dev->dev, "Sending ps2 cmd %02x\n", cmd);
> -	return nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
> -}
> -
>  static int nvec_ps2_notifier(struct notifier_block *nb,
>  			     unsigned long event_type, void *data)
>  {
> @@ -98,6 +88,27 @@ static int nvec_ps2_notifier(struct notifier_block *nb,
>  	return NOTIFY_DONE;
>  }
>
> +static int ps2_sendcommand(struct serio *ser_dev, unsigned char cmd)
> +{
> +	unsigned char buf[] = { NVEC_PS2, SEND_COMMAND, ENABLE_MOUSE, 1 };
> +	struct nvec_msg *msg;
> +	int ret;
> +
> +	buf[2] = cmd & 0xff;
> +
> +	dev_dbg(&ser_dev->dev, "Sending ps2 cmd %02x\n", cmd);
> +
> +	ret = nvec_write_sync(ps2_dev.nvec, buf, sizeof(buf), &msg);
> +	if (ret < 0)
> +		return ret;
> +
> +	nvec_ps2_notifier(NULL, NVEC_PS2, msg->data);
> +
> +	nvec_msg_free(ps2_dev.nvec, msg);
> +
> +	return 0;
> +}
> +

Is there a particular reason why you've moved the function around? It'd
probably make the patch a tiny bit smaller if you kept it in the right
spot.

Thierry
Marc Dietrich April 6, 2024, 12:24 p.m. UTC | #2
Hello Thierry,

On Fri, 5 Apr 2024, Thierry Reding wrote:

> On Fri Apr 5, 2024 at 4:09 PM CEST, Marc Dietrich wrote:
>> Improve initialization stability by waiting for command completion before
>> sending the next one.
>>
>> Signed-off-by: Marc Dietrich <marvin24@gmx.de>
>> ---
>>  drivers/staging/nvec/nvec_ps2.c | 31 +++++++++++++++++++++----------
>>  1 file changed, 21 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/staging/nvec/nvec_ps2.c b/drivers/staging/nvec/nvec_ps2.c
>> index cb6d71b8dc83..f34016c4a26b 100644
>> --- a/drivers/staging/nvec/nvec_ps2.c
>> +++ b/drivers/staging/nvec/nvec_ps2.c
>> @@ -60,16 +60,6 @@ static void ps2_stopstreaming(struct serio *ser_dev)
>>  	nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
>>  }
>>
>> -static int ps2_sendcommand(struct serio *ser_dev, unsigned char cmd)
>> -{
>> -	unsigned char buf[] = { NVEC_PS2, SEND_COMMAND, ENABLE_MOUSE, 1 };
>> -
>> -	buf[2] = cmd & 0xff;
>> -
>> -	dev_dbg(&ser_dev->dev, "Sending ps2 cmd %02x\n", cmd);
>> -	return nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
>> -}
>> -
>>  static int nvec_ps2_notifier(struct notifier_block *nb,
>>  			     unsigned long event_type, void *data)
>>  {
>> @@ -98,6 +88,27 @@ static int nvec_ps2_notifier(struct notifier_block *nb,
>>  	return NOTIFY_DONE;
>>  }
>>
>> +static int ps2_sendcommand(struct serio *ser_dev, unsigned char cmd)
>> +{
>> +	unsigned char buf[] = { NVEC_PS2, SEND_COMMAND, ENABLE_MOUSE, 1 };
>> +	struct nvec_msg *msg;
>> +	int ret;
>> +
>> +	buf[2] = cmd & 0xff;
>> +
>> +	dev_dbg(&ser_dev->dev, "Sending ps2 cmd %02x\n", cmd);
>> +
>> +	ret = nvec_write_sync(ps2_dev.nvec, buf, sizeof(buf), &msg);
>> +	if (ret < 0)
>> +		return ret;
>> +
>> +	nvec_ps2_notifier(NULL, NVEC_PS2, msg->data);
>> +
>> +	nvec_msg_free(ps2_dev.nvec, msg);
>> +
>> +	return 0;
>> +}
>> +
>
> Is there a particular reason why you've moved the function around? It'd
> probably make the patch a tiny bit smaller if you kept it in the right
> spot.

because I'm calling nvec_ps2_notifier, I either need to to move the
function down or add a forward declaration. I prefered moving down because
that keeps the code a bit cleaner (with the cost of a slighly bigger
patch).

Marc
diff mbox series

Patch

diff --git a/drivers/staging/nvec/nvec_ps2.c b/drivers/staging/nvec/nvec_ps2.c
index cb6d71b8dc83..f34016c4a26b 100644
--- a/drivers/staging/nvec/nvec_ps2.c
+++ b/drivers/staging/nvec/nvec_ps2.c
@@ -60,16 +60,6 @@  static void ps2_stopstreaming(struct serio *ser_dev)
 	nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
 }

-static int ps2_sendcommand(struct serio *ser_dev, unsigned char cmd)
-{
-	unsigned char buf[] = { NVEC_PS2, SEND_COMMAND, ENABLE_MOUSE, 1 };
-
-	buf[2] = cmd & 0xff;
-
-	dev_dbg(&ser_dev->dev, "Sending ps2 cmd %02x\n", cmd);
-	return nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
-}
-
 static int nvec_ps2_notifier(struct notifier_block *nb,
 			     unsigned long event_type, void *data)
 {
@@ -98,6 +88,27 @@  static int nvec_ps2_notifier(struct notifier_block *nb,
 	return NOTIFY_DONE;
 }

+static int ps2_sendcommand(struct serio *ser_dev, unsigned char cmd)
+{
+	unsigned char buf[] = { NVEC_PS2, SEND_COMMAND, ENABLE_MOUSE, 1 };
+	struct nvec_msg *msg;
+	int ret;
+
+	buf[2] = cmd & 0xff;
+
+	dev_dbg(&ser_dev->dev, "Sending ps2 cmd %02x\n", cmd);
+
+	ret = nvec_write_sync(ps2_dev.nvec, buf, sizeof(buf), &msg);
+	if (ret < 0)
+		return ret;
+
+	nvec_ps2_notifier(NULL, NVEC_PS2, msg->data);
+
+	nvec_msg_free(ps2_dev.nvec, msg);
+
+	return 0;
+}
+
 static int nvec_mouse_probe(struct platform_device *pdev)
 {
 	struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);