return error;
        }
 
-       bt541->num_keycodes = device_property_count_u32(&client->dev, "linux,keycodes");
-       if (bt541->num_keycodes > ARRAY_SIZE(bt541->keycodes)) {
-               dev_err(&client->dev, "too many keys defined (%d)\n", bt541->num_keycodes);
-               return -EINVAL;
-       }
+       if (device_property_present(&client->dev, "linux,keycodes")) {
+               bt541->num_keycodes = device_property_count_u32(&client->dev,
+                                                               "linux,keycodes");
+               if (bt541->num_keycodes < 0) {
+                       dev_err(&client->dev, "Failed to count keys (%d)\n",
+                               bt541->num_keycodes);
+                       return bt541->num_keycodes;
+               } else if (bt541->num_keycodes > ARRAY_SIZE(bt541->keycodes)) {
+                       dev_err(&client->dev, "Too many keys defined (%d)\n",
+                               bt541->num_keycodes);
+                       return -EINVAL;
+               }
 
-       error = device_property_read_u32_array(&client->dev, "linux,keycodes",
-                                              bt541->keycodes,
-                                              bt541->num_keycodes);
-       if (error) {
-               dev_err(&client->dev,
-                       "Unable to parse \"linux,keycodes\" property: %d\n", error);
-               return error;
+               error = device_property_read_u32_array(&client->dev,
+                                                      "linux,keycodes",
+                                                      bt541->keycodes,
+                                                      bt541->num_keycodes);
+               if (error) {
+                       dev_err(&client->dev,
+                               "Unable to parse \"linux,keycodes\" property: %d\n",
+                               error);
+                       return error;
+               }
        }
 
        error = zinitix_init_input_dev(bt541);