input: Correct key_matrix fdt decoding
authorSimon Glass <sjg@chromium.org>
Thu, 27 Sep 2012 15:18:40 +0000 (15:18 +0000)
committerTom Rini <trini@ti.com>
Mon, 15 Oct 2012 18:54:04 +0000 (11:54 -0700)
Some issues with this were not addressed in the previous series. Fix up
the binding decoding to deal with what is actually expected in the fdt.

This corrects the broken keyboard on seaboard.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/input/key_matrix.c

index 715e57a2af38157e61938eb5a0dd284f1f4253ce..c08caa68295b8230c83f6065098535a8ac809523 100644 (file)
@@ -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);