Message ID | 20240405140906.77831-3-marvin24@gmx.de |
---|---|
State | Superseded |
Headers | show |
Series | Improve robustnes during initialization | expand |
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
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 --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);
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