Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: stmpe - enforce device tree only mode

The STMPE keypad controller is only used with device tree configured
systems, so force the configuration to come from device tree only, and now
actually get the rows and cols from the device tree too.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

authored by

Linus Walleij and committed by
Dmitry Torokhov
a4164863 80e1dd82

+48 -79
+2
Documentation/devicetree/bindings/input/stmpe-keypad.txt
··· 8 8 - debounce-interval : Debouncing interval time in milliseconds 9 9 - st,scan-count : Scanning cycles elapsed before key data is updated 10 10 - st,no-autorepeat : If specified device will not autorepeat 11 + - keypad,num-rows : See ./matrix-keymap.txt 12 + - keypad,num-columns : See ./matrix-keymap.txt 11 13 12 14 Example: 13 15
+1
drivers/input/keyboard/Kconfig
··· 559 559 config KEYBOARD_STMPE 560 560 tristate "STMPE keypad support" 561 561 depends on MFD_STMPE 562 + depends on OF 562 563 select INPUT_MATRIXKMAP 563 564 help 564 565 Say Y here if you want to use the keypad controller on STMPE I/O
+45 -59
drivers/input/keyboard/stmpe-keypad.c
··· 45 45 #define STMPE_KEYPAD_MAX_ROWS 8 46 46 #define STMPE_KEYPAD_MAX_COLS 8 47 47 #define STMPE_KEYPAD_ROW_SHIFT 3 48 - #define STMPE_KEYPAD_KEYMAP_SIZE \ 48 + #define STMPE_KEYPAD_KEYMAP_MAX_SIZE \ 49 49 (STMPE_KEYPAD_MAX_ROWS * STMPE_KEYPAD_MAX_COLS) 50 50 51 51 /** ··· 99 99 }, 100 100 }; 101 101 102 + /** 103 + * struct stmpe_keypad - STMPE keypad state container 104 + * @stmpe: pointer to parent STMPE device 105 + * @input: spawned input device 106 + * @variant: STMPE variant 107 + * @debounce_ms: debounce interval, in ms. Maximum is 108 + * %STMPE_KEYPAD_MAX_DEBOUNCE. 109 + * @scan_count: number of key scanning cycles to confirm key data. 110 + * Maximum is %STMPE_KEYPAD_MAX_SCAN_COUNT. 111 + * @no_autorepeat: disable key autorepeat 112 + * @rows: bitmask for the rows 113 + * @cols: bitmask for the columns 114 + * @keymap: the keymap 115 + */ 102 116 struct stmpe_keypad { 103 117 struct stmpe *stmpe; 104 118 struct input_dev *input; 105 119 const struct stmpe_keypad_variant *variant; 106 - const struct stmpe_keypad_platform_data *plat; 107 - 120 + unsigned int debounce_ms; 121 + unsigned int scan_count; 122 + bool no_autorepeat; 108 123 unsigned int rows; 109 124 unsigned int cols; 110 - 111 - unsigned short keymap[STMPE_KEYPAD_KEYMAP_SIZE]; 125 + unsigned short keymap[STMPE_KEYPAD_KEYMAP_MAX_SIZE]; 112 126 }; 113 127 114 128 static int stmpe_keypad_read_data(struct stmpe_keypad *keypad, u8 *data) ··· 222 208 223 209 static int stmpe_keypad_chip_init(struct stmpe_keypad *keypad) 224 210 { 225 - const struct stmpe_keypad_platform_data *plat = keypad->plat; 226 211 const struct stmpe_keypad_variant *variant = keypad->variant; 227 212 struct stmpe *stmpe = keypad->stmpe; 228 213 int ret; 229 214 230 - if (plat->debounce_ms > STMPE_KEYPAD_MAX_DEBOUNCE) 215 + if (keypad->debounce_ms > STMPE_KEYPAD_MAX_DEBOUNCE) 231 216 return -EINVAL; 232 217 233 - if (plat->scan_count > STMPE_KEYPAD_MAX_SCAN_COUNT) 218 + if (keypad->scan_count > STMPE_KEYPAD_MAX_SCAN_COUNT) 234 219 return -EINVAL; 235 220 236 221 ret = stmpe_enable(stmpe, STMPE_BLOCK_KEYPAD); ··· 258 245 259 246 ret = stmpe_set_bits(stmpe, STMPE_KPC_CTRL_MSB, 260 247 STMPE_KPC_CTRL_MSB_SCAN_COUNT, 261 - plat->scan_count << 4); 248 + keypad->scan_count << 4); 262 249 if (ret < 0) 263 250 return ret; 264 251 ··· 266 253 STMPE_KPC_CTRL_LSB_SCAN | 267 254 STMPE_KPC_CTRL_LSB_DEBOUNCE, 268 255 STMPE_KPC_CTRL_LSB_SCAN | 269 - (plat->debounce_ms << 1)); 256 + (keypad->debounce_ms << 1)); 270 257 } 271 258 272 - static void stmpe_keypad_fill_used_pins(struct stmpe_keypad *keypad) 259 + static void stmpe_keypad_fill_used_pins(struct stmpe_keypad *keypad, 260 + u32 used_rows, u32 used_cols) 273 261 { 274 262 int row, col; 275 263 276 - for (row = 0; row < STMPE_KEYPAD_MAX_ROWS; row++) { 277 - for (col = 0; col < STMPE_KEYPAD_MAX_COLS; col++) { 264 + for (row = 0; row < used_rows; row++) { 265 + for (col = 0; col < used_cols; col++) { 278 266 int code = MATRIX_SCAN_CODE(row, col, 279 - STMPE_KEYPAD_ROW_SHIFT); 267 + STMPE_KEYPAD_ROW_SHIFT); 280 268 if (keypad->keymap[code] != KEY_RESERVED) { 281 269 keypad->rows |= 1 << row; 282 270 keypad->cols |= 1 << col; ··· 286 272 } 287 273 } 288 274 289 - #ifdef CONFIG_OF 290 - static const struct stmpe_keypad_platform_data * 291 - stmpe_keypad_of_probe(struct device *dev) 292 - { 293 - struct device_node *np = dev->of_node; 294 - struct stmpe_keypad_platform_data *plat; 295 - 296 - if (!np) 297 - return ERR_PTR(-ENODEV); 298 - 299 - plat = devm_kzalloc(dev, sizeof(*plat), GFP_KERNEL); 300 - if (!plat) 301 - return ERR_PTR(-ENOMEM); 302 - 303 - of_property_read_u32(np, "debounce-interval", &plat->debounce_ms); 304 - of_property_read_u32(np, "st,scan-count", &plat->scan_count); 305 - 306 - plat->no_autorepeat = of_property_read_bool(np, "st,no-autorepeat"); 307 - 308 - return plat; 309 - } 310 - #else 311 - static inline const struct stmpe_keypad_platform_data * 312 - stmpe_keypad_of_probe(struct device *dev) 313 - { 314 - return ERR_PTR(-EINVAL); 315 - } 316 - #endif 317 - 318 275 static int stmpe_keypad_probe(struct platform_device *pdev) 319 276 { 320 277 struct stmpe *stmpe = dev_get_drvdata(pdev->dev.parent); 321 - const struct stmpe_keypad_platform_data *plat; 278 + struct device_node *np = pdev->dev.of_node; 322 279 struct stmpe_keypad *keypad; 323 280 struct input_dev *input; 281 + u32 rows; 282 + u32 cols; 324 283 int error; 325 284 int irq; 326 - 327 - plat = stmpe->pdata->keypad; 328 - if (!plat) { 329 - plat = stmpe_keypad_of_probe(&pdev->dev); 330 - if (IS_ERR(plat)) 331 - return PTR_ERR(plat); 332 - } 333 285 334 286 irq = platform_get_irq(pdev, 0); 335 287 if (irq < 0) ··· 306 326 if (!keypad) 307 327 return -ENOMEM; 308 328 329 + keypad->stmpe = stmpe; 330 + keypad->variant = &stmpe_keypad_variants[stmpe->partnum]; 331 + 332 + of_property_read_u32(np, "debounce-interval", &keypad->debounce_ms); 333 + of_property_read_u32(np, "st,scan-count", &keypad->scan_count); 334 + keypad->no_autorepeat = of_property_read_bool(np, "st,no-autorepeat"); 335 + 309 336 input = devm_input_allocate_device(&pdev->dev); 310 337 if (!input) 311 338 return -ENOMEM; ··· 321 334 input->id.bustype = BUS_I2C; 322 335 input->dev.parent = &pdev->dev; 323 336 324 - error = matrix_keypad_build_keymap(plat->keymap_data, NULL, 325 - STMPE_KEYPAD_MAX_ROWS, 326 - STMPE_KEYPAD_MAX_COLS, 337 + error = matrix_keypad_parse_of_params(&pdev->dev, &rows, &cols); 338 + if (error) 339 + return error; 340 + 341 + error = matrix_keypad_build_keymap(NULL, NULL, rows, cols, 327 342 keypad->keymap, input); 328 343 if (error) 329 344 return error; 330 345 331 346 input_set_capability(input, EV_MSC, MSC_SCAN); 332 - if (!plat->no_autorepeat) 347 + if (!keypad->no_autorepeat) 333 348 __set_bit(EV_REP, input->evbit); 334 349 335 - stmpe_keypad_fill_used_pins(keypad); 350 + stmpe_keypad_fill_used_pins(keypad, rows, cols); 336 351 337 - keypad->stmpe = stmpe; 338 - keypad->plat = plat; 339 352 keypad->input = input; 340 - keypad->variant = &stmpe_keypad_variants[stmpe->partnum]; 341 353 342 354 error = stmpe_keypad_chip_init(keypad); 343 355 if (error < 0)
-20
include/linux/mfd/stmpe.h
··· 115 115 extern int stmpe_enable(struct stmpe *stmpe, unsigned int blocks); 116 116 extern int stmpe_disable(struct stmpe *stmpe, unsigned int blocks); 117 117 118 - struct matrix_keymap_data; 119 - 120 - /** 121 - * struct stmpe_keypad_platform_data - STMPE keypad platform data 122 - * @keymap_data: key map table and size 123 - * @debounce_ms: debounce interval, in ms. Maximum is 124 - * %STMPE_KEYPAD_MAX_DEBOUNCE. 125 - * @scan_count: number of key scanning cycles to confirm key data. 126 - * Maximum is %STMPE_KEYPAD_MAX_SCAN_COUNT. 127 - * @no_autorepeat: disable key autorepeat 128 - */ 129 - struct stmpe_keypad_platform_data { 130 - const struct matrix_keymap_data *keymap_data; 131 - unsigned int debounce_ms; 132 - unsigned int scan_count; 133 - bool no_autorepeat; 134 - }; 135 - 136 118 #define STMPE_GPIO_NOREQ_811_TOUCH (0xf0) 137 119 138 120 /** ··· 183 201 * @irq_gpio: gpio number over which irq will be requested (significant only if 184 202 * irq_over_gpio is true) 185 203 * @gpio: GPIO-specific platform data 186 - * @keypad: keypad-specific platform data 187 204 * @ts: touchscreen-specific platform data 188 205 */ 189 206 struct stmpe_platform_data { ··· 195 214 int autosleep_timeout; 196 215 197 216 struct stmpe_gpio_platform_data *gpio; 198 - struct stmpe_keypad_platform_data *keypad; 199 217 struct stmpe_ts_platform_data *ts; 200 218 }; 201 219