Lines Matching defs:kpad

219 	struct adp5588_kpad *kpad = gpiochip_get_data(chip);
220 unsigned int bank = ADP5588_BANK(kpad->gpiomap[off]);
221 unsigned int bit = ADP5588_BIT(kpad->gpiomap[off]);
224 mutex_lock(&kpad->gpio_lock);
226 if (kpad->dir[bank] & bit)
227 val = kpad->dat_out[bank];
229 val = adp5588_read(kpad->client, GPIO_DAT_STAT1 + bank);
231 mutex_unlock(&kpad->gpio_lock);
239 struct adp5588_kpad *kpad = gpiochip_get_data(chip);
240 unsigned int bank = ADP5588_BANK(kpad->gpiomap[off]);
241 unsigned int bit = ADP5588_BIT(kpad->gpiomap[off]);
243 mutex_lock(&kpad->gpio_lock);
246 kpad->dat_out[bank] |= bit;
248 kpad->dat_out[bank] &= ~bit;
250 adp5588_write(kpad->client, GPIO_DAT_OUT1 + bank, kpad->dat_out[bank]);
252 mutex_unlock(&kpad->gpio_lock);
258 struct adp5588_kpad *kpad = gpiochip_get_data(chip);
259 unsigned int bank = ADP5588_BANK(kpad->gpiomap[off]);
260 unsigned int bit = ADP5588_BIT(kpad->gpiomap[off]);
275 mutex_lock(&kpad->gpio_lock);
278 kpad->pull_dis[bank] |= bit;
280 kpad->pull_dis[bank] &= bit;
282 ret = adp5588_write(kpad->client, GPIO_PULL1 + bank,
283 kpad->pull_dis[bank]);
285 mutex_unlock(&kpad->gpio_lock);
292 struct adp5588_kpad *kpad = gpiochip_get_data(chip);
293 unsigned int bank = ADP5588_BANK(kpad->gpiomap[off]);
294 unsigned int bit = ADP5588_BIT(kpad->gpiomap[off]);
297 mutex_lock(&kpad->gpio_lock);
299 kpad->dir[bank] &= ~bit;
300 ret = adp5588_write(kpad->client, GPIO_DIR1 + bank, kpad->dir[bank]);
302 mutex_unlock(&kpad->gpio_lock);
310 struct adp5588_kpad *kpad = gpiochip_get_data(chip);
311 unsigned int bank = ADP5588_BANK(kpad->gpiomap[off]);
312 unsigned int bit = ADP5588_BIT(kpad->gpiomap[off]);
315 mutex_lock(&kpad->gpio_lock);
317 kpad->dir[bank] |= bit;
320 kpad->dat_out[bank] |= bit;
322 kpad->dat_out[bank] &= ~bit;
324 ret = adp5588_write(kpad->client, GPIO_DAT_OUT1 + bank,
325 kpad->dat_out[bank]);
329 ret = adp5588_write(kpad->client, GPIO_DIR1 + bank, kpad->dir[bank]);
332 mutex_unlock(&kpad->gpio_lock);
337 static int adp5588_build_gpiomap(struct adp5588_kpad *kpad)
345 for (i = 0; i < kpad->rows; i++)
348 for (i = 0; i < kpad->cols; i++)
353 kpad->gpiomap[n_unused++] = i;
361 struct adp5588_kpad *kpad = gpiochip_get_data(gc);
363 mutex_lock(&kpad->gpio_lock);
369 struct adp5588_kpad *kpad = gpiochip_get_data(gc);
373 if (kpad->int_en[i] ^ kpad->irq_mask[i]) {
374 kpad->int_en[i] = kpad->irq_mask[i];
375 adp5588_write(kpad->client, GPI_EM1 + i, kpad->int_en[i]);
379 mutex_unlock(&kpad->gpio_lock);
385 struct adp5588_kpad *kpad = gpiochip_get_data(gc);
387 unsigned long real_irq = kpad->gpiomap[hwirq];
389 kpad->irq_mask[ADP5588_BANK(real_irq)] &= ~ADP5588_BIT(real_irq);
396 struct adp5588_kpad *kpad = gpiochip_get_data(gc);
398 unsigned long real_irq = kpad->gpiomap[hwirq];
401 kpad->irq_mask[ADP5588_BANK(real_irq)] |= ADP5588_BIT(real_irq);
425 static int adp5588_gpio_add(struct adp5588_kpad *kpad)
427 struct device *dev = &kpad->client->dev;
431 kpad->gc.ngpio = adp5588_build_gpiomap(kpad);
432 if (kpad->gc.ngpio == 0) {
437 kpad->gc.parent = &kpad->client->dev;
438 kpad->gc.direction_input = adp5588_gpio_direction_input;
439 kpad->gc.direction_output = adp5588_gpio_direction_output;
440 kpad->gc.get = adp5588_gpio_get_value;
441 kpad->gc.set = adp5588_gpio_set_value;
442 kpad->gc.set_config = adp5588_gpio_set_config;
443 kpad->gc.can_sleep = 1;
445 kpad->gc.base = -1;
446 kpad->gc.label = kpad->client->name;
447 kpad->gc.owner = THIS_MODULE;
449 girq = &kpad->gc.irq;
454 mutex_init(&kpad->gpio_lock);
456 error = devm_gpiochip_add_data(dev, &kpad->gc, kpad);
463 kpad->dat_out[i] = adp5588_read(kpad->client,
465 kpad->dir[i] = adp5588_read(kpad->client, GPIO_DIR1 + i);
466 kpad->pull_dis[i] = adp5588_read(kpad->client, GPIO_PULL1 + i);
488 static void adp5588_gpio_irq_handle(struct adp5588_kpad *kpad, int key_val,
492 struct i2c_client *client = kpad->client;
496 hwirq = adp5588_gpiomap_get_hwirq(&client->dev, kpad->gpiomap,
497 gpio, kpad->gc.ngpio);
503 irq = irq_find_mapping(kpad->gc.irq.domain, hwirq);
524 static void adp5588_report_events(struct adp5588_kpad *kpad, int ev_cnt)
529 int key = adp5588_read(kpad->client, KEY_EVENTA + i);
535 adp5588_gpio_irq_handle(kpad, key_val, key_press);
539 int code = MATRIX_SCAN_CODE(row, col, kpad->row_shift);
541 dev_dbg_ratelimited(&kpad->client->dev,
543 key_val, row, col, kpad->keycode[code]);
545 input_report_key(kpad->input,
546 kpad->keycode[code], key_press);
553 struct adp5588_kpad *kpad = handle;
555 kpad->irq_time = ktime_get();
562 struct adp5588_kpad *kpad = handle;
563 struct i2c_client *client = kpad->client;
572 if (kpad->delay) {
573 target_time = ktime_add_ms(kpad->irq_time, kpad->delay);
589 adp5588_report_events(kpad, ev_cnt);
590 input_sync(kpad->input);
599 static int adp5588_setup(struct adp5588_kpad *kpad)
601 struct i2c_client *client = kpad->client;
604 ret = adp5588_write(client, KP_GPIO1, KP_SEL(kpad->rows));
608 ret = adp5588_write(client, KP_GPIO2, KP_SEL(kpad->cols) & 0xFF);
612 ret = adp5588_write(client, KP_GPIO3, KP_SEL(kpad->cols) >> 8);
616 for (i = 0; i < kpad->nkeys_unlock; i++) {
617 ret = adp5588_write(client, UNLOCK1 + i, kpad->unlock_keys[i]);
622 if (kpad->nkeys_unlock) {
645 static int adp5588_fw_parse(struct adp5588_kpad *kpad)
647 struct i2c_client *client = kpad->client;
650 ret = matrix_keypad_parse_properties(&client->dev, &kpad->rows,
651 &kpad->cols);
655 if (kpad->rows > ADP5588_ROWS_MAX || kpad->cols > ADP5588_COLS_MAX) {
657 kpad->rows, kpad->cols);
661 ret = matrix_keypad_build_keymap(NULL, NULL, kpad->rows, kpad->cols,
662 kpad->keycode, kpad->input);
666 kpad->row_shift = get_count_order(kpad->cols);
669 __set_bit(EV_REP, kpad->input->evbit);
671 kpad->nkeys_unlock = device_property_count_u32(&client->dev,
673 if (kpad->nkeys_unlock <= 0) {
675 kpad->nkeys_unlock = 0;
679 if (kpad->nkeys_unlock > ARRAY_SIZE(kpad->unlock_keys)) {
681 kpad->nkeys_unlock, ARRAY_SIZE(kpad->unlock_keys));
686 kpad->unlock_keys,
687 kpad->nkeys_unlock);
691 for (i = 0; i < kpad->nkeys_unlock; i++) {
700 if (kpad->unlock_keys[i] >= kpad->cols * kpad->rows) {
702 kpad->unlock_keys[i]);
710 kpad->unlock_keys[i] += 1;
718 struct adp5588_kpad *kpad;
731 kpad = devm_kzalloc(&client->dev, sizeof(*kpad), GFP_KERNEL);
732 if (!kpad)
739 kpad->client = client;
740 kpad->input = input;
742 error = adp5588_fw_parse(kpad);
766 kpad->delay = msecs_to_jiffies(WA_DELAYED_READOUT_TIME);
771 input_set_drvdata(input, kpad);
785 error = adp5588_setup(kpad);
789 error = adp5588_gpio_add(kpad);
796 client->dev.driver->name, kpad);