Lines Matching defs:kpad
391 struct adp5589_kpad *kpad = gpiochip_get_data(chip);
392 unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
393 unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
395 return !!(adp5589_read(kpad->client,
396 kpad->var->reg(ADP5589_GPI_STATUS_A) + bank) &
403 struct adp5589_kpad *kpad = gpiochip_get_data(chip);
404 unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
405 unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
407 mutex_lock(&kpad->gpio_lock);
410 kpad->dat_out[bank] |= bit;
412 kpad->dat_out[bank] &= ~bit;
414 adp5589_write(kpad->client, kpad->var->reg(ADP5589_GPO_DATA_OUT_A) +
415 bank, kpad->dat_out[bank]);
417 mutex_unlock(&kpad->gpio_lock);
422 struct adp5589_kpad *kpad = gpiochip_get_data(chip);
423 unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
424 unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
427 mutex_lock(&kpad->gpio_lock);
429 kpad->dir[bank] &= ~bit;
430 ret = adp5589_write(kpad->client,
431 kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
432 kpad->dir[bank]);
434 mutex_unlock(&kpad->gpio_lock);
442 struct adp5589_kpad *kpad = gpiochip_get_data(chip);
443 unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
444 unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
447 mutex_lock(&kpad->gpio_lock);
449 kpad->dir[bank] |= bit;
452 kpad->dat_out[bank] |= bit;
454 kpad->dat_out[bank] &= ~bit;
456 ret = adp5589_write(kpad->client, kpad->var->reg(ADP5589_GPO_DATA_OUT_A)
457 + bank, kpad->dat_out[bank]);
458 ret |= adp5589_write(kpad->client,
459 kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
460 kpad->dir[bank]);
462 mutex_unlock(&kpad->gpio_lock);
467 static int adp5589_build_gpiomap(struct adp5589_kpad *kpad,
476 for (i = 0; i < kpad->var->maxgpio; i++)
480 for (i = 0; i < kpad->gpimapsize; i++)
481 pin_used[kpad->gpimap[i].pin - kpad->var->gpi_pin_base] = true;
483 if (kpad->extend_cfg & R4_EXTEND_CFG)
486 if (kpad->extend_cfg & C4_EXTEND_CFG)
487 pin_used[kpad->var->c4_extend_cfg] = true;
489 if (!kpad->support_row5)
492 for (i = 0; i < kpad->var->maxgpio; i++)
494 kpad->gpiomap[n_unused++] = i;
499 static int adp5589_gpio_add(struct adp5589_kpad *kpad)
501 struct device *dev = &kpad->client->dev;
509 kpad->gc.parent = dev;
510 kpad->gc.ngpio = adp5589_build_gpiomap(kpad, pdata);
511 if (kpad->gc.ngpio == 0) {
516 kpad->gc.direction_input = adp5589_gpio_direction_input;
517 kpad->gc.direction_output = adp5589_gpio_direction_output;
518 kpad->gc.get = adp5589_gpio_get_value;
519 kpad->gc.set = adp5589_gpio_set_value;
520 kpad->gc.can_sleep = 1;
522 kpad->gc.base = gpio_data->gpio_start;
523 kpad->gc.label = kpad->client->name;
524 kpad->gc.owner = THIS_MODULE;
526 mutex_init(&kpad->gpio_lock);
528 error = devm_gpiochip_add_data(dev, &kpad->gc, kpad);
532 for (i = 0; i <= kpad->var->bank(kpad->var->maxgpio); i++) {
533 kpad->dat_out[i] = adp5589_read(kpad->client, kpad->var->reg(
535 kpad->dir[i] = adp5589_read(kpad->client, kpad->var->reg(
542 static inline int adp5589_gpio_add(struct adp5589_kpad *kpad)
548 static void adp5589_report_switches(struct adp5589_kpad *kpad,
553 for (i = 0; i < kpad->gpimapsize; i++) {
554 if (key_val == kpad->gpimap[i].pin) {
555 input_report_switch(kpad->input,
556 kpad->gpimap[i].sw_evt,
563 static void adp5589_report_events(struct adp5589_kpad *kpad, int ev_cnt)
568 int key = adp5589_read(kpad->client, ADP5589_5_FIFO_1 + i);
571 if (key_val >= kpad->var->gpi_pin_base &&
572 key_val <= kpad->var->gpi_pin_end) {
573 adp5589_report_switches(kpad, key, key_val);
575 input_report_key(kpad->input,
576 kpad->keycode[key_val - 1],
584 struct adp5589_kpad *kpad = handle;
585 struct i2c_client *client = kpad->client;
596 adp5589_report_events(kpad, ev_cnt);
597 input_sync(kpad->input);
606 static int adp5589_get_evcode(struct adp5589_kpad *kpad, unsigned short key)
610 for (i = 0; i < kpad->var->keymapsize; i++)
611 if (key == kpad->keycode[i])
614 dev_err(&kpad->client->dev, "RESET/UNLOCK key not in keycode map\n");
619 static int adp5589_setup(struct adp5589_kpad *kpad)
621 struct i2c_client *client = kpad->client;
624 u8 (*reg) (u8) = kpad->var->reg;
630 pdata->keypad_en_mask & kpad->var->row_mask);
632 (pdata->keypad_en_mask >> kpad->var->col_shift) &
633 kpad->var->col_mask);
635 if (!kpad->is_adp5585)
639 if (!kpad->is_adp5585 && pdata->en_keylock) {
655 if (pin <= kpad->var->gpi_pin_row_end) {
656 evt_mode1 |= BIT(pin - kpad->var->gpi_pin_row_base);
659 BIT(pin - kpad->var->gpi_pin_col_base) & 0xFF;
660 if (!kpad->is_adp5585)
662 BIT(pin - kpad->var->gpi_pin_col_base) >> 8;
671 if (!kpad->is_adp5585)
681 for (i = 0; i <= kpad->var->max_row_num; i++) {
694 if (i % 4 == 3 || i == kpad->var->max_row_num) {
701 for (i = 0; i <= kpad->var->max_col_num; i++) {
702 unsigned int val = 0, bit = BIT(i + kpad->var->col_shift);
714 if (i % 4 == 3 || i == kpad->var->max_col_num) {
724 adp5589_get_evcode(kpad,
727 adp5589_get_evcode(kpad,
730 adp5589_get_evcode(kpad,
732 kpad->extend_cfg |= R4_EXTEND_CFG;
737 adp5589_get_evcode(kpad,
740 adp5589_get_evcode(kpad,
742 kpad->extend_cfg |= C4_EXTEND_CFG;
745 if (kpad->extend_cfg) {
749 kpad->extend_cfg);
753 pdata->debounce_dis_mask & kpad->var->row_mask);
756 (pdata->debounce_dis_mask >> kpad->var->col_shift)
757 & kpad->var->col_mask);
759 if (!kpad->is_adp5585)
766 (kpad->is_adp5585 ? 0 : LOGIC2_INT) |
768 (kpad->is_adp5585 ? 0 : LOCK_INT) |
784 static void adp5589_report_switch_state(struct adp5589_kpad *kpad)
788 int gpi_stat1 = adp5589_read(kpad->client,
789 kpad->var->reg(ADP5589_GPI_STATUS_A));
790 int gpi_stat2 = adp5589_read(kpad->client,
791 kpad->var->reg(ADP5589_GPI_STATUS_B));
792 int gpi_stat3 = !kpad->is_adp5585 ?
793 adp5589_read(kpad->client, ADP5589_GPI_STATUS_C) : 0;
795 for (i = 0; i < kpad->gpimapsize; i++) {
796 unsigned short pin = kpad->gpimap[i].pin;
798 if (pin <= kpad->var->gpi_pin_row_end) {
800 pin_loc = pin - kpad->var->gpi_pin_row_base;
801 } else if ((pin - kpad->var->gpi_pin_col_base) < 8) {
803 pin_loc = pin - kpad->var->gpi_pin_col_base;
806 pin_loc = pin - kpad->var->gpi_pin_col_base - 8;
810 dev_err(&kpad->client->dev,
816 input_report_switch(kpad->input,
817 kpad->gpimap[i].sw_evt,
821 input_sync(kpad->input);
824 static int adp5589_keypad_add(struct adp5589_kpad *kpad, unsigned int revid)
826 struct i2c_client *client = kpad->client;
833 if (!((pdata->keypad_en_mask & kpad->var->row_mask) &&
834 (pdata->keypad_en_mask >> kpad->var->col_shift)) ||
840 if (pdata->keymapsize != kpad->var->keymapsize) {
850 if (pdata->gpimapsize > kpad->var->gpimapsize_max) {
858 if (pin < kpad->var->gpi_pin_base ||
859 pin > kpad->var->gpi_pin_end) {
864 if (BIT(pin - kpad->var->gpi_pin_row_base) &
880 kpad->input = input;
886 input_set_drvdata(input, kpad);
893 input->keycodesize = sizeof(kpad->keycode[0]);
895 input->keycode = kpad->keycode;
897 memcpy(kpad->keycode, pdata->keymap,
900 kpad->gpimap = pdata->gpimap;
901 kpad->gpimapsize = pdata->gpimapsize;
910 if (kpad->keycode[i] <= KEY_MAX)
911 __set_bit(kpad->keycode[i], input->keybit);
914 if (kpad->gpimapsize)
916 for (i = 0; i < kpad->gpimapsize; i++)
917 __set_bit(kpad->gpimap[i].sw_evt, input->swbit);
928 client->dev.driver->name, kpad);
940 struct adp5589_kpad *kpad = i2c_get_clientdata(client);
942 adp5589_write(client, kpad->var->reg(ADP5589_GENERAL_CFG), 0);
948 struct adp5589_kpad *kpad;
965 kpad = devm_kzalloc(&client->dev, sizeof(*kpad), GFP_KERNEL);
966 if (!kpad)
969 kpad->client = client;
973 kpad->support_row5 = true;
976 kpad->is_adp5585 = true;
977 kpad->var = &const_adp5585;
980 kpad->support_row5 = true;
981 kpad->var = &const_adp5589;
997 error = adp5589_keypad_add(kpad, revid);
1002 error = adp5589_setup(kpad);
1006 if (kpad->gpimapsize)
1007 adp5589_report_switch_state(kpad);
1009 error = adp5589_gpio_add(kpad);
1013 i2c_set_clientdata(client, kpad);
1022 struct adp5589_kpad *kpad = i2c_get_clientdata(client);
1024 if (kpad->input)
1033 struct adp5589_kpad *kpad = i2c_get_clientdata(client);
1035 if (kpad->input)