diff options
Diffstat (limited to 'drivers/input')
| -rw-r--r-- | drivers/input/key_matrix.c | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/drivers/input/key_matrix.c b/drivers/input/key_matrix.c index 715e57a2a..c08caa682 100644 --- a/drivers/input/key_matrix.c +++ b/drivers/input/key_matrix.c @@ -153,6 +153,8 @@ int key_matrix_decode_fdt(struct key_matrix *config, const void *blob,  			  int node)  {  	const struct fdt_property *prop; +	const char prefix[] = "linux,"; +	int plen = sizeof(prefix) - 1;  	int offset;  	/* Check each property name for ones that we understand */ @@ -168,16 +170,17 @@ int key_matrix_decode_fdt(struct key_matrix *config, const void *blob,  		/* Name needs to match "1,<type>keymap" */  		debug("%s: property '%s'\n", __func__, name); -		if (strncmp(name, "1,", 2) || len < 8 || -		    strcmp(name + len - 6, "keymap")) +		if (strncmp(name, prefix, plen) || +				len < plen + 6 || +				strcmp(name + len - 6, "keymap"))  			continue; -		len -= 8; +		len -= plen + 6;  		if (len == 0) {  			config->plain_keycode = create_keymap(config,  				(u32 *)prop->data, fdt32_to_cpu(prop->len),  				KEY_FN, &config->fn_pos); -		} else if (0 == strncmp(name + 2, "fn-", len)) { +		} else if (0 == strncmp(name + plen, "fn-", len)) {  			config->fn_keycode = create_keymap(config,  				(u32 *)prop->data, fdt32_to_cpu(prop->len),  				-1, NULL); |