Message ID | 20150228001852.GA18983@dtor-ws (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi, On 28-02-15 01:18, Dmitry Torokhov wrote: > PNP IDs are supposed to be case-insensitive and so we should compare > them as such. > > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Looks good: Acked-by: Hans de Goede <hdegoede@redhat.com> Regards, Hans > --- > drivers/input/mouse/psmouse-base.c | 39 +++++++++++++++++++++++++++++++------- > 1 file changed, 32 insertions(+), 7 deletions(-) > > diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c > index 4ccd01d..a175496 100644 > --- a/drivers/input/mouse/psmouse-base.c > +++ b/drivers/input/mouse/psmouse-base.c > @@ -463,19 +463,44 @@ static int psmouse_poll(struct psmouse *psmouse) > PSMOUSE_CMD_POLL | (psmouse->pktsize << 8)); > } > > +static bool psmouse_check_pnp_id(const char *id, const char * const ids[]) > +{ > + int i; > + > + for (i = 0; ids[i]; i++) > + if (!strcasecmp(id, ids[i])) > + return true; > + > + return false; > +} > + > /* > * psmouse_matches_pnp_id - check if psmouse matches one of the passed in ids. > */ > bool psmouse_matches_pnp_id(struct psmouse *psmouse, const char * const ids[]) > { > - int i; > - > - if (!strncmp(psmouse->ps2dev.serio->firmware_id, "PNP:", 4)) > - for (i = 0; ids[i]; i++) > - if (strstr(psmouse->ps2dev.serio->firmware_id, ids[i])) > - return true; > + struct serio *serio = psmouse->ps2dev.serio; > + char *p, *fw_id_copy, *save_ptr; > + bool found = false; > + > + if (!strncmp(serio->firmware_id, "PNP:", 4)) > + return false; > + > + fw_id_copy = kstrndup(&serio->firmware_id[4], > + sizeof(serio->firmware_id) - 4, > + GFP_KERNEL); > + if (!fw_id_copy) > + return false; > + > + save_ptr = fw_id_copy; > + while ((p = strsep(&fw_id_copy, " ")) != NULL) { > + if (psmouse_check_pnp_id(p, ids)) > + found = true; > + break; > + } > > - return false; > + kfree(save_ptr); > + return found; > } > > /* > -- 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
On Fri, Feb 27, 2015 at 04:18:52PM -0800, Dmitry Torokhov wrote: > PNP IDs are supposed to be case-insensitive and so we should compare > them as such. Have specific systems popped up which need this fix, or is it just in the interests of being correct? If there are specific system(s) that are affected, it would be valuable to list them or at least say so. Jeff -- 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
Hi Jeff, On Mon, Mar 02, 2015 at 04:14:37PM -0600, Jeff Epler wrote: > On Fri, Feb 27, 2015 at 04:18:52PM -0800, Dmitry Torokhov wrote: > > PNP IDs are supposed to be case-insensitive and so we should compare > > them as such. > > Have specific systems popped up which need this fix, or is it just in > the interests of being correct? If there are specific system(s) that > are affected, it would be valuable to list them or at least say so. It is needed by another patch identifying SYN300D as a forcepad whereas in BIOS it is actually SYN300d. While we could change the kernel to match against SYN300d I am not sure if somebody else won't use SYN300D in some other BIOS. Thanks.
diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c index 4ccd01d..a175496 100644 --- a/drivers/input/mouse/psmouse-base.c +++ b/drivers/input/mouse/psmouse-base.c @@ -463,19 +463,44 @@ static int psmouse_poll(struct psmouse *psmouse) PSMOUSE_CMD_POLL | (psmouse->pktsize << 8)); } +static bool psmouse_check_pnp_id(const char *id, const char * const ids[]) +{ + int i; + + for (i = 0; ids[i]; i++) + if (!strcasecmp(id, ids[i])) + return true; + + return false; +} + /* * psmouse_matches_pnp_id - check if psmouse matches one of the passed in ids. */ bool psmouse_matches_pnp_id(struct psmouse *psmouse, const char * const ids[]) { - int i; - - if (!strncmp(psmouse->ps2dev.serio->firmware_id, "PNP:", 4)) - for (i = 0; ids[i]; i++) - if (strstr(psmouse->ps2dev.serio->firmware_id, ids[i])) - return true; + struct serio *serio = psmouse->ps2dev.serio; + char *p, *fw_id_copy, *save_ptr; + bool found = false; + + if (!strncmp(serio->firmware_id, "PNP:", 4)) + return false; + + fw_id_copy = kstrndup(&serio->firmware_id[4], + sizeof(serio->firmware_id) - 4, + GFP_KERNEL); + if (!fw_id_copy) + return false; + + save_ptr = fw_id_copy; + while ((p = strsep(&fw_id_copy, " ")) != NULL) { + if (psmouse_check_pnp_id(p, ids)) + found = true; + break; + } - return false; + kfree(save_ptr); + return found; } /*
PNP IDs are supposed to be case-insensitive and so we should compare them as such. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> --- drivers/input/mouse/psmouse-base.c | 39 +++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-)