Lines Matching defs:kpad

390 	struct adp5589_kpad *kpad = gpiochip_get_data(chip);
391 unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
392 unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
394 return !!(adp5589_read(kpad->client,
395 kpad->var->reg(ADP5589_GPI_STATUS_A) + bank) &
402 struct adp5589_kpad *kpad = gpiochip_get_data(chip);
403 unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
404 unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
406 mutex_lock(&kpad->gpio_lock);
409 kpad->dat_out[bank] |= bit;
411 kpad->dat_out[bank] &= ~bit;
413 adp5589_write(kpad->client, kpad->var->reg(ADP5589_GPO_DATA_OUT_A) +
414 bank, kpad->dat_out[bank]);
416 mutex_unlock(&kpad->gpio_lock);
421 struct adp5589_kpad *kpad = gpiochip_get_data(chip);
422 unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
423 unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
426 mutex_lock(&kpad->gpio_lock);
428 kpad->dir[bank] &= ~bit;
429 ret = adp5589_write(kpad->client,
430 kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
431 kpad->dir[bank]);
433 mutex_unlock(&kpad->gpio_lock);
441 struct adp5589_kpad *kpad = gpiochip_get_data(chip);
442 unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
443 unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
446 mutex_lock(&kpad->gpio_lock);
448 kpad->dir[bank] |= bit;
451 kpad->dat_out[bank] |= bit;
453 kpad->dat_out[bank] &= ~bit;
455 ret = adp5589_write(kpad->client, kpad->var->reg(ADP5589_GPO_DATA_OUT_A)
456 + bank, kpad->dat_out[bank]);
457 ret |= adp5589_write(kpad->client,
458 kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
459 kpad->dir[bank]);
461 mutex_unlock(&kpad->gpio_lock);
466 static int adp5589_build_gpiomap(struct adp5589_kpad *kpad,
475 for (i = 0; i < kpad->var->maxgpio; i++)
479 for (i = 0; i < kpad->gpimapsize; i++)
480 pin_used[kpad->gpimap[i].pin - kpad->var->gpi_pin_base] = true;
482 if (kpad->extend_cfg & R4_EXTEND_CFG)
485 if (kpad->extend_cfg & C4_EXTEND_CFG)
486 pin_used[kpad->var->c4_extend_cfg] = true;
488 if (!kpad->support_row5)
491 for (i = 0; i < kpad->var->maxgpio; i++)
493 kpad->gpiomap[n_unused++] = i;
498 static int adp5589_gpio_add(struct adp5589_kpad *kpad)
500 struct device *dev = &kpad->client->dev;
508 kpad->gc.parent = dev;
509 kpad->gc.ngpio = adp5589_build_gpiomap(kpad, pdata);
510 if (kpad->gc.ngpio == 0) {
515 kpad->export_gpio = true;
517 kpad->gc.direction_input = adp5589_gpio_direction_input;
518 kpad->gc.direction_output = adp5589_gpio_direction_output;
519 kpad->gc.get = adp5589_gpio_get_value;
520 kpad->gc.set = adp5589_gpio_set_value;
521 kpad->gc.can_sleep = 1;
523 kpad->gc.base = gpio_data->gpio_start;
524 kpad->gc.label = kpad->client->name;
525 kpad->gc.owner = THIS_MODULE;
527 mutex_init(&kpad->gpio_lock);
529 error = gpiochip_add_data(&kpad->gc, kpad);
535 for (i = 0; i <= kpad->var->bank(kpad->var->maxgpio); i++) {
536 kpad->dat_out[i] = adp5589_read(kpad->client, kpad->var->reg(
538 kpad->dir[i] = adp5589_read(kpad->client, kpad->var->reg(
543 error = gpio_data->setup(kpad->client,
544 kpad->gc.base, kpad->gc.ngpio,
553 static void adp5589_gpio_remove(struct adp5589_kpad *kpad)
555 struct device *dev = &kpad->client->dev;
560 if (!kpad->export_gpio)
564 error = gpio_data->teardown(kpad->client,
565 kpad->gc.base, kpad->gc.ngpio,
571 gpiochip_remove(&kpad->gc);
574 static inline int adp5589_gpio_add(struct adp5589_kpad *kpad)
579 static inline void adp5589_gpio_remove(struct adp5589_kpad *kpad)
584 static void adp5589_report_switches(struct adp5589_kpad *kpad,
589 for (i = 0; i < kpad->gpimapsize; i++) {
590 if (key_val == kpad->gpimap[i].pin) {
591 input_report_switch(kpad->input,
592 kpad->gpimap[i].sw_evt,
599 static void adp5589_report_events(struct adp5589_kpad *kpad, int ev_cnt)
604 int key = adp5589_read(kpad->client, ADP5589_5_FIFO_1 + i);
607 if (key_val >= kpad->var->gpi_pin_base &&
608 key_val <= kpad->var->gpi_pin_end) {
609 adp5589_report_switches(kpad, key, key_val);
611 input_report_key(kpad->input,
612 kpad->keycode[key_val - 1],
620 struct adp5589_kpad *kpad = handle;
621 struct i2c_client *client = kpad->client;
632 adp5589_report_events(kpad, ev_cnt);
633 input_sync(kpad->input);
642 static int adp5589_get_evcode(struct adp5589_kpad *kpad, unsigned short key)
646 for (i = 0; i < kpad->var->keymapsize; i++)
647 if (key == kpad->keycode[i])
650 dev_err(&kpad->client->dev, "RESET/UNLOCK key not in keycode map\n");
655 static int adp5589_setup(struct adp5589_kpad *kpad)
657 struct i2c_client *client = kpad->client;
660 u8 (*reg) (u8) = kpad->var->reg;
666 pdata->keypad_en_mask & kpad->var->row_mask);
668 (pdata->keypad_en_mask >> kpad->var->col_shift) &
669 kpad->var->col_mask);
671 if (!kpad->is_adp5585)
675 if (!kpad->is_adp5585 && pdata->en_keylock) {
691 if (pin <= kpad->var->gpi_pin_row_end) {
692 evt_mode1 |= (1 << (pin - kpad->var->gpi_pin_row_base));
695 ((1 << (pin - kpad->var->gpi_pin_col_base)) & 0xFF);
696 if (!kpad->is_adp5585)
698 kpad->var->gpi_pin_col_base)) >> 8);
707 if (!kpad->is_adp5585)
717 for (i = 0; i <= kpad->var->max_row_num; i++) {
730 if (i % 4 == 3 || i == kpad->var->max_row_num) {
737 for (i = 0; i <= kpad->var->max_col_num; i++) {
738 unsigned val = 0, bit = 1 << (i + kpad->var->col_shift);
750 if (i % 4 == 3 || i == kpad->var->max_col_num) {
760 adp5589_get_evcode(kpad,
763 adp5589_get_evcode(kpad,
766 adp5589_get_evcode(kpad,
768 kpad->extend_cfg |= R4_EXTEND_CFG;
773 adp5589_get_evcode(kpad,
776 adp5589_get_evcode(kpad,
778 kpad->extend_cfg |= C4_EXTEND_CFG;
781 if (kpad->extend_cfg) {
785 kpad->extend_cfg);
789 pdata->debounce_dis_mask & kpad->var->row_mask);
792 (pdata->debounce_dis_mask >> kpad->var->col_shift)
793 & kpad->var->col_mask);
795 if (!kpad->is_adp5585)
802 (kpad->is_adp5585 ? 0 : LOGIC2_INT) |
804 (kpad->is_adp5585 ? 0 : LOCK_INT) |
820 static void adp5589_report_switch_state(struct adp5589_kpad *kpad)
824 int gpi_stat1 = adp5589_read(kpad->client,
825 kpad->var->reg(ADP5589_GPI_STATUS_A));
826 int gpi_stat2 = adp5589_read(kpad->client,
827 kpad->var->reg(ADP5589_GPI_STATUS_B));
828 int gpi_stat3 = !kpad->is_adp5585 ?
829 adp5589_read(kpad->client, ADP5589_GPI_STATUS_C) : 0;
831 for (i = 0; i < kpad->gpimapsize; i++) {
832 unsigned short pin = kpad->gpimap[i].pin;
834 if (pin <= kpad->var->gpi_pin_row_end) {
836 pin_loc = pin - kpad->var->gpi_pin_row_base;
837 } else if ((pin - kpad->var->gpi_pin_col_base) < 8) {
839 pin_loc = pin - kpad->var->gpi_pin_col_base;
842 pin_loc = pin - kpad->var->gpi_pin_col_base - 8;
846 dev_err(&kpad->client->dev,
852 input_report_switch(kpad->input,
853 kpad->gpimap[i].sw_evt,
857 input_sync(kpad->input);
860 static int adp5589_keypad_add(struct adp5589_kpad *kpad, unsigned int revid)
862 struct i2c_client *client = kpad->client;
869 if (!((pdata->keypad_en_mask & kpad->var->row_mask) &&
870 (pdata->keypad_en_mask >> kpad->var->col_shift)) ||
876 if (pdata->keymapsize != kpad->var->keymapsize) {
886 if (pdata->gpimapsize > kpad->var->gpimapsize_max) {
894 if (pin < kpad->var->gpi_pin_base ||
895 pin > kpad->var->gpi_pin_end) {
900 if ((1 << (pin - kpad->var->gpi_pin_row_base)) &
916 kpad->input = input;
922 input_set_drvdata(input, kpad);
929 input->keycodesize = sizeof(kpad->keycode[0]);
931 input->keycode = kpad->keycode;
933 memcpy(kpad->keycode, pdata->keymap,
936 kpad->gpimap = pdata->gpimap;
937 kpad->gpimapsize = pdata->gpimapsize;
946 if (kpad->keycode[i] <= KEY_MAX)
947 __set_bit(kpad->keycode[i], input->keybit);
950 if (kpad->gpimapsize)
952 for (i = 0; i < kpad->gpimapsize; i++)
953 __set_bit(kpad->gpimap[i].sw_evt, input->swbit);
963 client->dev.driver->name, kpad);
982 static void adp5589_keypad_remove(struct adp5589_kpad *kpad)
984 if (kpad->input) {
985 free_irq(kpad->client->irq, kpad);
986 input_unregister_device(kpad->input);
993 struct adp5589_kpad *kpad;
1010 kpad = kzalloc(sizeof(*kpad), GFP_KERNEL);
1011 if (!kpad)
1014 kpad->client = client;
1018 kpad->support_row5 = true;
1021 kpad->is_adp5585 = true;
1022 kpad->var = &const_adp5585;
1025 kpad->support_row5 = true;
1026 kpad->var = &const_adp5589;
1039 error = adp5589_keypad_add(kpad, revid);
1044 error = adp5589_setup(kpad);
1048 if (kpad->gpimapsize)
1049 adp5589_report_switch_state(kpad);
1051 error = adp5589_gpio_add(kpad);
1055 i2c_set_clientdata(client, kpad);
1061 adp5589_keypad_remove(kpad);
1063 kfree(kpad);
1070 struct adp5589_kpad *kpad = i2c_get_clientdata(client);
1072 adp5589_write(client, kpad->var->reg(ADP5589_GENERAL_CFG), 0);
1073 adp5589_keypad_remove(kpad);
1074 adp5589_gpio_remove(kpad);
1075 kfree(kpad);
1083 struct adp5589_kpad *kpad = dev_get_drvdata(dev);
1084 struct i2c_client *client = kpad->client;
1086 if (!kpad->input)
1099 struct adp5589_kpad *kpad = dev_get_drvdata(dev);
1100 struct i2c_client *client = kpad->client;
1102 if (!kpad->input)