Эх сурвалжийг харах

Input: max7359_keypad - switch to using matrix_keypad_build_keymap()

max7359_build_keycode() does the same thing as matrix_keypad_build_keymap(),
but the latter can also handle DT bindings.

Tested on beagleboard-xm.

Signed-off-by: Evgeniy A. Dushistov <dushistov@mail.ru>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Evgeniy Dushistov 10 жил өмнө
parent
commit
68aeee98ee

+ 1 - 0
drivers/input/keyboard/Kconfig

@@ -367,6 +367,7 @@ config KEYBOARD_MAPLE
 
 
 config KEYBOARD_MAX7359
 config KEYBOARD_MAX7359
 	tristate "Maxim MAX7359 Key Switch Controller"
 	tristate "Maxim MAX7359 Key Switch Controller"
+	select INPUT_MATRIXKMAP
 	depends on I2C
 	depends on I2C
 	help
 	help
 	  If you say yes here you get support for the Maxim MAX7359 Key
 	  If you say yes here you get support for the Maxim MAX7359 Key

+ 9 - 21
drivers/input/keyboard/max7359_keypad.c

@@ -84,26 +84,6 @@ static int max7359_read_reg(struct i2c_client *client, int reg)
 	return ret;
 	return ret;
 }
 }
 
 
-static void max7359_build_keycode(struct max7359_keypad *keypad,
-				const struct matrix_keymap_data *keymap_data)
-{
-	struct input_dev *input_dev = keypad->input_dev;
-	int i;
-
-	for (i = 0; i < keymap_data->keymap_size; i++) {
-		unsigned int key = keymap_data->keymap[i];
-		unsigned int row = KEY_ROW(key);
-		unsigned int col = KEY_COL(key);
-		unsigned int scancode = MATRIX_SCAN_CODE(row, col,
-						MAX7359_ROW_SHIFT);
-		unsigned short keycode = KEY_VAL(key);
-
-		keypad->keycodes[scancode] = keycode;
-		__set_bit(keycode, input_dev->keybit);
-	}
-	__clear_bit(KEY_RESERVED, input_dev->keybit);
-}
-
 /* runs in an IRQ thread -- can (and will!) sleep */
 /* runs in an IRQ thread -- can (and will!) sleep */
 static irqreturn_t max7359_interrupt(int irq, void *dev_id)
 static irqreturn_t max7359_interrupt(int irq, void *dev_id)
 {
 {
@@ -232,7 +212,15 @@ static int max7359_probe(struct i2c_client *client,
 	input_set_capability(input_dev, EV_MSC, MSC_SCAN);
 	input_set_capability(input_dev, EV_MSC, MSC_SCAN);
 	input_set_drvdata(input_dev, keypad);
 	input_set_drvdata(input_dev, keypad);
 
 
-	max7359_build_keycode(keypad, keymap_data);
+	error = matrix_keypad_build_keymap(keymap_data, NULL,
+					   MAX7359_MAX_KEY_ROWS,
+					   MAX7359_MAX_KEY_COLS,
+					   keypad->keycodes,
+					   input_dev);
+	if (error) {
+		dev_err(&client->dev, "failed to build keymap\n");
+		return error;
+	}
 
 
 	error = devm_request_threaded_irq(&client->dev, client->irq, NULL,
 	error = devm_request_threaded_irq(&client->dev, client->irq, NULL,
 					  max7359_interrupt,
 					  max7359_interrupt,