diff options
Diffstat (limited to 'drivers/hid/hid-picolcd_core.c')
| -rw-r--r-- | drivers/hid/hid-picolcd_core.c | 18 | 
1 files changed, 6 insertions, 12 deletions
| diff --git a/drivers/hid/hid-picolcd_core.c b/drivers/hid/hid-picolcd_core.c index c1b29a9eb41a..482c24f0e078 100644 --- a/drivers/hid/hid-picolcd_core.c +++ b/drivers/hid/hid-picolcd_core.c @@ -28,6 +28,7 @@  #include <linux/completion.h>  #include <linux/uaccess.h>  #include <linux/module.h> +#include <linux/string.h>  #include "hid-picolcd.h" @@ -275,27 +276,20 @@ static ssize_t picolcd_operation_mode_store(struct device *dev,  {  	struct picolcd_data *data = dev_get_drvdata(dev);  	struct hid_report *report = NULL; -	size_t cnt = count;  	int timeout = data->opmode_delay;  	unsigned long flags; -	if (cnt >= 3 && strncmp("lcd", buf, 3) == 0) { +	if (sysfs_streq(buf, "lcd")) {  		if (data->status & PICOLCD_BOOTLOADER)  			report = picolcd_out_report(REPORT_EXIT_FLASHER, data->hdev); -		buf += 3; -		cnt -= 3; -	} else if (cnt >= 10 && strncmp("bootloader", buf, 10) == 0) { +	} else if (sysfs_streq(buf, "bootloader")) {  		if (!(data->status & PICOLCD_BOOTLOADER))  			report = picolcd_out_report(REPORT_EXIT_KEYBOARD, data->hdev); -		buf += 10; -		cnt -= 10; -	} -	if (!report || report->maxfield != 1) +	} else {  		return -EINVAL; +	} -	while (cnt > 0 && (buf[cnt-1] == '\n' || buf[cnt-1] == '\r')) -		cnt--; -	if (cnt != 0) +	if (!report || report->maxfield != 1)  		return -EINVAL;  	spin_lock_irqsave(&data->lock, flags); |