root/drivers/input/keyboard/pxa27x_keypad.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. pxa27x_keypad_matrix_key_parse_dt
  2. pxa27x_keypad_direct_key_parse_dt
  3. pxa27x_keypad_rotary_parse_dt
  4. pxa27x_keypad_build_keycode_from_dt
  5. pxa27x_keypad_build_keycode_from_dt
  6. pxa27x_keypad_build_keycode
  7. pxa27x_keypad_scan_matrix
  8. rotary_delta
  9. report_rotary_event
  10. pxa27x_keypad_scan_rotary
  11. pxa27x_keypad_scan_direct
  12. clear_wakeup_event
  13. pxa27x_keypad_irq_handler
  14. pxa27x_keypad_config
  15. pxa27x_keypad_open
  16. pxa27x_keypad_close
  17. pxa27x_keypad_suspend
  18. pxa27x_keypad_resume
  19. pxa27x_keypad_probe

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * linux/drivers/input/keyboard/pxa27x_keypad.c
   4  *
   5  * Driver for the pxa27x matrix keyboard controller.
   6  *
   7  * Created:     Feb 22, 2007
   8  * Author:      Rodolfo Giometti <giometti@linux.it>
   9  *
  10  * Based on a previous implementations by Kevin O'Connor
  11  * <kevin_at_koconnor.net> and Alex Osborne <bobofdoom@gmail.com> and
  12  * on some suggestions by Nicolas Pitre <nico@fluxnic.net>.
  13  */
  14 
  15 
  16 #include <linux/kernel.h>
  17 #include <linux/module.h>
  18 #include <linux/interrupt.h>
  19 #include <linux/input.h>
  20 #include <linux/io.h>
  21 #include <linux/device.h>
  22 #include <linux/platform_device.h>
  23 #include <linux/clk.h>
  24 #include <linux/err.h>
  25 #include <linux/input/matrix_keypad.h>
  26 #include <linux/slab.h>
  27 #include <linux/of.h>
  28 
  29 #include <linux/platform_data/keypad-pxa27x.h>
  30 /*
  31  * Keypad Controller registers
  32  */
  33 #define KPC             0x0000 /* Keypad Control register */
  34 #define KPDK            0x0008 /* Keypad Direct Key register */
  35 #define KPREC           0x0010 /* Keypad Rotary Encoder register */
  36 #define KPMK            0x0018 /* Keypad Matrix Key register */
  37 #define KPAS            0x0020 /* Keypad Automatic Scan register */
  38 
  39 /* Keypad Automatic Scan Multiple Key Presser register 0-3 */
  40 #define KPASMKP0        0x0028
  41 #define KPASMKP1        0x0030
  42 #define KPASMKP2        0x0038
  43 #define KPASMKP3        0x0040
  44 #define KPKDI           0x0048
  45 
  46 /* bit definitions */
  47 #define KPC_MKRN(n)     ((((n) - 1) & 0x7) << 26) /* matrix key row number */
  48 #define KPC_MKCN(n)     ((((n) - 1) & 0x7) << 23) /* matrix key column number */
  49 #define KPC_DKN(n)      ((((n) - 1) & 0x7) << 6)  /* direct key number */
  50 
  51 #define KPC_AS          (0x1 << 30)  /* Automatic Scan bit */
  52 #define KPC_ASACT       (0x1 << 29)  /* Automatic Scan on Activity */
  53 #define KPC_MI          (0x1 << 22)  /* Matrix interrupt bit */
  54 #define KPC_IMKP        (0x1 << 21)  /* Ignore Multiple Key Press */
  55 
  56 #define KPC_MS(n)       (0x1 << (13 + (n)))     /* Matrix scan line 'n' */
  57 #define KPC_MS_ALL      (0xff << 13)
  58 
  59 #define KPC_ME          (0x1 << 12)  /* Matrix Keypad Enable */
  60 #define KPC_MIE         (0x1 << 11)  /* Matrix Interrupt Enable */
  61 #define KPC_DK_DEB_SEL  (0x1 <<  9)  /* Direct Keypad Debounce Select */
  62 #define KPC_DI          (0x1 <<  5)  /* Direct key interrupt bit */
  63 #define KPC_RE_ZERO_DEB (0x1 <<  4)  /* Rotary Encoder Zero Debounce */
  64 #define KPC_REE1        (0x1 <<  3)  /* Rotary Encoder1 Enable */
  65 #define KPC_REE0        (0x1 <<  2)  /* Rotary Encoder0 Enable */
  66 #define KPC_DE          (0x1 <<  1)  /* Direct Keypad Enable */
  67 #define KPC_DIE         (0x1 <<  0)  /* Direct Keypad interrupt Enable */
  68 
  69 #define KPDK_DKP        (0x1 << 31)
  70 #define KPDK_DK(n)      ((n) & 0xff)
  71 
  72 #define KPREC_OF1       (0x1 << 31)
  73 #define kPREC_UF1       (0x1 << 30)
  74 #define KPREC_OF0       (0x1 << 15)
  75 #define KPREC_UF0       (0x1 << 14)
  76 
  77 #define KPREC_RECOUNT0(n)       ((n) & 0xff)
  78 #define KPREC_RECOUNT1(n)       (((n) >> 16) & 0xff)
  79 
  80 #define KPMK_MKP        (0x1 << 31)
  81 #define KPAS_SO         (0x1 << 31)
  82 #define KPASMKPx_SO     (0x1 << 31)
  83 
  84 #define KPAS_MUKP(n)    (((n) >> 26) & 0x1f)
  85 #define KPAS_RP(n)      (((n) >> 4) & 0xf)
  86 #define KPAS_CP(n)      ((n) & 0xf)
  87 
  88 #define KPASMKP_MKC_MASK        (0xff)
  89 
  90 #define keypad_readl(off)       __raw_readl(keypad->mmio_base + (off))
  91 #define keypad_writel(off, v)   __raw_writel((v), keypad->mmio_base + (off))
  92 
  93 #define MAX_MATRIX_KEY_NUM      (MAX_MATRIX_KEY_ROWS * MAX_MATRIX_KEY_COLS)
  94 #define MAX_KEYPAD_KEYS         (MAX_MATRIX_KEY_NUM + MAX_DIRECT_KEY_NUM)
  95 
  96 struct pxa27x_keypad {
  97         const struct pxa27x_keypad_platform_data *pdata;
  98 
  99         struct clk *clk;
 100         struct input_dev *input_dev;
 101         void __iomem *mmio_base;
 102 
 103         int irq;
 104 
 105         unsigned short keycodes[MAX_KEYPAD_KEYS];
 106         int rotary_rel_code[2];
 107 
 108         unsigned int row_shift;
 109 
 110         /* state row bits of each column scan */
 111         uint32_t matrix_key_state[MAX_MATRIX_KEY_COLS];
 112         uint32_t direct_key_state;
 113 
 114         unsigned int direct_key_mask;
 115 };
 116 
 117 #ifdef CONFIG_OF
 118 static int pxa27x_keypad_matrix_key_parse_dt(struct pxa27x_keypad *keypad,
 119                                 struct pxa27x_keypad_platform_data *pdata)
 120 {
 121         struct input_dev *input_dev = keypad->input_dev;
 122         struct device *dev = input_dev->dev.parent;
 123         u32 rows, cols;
 124         int error;
 125 
 126         error = matrix_keypad_parse_properties(dev, &rows, &cols);
 127         if (error)
 128                 return error;
 129 
 130         if (rows > MAX_MATRIX_KEY_ROWS || cols > MAX_MATRIX_KEY_COLS) {
 131                 dev_err(dev, "rows or cols exceeds maximum value\n");
 132                 return -EINVAL;
 133         }
 134 
 135         pdata->matrix_key_rows = rows;
 136         pdata->matrix_key_cols = cols;
 137 
 138         error = matrix_keypad_build_keymap(NULL, NULL,
 139                                            pdata->matrix_key_rows,
 140                                            pdata->matrix_key_cols,
 141                                            keypad->keycodes, input_dev);
 142         if (error)
 143                 return error;
 144 
 145         return 0;
 146 }
 147 
 148 static int pxa27x_keypad_direct_key_parse_dt(struct pxa27x_keypad *keypad,
 149                                 struct pxa27x_keypad_platform_data *pdata)
 150 {
 151         struct input_dev *input_dev = keypad->input_dev;
 152         struct device *dev = input_dev->dev.parent;
 153         struct device_node *np = dev->of_node;
 154         const __be16 *prop;
 155         unsigned short code;
 156         unsigned int proplen, size;
 157         int i;
 158         int error;
 159 
 160         error = of_property_read_u32(np, "marvell,direct-key-count",
 161                                      &pdata->direct_key_num);
 162         if (error) {
 163                 /*
 164                  * If do not have marvel,direct-key-count defined,
 165                  * it means direct key is not supported.
 166                  */
 167                 return error == -EINVAL ? 0 : error;
 168         }
 169 
 170         error = of_property_read_u32(np, "marvell,direct-key-mask",
 171                                      &pdata->direct_key_mask);
 172         if (error) {
 173                 if (error != -EINVAL)
 174                         return error;
 175 
 176                 /*
 177                  * If marvell,direct-key-mask is not defined, driver will use
 178                  * default value. Default value is set when configure the keypad.
 179                  */
 180                 pdata->direct_key_mask = 0;
 181         }
 182 
 183         pdata->direct_key_low_active = of_property_read_bool(np,
 184                                         "marvell,direct-key-low-active");
 185 
 186         prop = of_get_property(np, "marvell,direct-key-map", &proplen);
 187         if (!prop)
 188                 return -EINVAL;
 189 
 190         if (proplen % sizeof(u16))
 191                 return -EINVAL;
 192 
 193         size = proplen / sizeof(u16);
 194 
 195         /* Only MAX_DIRECT_KEY_NUM is accepted.*/
 196         if (size > MAX_DIRECT_KEY_NUM)
 197                 return -EINVAL;
 198 
 199         for (i = 0; i < size; i++) {
 200                 code = be16_to_cpup(prop + i);
 201                 keypad->keycodes[MAX_MATRIX_KEY_NUM + i] = code;
 202                 __set_bit(code, input_dev->keybit);
 203         }
 204 
 205         return 0;
 206 }
 207 
 208 static int pxa27x_keypad_rotary_parse_dt(struct pxa27x_keypad *keypad,
 209                                 struct pxa27x_keypad_platform_data *pdata)
 210 {
 211         const __be32 *prop;
 212         int i, relkey_ret;
 213         unsigned int code, proplen;
 214         const char *rotaryname[2] = {
 215                         "marvell,rotary0", "marvell,rotary1"};
 216         const char relkeyname[] = {"marvell,rotary-rel-key"};
 217         struct input_dev *input_dev = keypad->input_dev;
 218         struct device *dev = input_dev->dev.parent;
 219         struct device_node *np = dev->of_node;
 220 
 221         relkey_ret = of_property_read_u32(np, relkeyname, &code);
 222         /* if can read correct rotary key-code, we do not need this. */
 223         if (relkey_ret == 0) {
 224                 unsigned short relcode;
 225 
 226                 /* rotary0 taks lower half, rotary1 taks upper half. */
 227                 relcode = code & 0xffff;
 228                 pdata->rotary0_rel_code = (code & 0xffff);
 229                 __set_bit(relcode, input_dev->relbit);
 230 
 231                 relcode = code >> 16;
 232                 pdata->rotary1_rel_code = relcode;
 233                 __set_bit(relcode, input_dev->relbit);
 234         }
 235 
 236         for (i = 0; i < 2; i++) {
 237                 prop = of_get_property(np, rotaryname[i], &proplen);
 238                 /*
 239                  * If the prop is not set, it means keypad does not need
 240                  * initialize the rotaryX.
 241                  */
 242                 if (!prop)
 243                         continue;
 244 
 245                 code = be32_to_cpup(prop);
 246                 /*
 247                  * Not all up/down key code are valid.
 248                  * Now we depends on direct-rel-code.
 249                  */
 250                 if ((!(code & 0xffff) || !(code >> 16)) && relkey_ret) {
 251                         return relkey_ret;
 252                 } else {
 253                         unsigned int n = MAX_MATRIX_KEY_NUM + (i << 1);
 254                         unsigned short keycode;
 255 
 256                         keycode = code & 0xffff;
 257                         keypad->keycodes[n] = keycode;
 258                         __set_bit(keycode, input_dev->keybit);
 259 
 260                         keycode = code >> 16;
 261                         keypad->keycodes[n + 1] = keycode;
 262                         __set_bit(keycode, input_dev->keybit);
 263 
 264                         if (i == 0)
 265                                 pdata->rotary0_rel_code = -1;
 266                         else
 267                                 pdata->rotary1_rel_code = -1;
 268                 }
 269                 if (i == 0)
 270                         pdata->enable_rotary0 = 1;
 271                 else
 272                         pdata->enable_rotary1 = 1;
 273         }
 274 
 275         keypad->rotary_rel_code[0] = pdata->rotary0_rel_code;
 276         keypad->rotary_rel_code[1] = pdata->rotary1_rel_code;
 277 
 278         return 0;
 279 }
 280 
 281 static int pxa27x_keypad_build_keycode_from_dt(struct pxa27x_keypad *keypad)
 282 {
 283         struct input_dev *input_dev = keypad->input_dev;
 284         struct device *dev = input_dev->dev.parent;
 285         struct device_node *np = dev->of_node;
 286         struct pxa27x_keypad_platform_data *pdata;
 287         int error;
 288 
 289         pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
 290         if (!pdata) {
 291                 dev_err(dev, "failed to allocate memory for pdata\n");
 292                 return -ENOMEM;
 293         }
 294 
 295         error = pxa27x_keypad_matrix_key_parse_dt(keypad, pdata);
 296         if (error) {
 297                 dev_err(dev, "failed to parse matrix key\n");
 298                 return error;
 299         }
 300 
 301         error = pxa27x_keypad_direct_key_parse_dt(keypad, pdata);
 302         if (error) {
 303                 dev_err(dev, "failed to parse direct key\n");
 304                 return error;
 305         }
 306 
 307         error = pxa27x_keypad_rotary_parse_dt(keypad, pdata);
 308         if (error) {
 309                 dev_err(dev, "failed to parse rotary key\n");
 310                 return error;
 311         }
 312 
 313         error = of_property_read_u32(np, "marvell,debounce-interval",
 314                                      &pdata->debounce_interval);
 315         if (error) {
 316                 dev_err(dev, "failed to parse debounce-interval\n");
 317                 return error;
 318         }
 319 
 320         /*
 321          * The keycodes may not only includes matrix key but also the direct
 322          * key or rotary key.
 323          */
 324         input_dev->keycodemax = ARRAY_SIZE(keypad->keycodes);
 325 
 326         keypad->pdata = pdata;
 327         return 0;
 328 }
 329 
 330 #else
 331 
 332 static int pxa27x_keypad_build_keycode_from_dt(struct pxa27x_keypad *keypad)
 333 {
 334         dev_info(keypad->input_dev->dev.parent, "missing platform data\n");
 335 
 336         return -EINVAL;
 337 }
 338 
 339 #endif
 340 
 341 static int pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad)
 342 {
 343         const struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
 344         struct input_dev *input_dev = keypad->input_dev;
 345         unsigned short keycode;
 346         int i;
 347         int error;
 348 
 349         error = matrix_keypad_build_keymap(pdata->matrix_keymap_data, NULL,
 350                                            pdata->matrix_key_rows,
 351                                            pdata->matrix_key_cols,
 352                                            keypad->keycodes, input_dev);
 353         if (error)
 354                 return error;
 355 
 356         /*
 357          * The keycodes may not only include matrix keys but also the direct
 358          * or rotary keys.
 359          */
 360         input_dev->keycodemax = ARRAY_SIZE(keypad->keycodes);
 361 
 362         /* For direct keys. */
 363         for (i = 0; i < pdata->direct_key_num; i++) {
 364                 keycode = pdata->direct_key_map[i];
 365                 keypad->keycodes[MAX_MATRIX_KEY_NUM + i] = keycode;
 366                 __set_bit(keycode, input_dev->keybit);
 367         }
 368 
 369         if (pdata->enable_rotary0) {
 370                 if (pdata->rotary0_up_key && pdata->rotary0_down_key) {
 371                         keycode = pdata->rotary0_up_key;
 372                         keypad->keycodes[MAX_MATRIX_KEY_NUM + 0] = keycode;
 373                         __set_bit(keycode, input_dev->keybit);
 374 
 375                         keycode = pdata->rotary0_down_key;
 376                         keypad->keycodes[MAX_MATRIX_KEY_NUM + 1] = keycode;
 377                         __set_bit(keycode, input_dev->keybit);
 378 
 379                         keypad->rotary_rel_code[0] = -1;
 380                 } else {
 381                         keypad->rotary_rel_code[0] = pdata->rotary0_rel_code;
 382                         __set_bit(pdata->rotary0_rel_code, input_dev->relbit);
 383                 }
 384         }
 385 
 386         if (pdata->enable_rotary1) {
 387                 if (pdata->rotary1_up_key && pdata->rotary1_down_key) {
 388                         keycode = pdata->rotary1_up_key;
 389                         keypad->keycodes[MAX_MATRIX_KEY_NUM + 2] = keycode;
 390                         __set_bit(keycode, input_dev->keybit);
 391 
 392                         keycode = pdata->rotary1_down_key;
 393                         keypad->keycodes[MAX_MATRIX_KEY_NUM + 3] = keycode;
 394                         __set_bit(keycode, input_dev->keybit);
 395 
 396                         keypad->rotary_rel_code[1] = -1;
 397                 } else {
 398                         keypad->rotary_rel_code[1] = pdata->rotary1_rel_code;
 399                         __set_bit(pdata->rotary1_rel_code, input_dev->relbit);
 400                 }
 401         }
 402 
 403         __clear_bit(KEY_RESERVED, input_dev->keybit);
 404 
 405         return 0;
 406 }
 407 
 408 static void pxa27x_keypad_scan_matrix(struct pxa27x_keypad *keypad)
 409 {
 410         const struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
 411         struct input_dev *input_dev = keypad->input_dev;
 412         int row, col, num_keys_pressed = 0;
 413         uint32_t new_state[MAX_MATRIX_KEY_COLS];
 414         uint32_t kpas = keypad_readl(KPAS);
 415 
 416         num_keys_pressed = KPAS_MUKP(kpas);
 417 
 418         memset(new_state, 0, sizeof(new_state));
 419 
 420         if (num_keys_pressed == 0)
 421                 goto scan;
 422 
 423         if (num_keys_pressed == 1) {
 424                 col = KPAS_CP(kpas);
 425                 row = KPAS_RP(kpas);
 426 
 427                 /* if invalid row/col, treat as no key pressed */
 428                 if (col >= pdata->matrix_key_cols ||
 429                     row >= pdata->matrix_key_rows)
 430                         goto scan;
 431 
 432                 new_state[col] = (1 << row);
 433                 goto scan;
 434         }
 435 
 436         if (num_keys_pressed > 1) {
 437                 uint32_t kpasmkp0 = keypad_readl(KPASMKP0);
 438                 uint32_t kpasmkp1 = keypad_readl(KPASMKP1);
 439                 uint32_t kpasmkp2 = keypad_readl(KPASMKP2);
 440                 uint32_t kpasmkp3 = keypad_readl(KPASMKP3);
 441 
 442                 new_state[0] = kpasmkp0 & KPASMKP_MKC_MASK;
 443                 new_state[1] = (kpasmkp0 >> 16) & KPASMKP_MKC_MASK;
 444                 new_state[2] = kpasmkp1 & KPASMKP_MKC_MASK;
 445                 new_state[3] = (kpasmkp1 >> 16) & KPASMKP_MKC_MASK;
 446                 new_state[4] = kpasmkp2 & KPASMKP_MKC_MASK;
 447                 new_state[5] = (kpasmkp2 >> 16) & KPASMKP_MKC_MASK;
 448                 new_state[6] = kpasmkp3 & KPASMKP_MKC_MASK;
 449                 new_state[7] = (kpasmkp3 >> 16) & KPASMKP_MKC_MASK;
 450         }
 451 scan:
 452         for (col = 0; col < pdata->matrix_key_cols; col++) {
 453                 uint32_t bits_changed;
 454                 int code;
 455 
 456                 bits_changed = keypad->matrix_key_state[col] ^ new_state[col];
 457                 if (bits_changed == 0)
 458                         continue;
 459 
 460                 for (row = 0; row < pdata->matrix_key_rows; row++) {
 461                         if ((bits_changed & (1 << row)) == 0)
 462                                 continue;
 463 
 464                         code = MATRIX_SCAN_CODE(row, col, keypad->row_shift);
 465 
 466                         input_event(input_dev, EV_MSC, MSC_SCAN, code);
 467                         input_report_key(input_dev, keypad->keycodes[code],
 468                                          new_state[col] & (1 << row));
 469                 }
 470         }
 471         input_sync(input_dev);
 472         memcpy(keypad->matrix_key_state, new_state, sizeof(new_state));
 473 }
 474 
 475 #define DEFAULT_KPREC   (0x007f007f)
 476 
 477 static inline int rotary_delta(uint32_t kprec)
 478 {
 479         if (kprec & KPREC_OF0)
 480                 return (kprec & 0xff) + 0x7f;
 481         else if (kprec & KPREC_UF0)
 482                 return (kprec & 0xff) - 0x7f - 0xff;
 483         else
 484                 return (kprec & 0xff) - 0x7f;
 485 }
 486 
 487 static void report_rotary_event(struct pxa27x_keypad *keypad, int r, int delta)
 488 {
 489         struct input_dev *dev = keypad->input_dev;
 490 
 491         if (delta == 0)
 492                 return;
 493 
 494         if (keypad->rotary_rel_code[r] == -1) {
 495                 int code = MAX_MATRIX_KEY_NUM + 2 * r + (delta > 0 ? 0 : 1);
 496                 unsigned char keycode = keypad->keycodes[code];
 497 
 498                 /* simulate a press-n-release */
 499                 input_event(dev, EV_MSC, MSC_SCAN, code);
 500                 input_report_key(dev, keycode, 1);
 501                 input_sync(dev);
 502                 input_event(dev, EV_MSC, MSC_SCAN, code);
 503                 input_report_key(dev, keycode, 0);
 504                 input_sync(dev);
 505         } else {
 506                 input_report_rel(dev, keypad->rotary_rel_code[r], delta);
 507                 input_sync(dev);
 508         }
 509 }
 510 
 511 static void pxa27x_keypad_scan_rotary(struct pxa27x_keypad *keypad)
 512 {
 513         const struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
 514         uint32_t kprec;
 515 
 516         /* read and reset to default count value */
 517         kprec = keypad_readl(KPREC);
 518         keypad_writel(KPREC, DEFAULT_KPREC);
 519 
 520         if (pdata->enable_rotary0)
 521                 report_rotary_event(keypad, 0, rotary_delta(kprec));
 522 
 523         if (pdata->enable_rotary1)
 524                 report_rotary_event(keypad, 1, rotary_delta(kprec >> 16));
 525 }
 526 
 527 static void pxa27x_keypad_scan_direct(struct pxa27x_keypad *keypad)
 528 {
 529         const struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
 530         struct input_dev *input_dev = keypad->input_dev;
 531         unsigned int new_state;
 532         uint32_t kpdk, bits_changed;
 533         int i;
 534 
 535         kpdk = keypad_readl(KPDK);
 536 
 537         if (pdata->enable_rotary0 || pdata->enable_rotary1)
 538                 pxa27x_keypad_scan_rotary(keypad);
 539 
 540         /*
 541          * The KPDR_DK only output the key pin level, so it relates to board,
 542          * and low level may be active.
 543          */
 544         if (pdata->direct_key_low_active)
 545                 new_state = ~KPDK_DK(kpdk) & keypad->direct_key_mask;
 546         else
 547                 new_state = KPDK_DK(kpdk) & keypad->direct_key_mask;
 548 
 549         bits_changed = keypad->direct_key_state ^ new_state;
 550 
 551         if (bits_changed == 0)
 552                 return;
 553 
 554         for (i = 0; i < pdata->direct_key_num; i++) {
 555                 if (bits_changed & (1 << i)) {
 556                         int code = MAX_MATRIX_KEY_NUM + i;
 557 
 558                         input_event(input_dev, EV_MSC, MSC_SCAN, code);
 559                         input_report_key(input_dev, keypad->keycodes[code],
 560                                          new_state & (1 << i));
 561                 }
 562         }
 563         input_sync(input_dev);
 564         keypad->direct_key_state = new_state;
 565 }
 566 
 567 static void clear_wakeup_event(struct pxa27x_keypad *keypad)
 568 {
 569         const struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
 570 
 571         if (pdata->clear_wakeup_event)
 572                 (pdata->clear_wakeup_event)();
 573 }
 574 
 575 static irqreturn_t pxa27x_keypad_irq_handler(int irq, void *dev_id)
 576 {
 577         struct pxa27x_keypad *keypad = dev_id;
 578         unsigned long kpc = keypad_readl(KPC);
 579 
 580         clear_wakeup_event(keypad);
 581 
 582         if (kpc & KPC_DI)
 583                 pxa27x_keypad_scan_direct(keypad);
 584 
 585         if (kpc & KPC_MI)
 586                 pxa27x_keypad_scan_matrix(keypad);
 587 
 588         return IRQ_HANDLED;
 589 }
 590 
 591 static void pxa27x_keypad_config(struct pxa27x_keypad *keypad)
 592 {
 593         const struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
 594         unsigned int mask = 0, direct_key_num = 0;
 595         unsigned long kpc = 0;
 596 
 597         /* clear pending interrupt bit */
 598         keypad_readl(KPC);
 599 
 600         /* enable matrix keys with automatic scan */
 601         if (pdata->matrix_key_rows && pdata->matrix_key_cols) {
 602                 kpc |= KPC_ASACT | KPC_MIE | KPC_ME | KPC_MS_ALL;
 603                 kpc |= KPC_MKRN(pdata->matrix_key_rows) |
 604                        KPC_MKCN(pdata->matrix_key_cols);
 605         }
 606 
 607         /* enable rotary key, debounce interval same as direct keys */
 608         if (pdata->enable_rotary0) {
 609                 mask |= 0x03;
 610                 direct_key_num = 2;
 611                 kpc |= KPC_REE0;
 612         }
 613 
 614         if (pdata->enable_rotary1) {
 615                 mask |= 0x0c;
 616                 direct_key_num = 4;
 617                 kpc |= KPC_REE1;
 618         }
 619 
 620         if (pdata->direct_key_num > direct_key_num)
 621                 direct_key_num = pdata->direct_key_num;
 622 
 623         /*
 624          * Direct keys usage may not start from KP_DKIN0, check the platfrom
 625          * mask data to config the specific.
 626          */
 627         if (pdata->direct_key_mask)
 628                 keypad->direct_key_mask = pdata->direct_key_mask;
 629         else
 630                 keypad->direct_key_mask = ((1 << direct_key_num) - 1) & ~mask;
 631 
 632         /* enable direct key */
 633         if (direct_key_num)
 634                 kpc |= KPC_DE | KPC_DIE | KPC_DKN(direct_key_num);
 635 
 636         keypad_writel(KPC, kpc | KPC_RE_ZERO_DEB);
 637         keypad_writel(KPREC, DEFAULT_KPREC);
 638         keypad_writel(KPKDI, pdata->debounce_interval);
 639 }
 640 
 641 static int pxa27x_keypad_open(struct input_dev *dev)
 642 {
 643         struct pxa27x_keypad *keypad = input_get_drvdata(dev);
 644         int ret;
 645         /* Enable unit clock */
 646         ret = clk_prepare_enable(keypad->clk);
 647         if (ret)
 648                 return ret;
 649 
 650         pxa27x_keypad_config(keypad);
 651 
 652         return 0;
 653 }
 654 
 655 static void pxa27x_keypad_close(struct input_dev *dev)
 656 {
 657         struct pxa27x_keypad *keypad = input_get_drvdata(dev);
 658 
 659         /* Disable clock unit */
 660         clk_disable_unprepare(keypad->clk);
 661 }
 662 
 663 #ifdef CONFIG_PM_SLEEP
 664 static int pxa27x_keypad_suspend(struct device *dev)
 665 {
 666         struct platform_device *pdev = to_platform_device(dev);
 667         struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
 668 
 669         /*
 670          * If the keypad is used a wake up source, clock can not be disabled.
 671          * Or it can not detect the key pressing.
 672          */
 673         if (device_may_wakeup(&pdev->dev))
 674                 enable_irq_wake(keypad->irq);
 675         else
 676                 clk_disable_unprepare(keypad->clk);
 677 
 678         return 0;
 679 }
 680 
 681 static int pxa27x_keypad_resume(struct device *dev)
 682 {
 683         struct platform_device *pdev = to_platform_device(dev);
 684         struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
 685         struct input_dev *input_dev = keypad->input_dev;
 686         int ret = 0;
 687 
 688         /*
 689          * If the keypad is used as wake up source, the clock is not turned
 690          * off. So do not need configure it again.
 691          */
 692         if (device_may_wakeup(&pdev->dev)) {
 693                 disable_irq_wake(keypad->irq);
 694         } else {
 695                 mutex_lock(&input_dev->mutex);
 696 
 697                 if (input_dev->users) {
 698                         /* Enable unit clock */
 699                         ret = clk_prepare_enable(keypad->clk);
 700                         if (!ret)
 701                                 pxa27x_keypad_config(keypad);
 702                 }
 703 
 704                 mutex_unlock(&input_dev->mutex);
 705         }
 706 
 707         return ret;
 708 }
 709 #endif
 710 
 711 static SIMPLE_DEV_PM_OPS(pxa27x_keypad_pm_ops,
 712                          pxa27x_keypad_suspend, pxa27x_keypad_resume);
 713 
 714 
 715 static int pxa27x_keypad_probe(struct platform_device *pdev)
 716 {
 717         const struct pxa27x_keypad_platform_data *pdata =
 718                                         dev_get_platdata(&pdev->dev);
 719         struct device_node *np = pdev->dev.of_node;
 720         struct pxa27x_keypad *keypad;
 721         struct input_dev *input_dev;
 722         struct resource *res;
 723         int irq, error;
 724 
 725         /* Driver need build keycode from device tree or pdata */
 726         if (!np && !pdata)
 727                 return -EINVAL;
 728 
 729         irq = platform_get_irq(pdev, 0);
 730         if (irq < 0)
 731                 return -ENXIO;
 732 
 733         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 734         if (res == NULL) {
 735                 dev_err(&pdev->dev, "failed to get I/O memory\n");
 736                 return -ENXIO;
 737         }
 738 
 739         keypad = devm_kzalloc(&pdev->dev, sizeof(*keypad),
 740                               GFP_KERNEL);
 741         if (!keypad)
 742                 return -ENOMEM;
 743 
 744         input_dev = devm_input_allocate_device(&pdev->dev);
 745         if (!input_dev)
 746                 return -ENOMEM;
 747 
 748         keypad->pdata = pdata;
 749         keypad->input_dev = input_dev;
 750         keypad->irq = irq;
 751 
 752         keypad->mmio_base = devm_ioremap_resource(&pdev->dev, res);
 753         if (IS_ERR(keypad->mmio_base))
 754                 return PTR_ERR(keypad->mmio_base);
 755 
 756         keypad->clk = devm_clk_get(&pdev->dev, NULL);
 757         if (IS_ERR(keypad->clk)) {
 758                 dev_err(&pdev->dev, "failed to get keypad clock\n");
 759                 return PTR_ERR(keypad->clk);
 760         }
 761 
 762         input_dev->name = pdev->name;
 763         input_dev->id.bustype = BUS_HOST;
 764         input_dev->open = pxa27x_keypad_open;
 765         input_dev->close = pxa27x_keypad_close;
 766         input_dev->dev.parent = &pdev->dev;
 767 
 768         input_dev->keycode = keypad->keycodes;
 769         input_dev->keycodesize = sizeof(keypad->keycodes[0]);
 770         input_dev->keycodemax = ARRAY_SIZE(keypad->keycodes);
 771 
 772         input_set_drvdata(input_dev, keypad);
 773 
 774         input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);
 775         input_set_capability(input_dev, EV_MSC, MSC_SCAN);
 776 
 777         if (pdata) {
 778                 error = pxa27x_keypad_build_keycode(keypad);
 779         } else {
 780                 error = pxa27x_keypad_build_keycode_from_dt(keypad);
 781                 /*
 782                  * Data that we get from DT resides in dynamically
 783                  * allocated memory so we need to update our pdata
 784                  * pointer.
 785                  */
 786                 pdata = keypad->pdata;
 787         }
 788         if (error) {
 789                 dev_err(&pdev->dev, "failed to build keycode\n");
 790                 return error;
 791         }
 792 
 793         keypad->row_shift = get_count_order(pdata->matrix_key_cols);
 794 
 795         if ((pdata->enable_rotary0 && keypad->rotary_rel_code[0] != -1) ||
 796             (pdata->enable_rotary1 && keypad->rotary_rel_code[1] != -1)) {
 797                 input_dev->evbit[0] |= BIT_MASK(EV_REL);
 798         }
 799 
 800         error = devm_request_irq(&pdev->dev, irq, pxa27x_keypad_irq_handler,
 801                                  0, pdev->name, keypad);
 802         if (error) {
 803                 dev_err(&pdev->dev, "failed to request IRQ\n");
 804                 return error;
 805         }
 806 
 807         /* Register the input device */
 808         error = input_register_device(input_dev);
 809         if (error) {
 810                 dev_err(&pdev->dev, "failed to register input device\n");
 811                 return error;
 812         }
 813 
 814         platform_set_drvdata(pdev, keypad);
 815         device_init_wakeup(&pdev->dev, 1);
 816 
 817         return 0;
 818 }
 819 
 820 #ifdef CONFIG_OF
 821 static const struct of_device_id pxa27x_keypad_dt_match[] = {
 822         { .compatible = "marvell,pxa27x-keypad" },
 823         {},
 824 };
 825 MODULE_DEVICE_TABLE(of, pxa27x_keypad_dt_match);
 826 #endif
 827 
 828 static struct platform_driver pxa27x_keypad_driver = {
 829         .probe          = pxa27x_keypad_probe,
 830         .driver         = {
 831                 .name   = "pxa27x-keypad",
 832                 .of_match_table = of_match_ptr(pxa27x_keypad_dt_match),
 833                 .pm     = &pxa27x_keypad_pm_ops,
 834         },
 835 };
 836 module_platform_driver(pxa27x_keypad_driver);
 837 
 838 MODULE_DESCRIPTION("PXA27x Keypad Controller Driver");
 839 MODULE_LICENSE("GPL");
 840 /* work with hotplug and coldplug */
 841 MODULE_ALIAS("platform:pxa27x-keypad");

/* [<][>][^][v][top][bottom][index][help] */