Lines Matching refs:lk
360 static void lkkbd_detection_done(struct lkkbd *lk) in lkkbd_detection_done() argument
367 lk->keycode[0xb1] = KEY_COMPOSE; in lkkbd_detection_done()
372 switch (lk->id[4]) { in lkkbd_detection_done()
374 strlcpy(lk->name, "DEC LK201 keyboard", sizeof(lk->name)); in lkkbd_detection_done()
377 lk->keycode[0xb1] = KEY_LEFTALT; in lkkbd_detection_done()
381 strlcpy(lk->name, "DEC LK401 keyboard", sizeof(lk->name)); in lkkbd_detection_done()
385 strlcpy(lk->name, "Unknown DEC keyboard", sizeof(lk->name)); in lkkbd_detection_done()
388 "Jan-Benedict Glaw <jbglaw@lug-owl.de>\n", lk->phys); in lkkbd_detection_done()
391 printk(" 0x%02x", lk->id[i]); in lkkbd_detection_done()
397 lk->phys, lk->name); in lkkbd_detection_done()
402 switch (lk->id[2]) { in lkkbd_detection_done()
409 lk->phys); in lkkbd_detection_done()
415 "keyboard may not work properly\n", lk->phys); in lkkbd_detection_done()
421 lk->id[2], lk->phys); in lkkbd_detection_done()
428 if (lk->id[2] == LK_STUCK_KEY && lk->id[3] != 0) in lkkbd_detection_done()
431 lk->id[3], lk->keycode[lk->id[3]]); in lkkbd_detection_done()
441 struct lkkbd *lk = serio_get_drvdata(serio); in lkkbd_interrupt() local
442 struct input_dev *input_dev = lk->dev; in lkkbd_interrupt()
448 if (lk->ignore_bytes > 0) { in lkkbd_interrupt()
449 DBG(KERN_INFO "Ignoring a byte on %s\n", lk->name); in lkkbd_interrupt()
450 lk->id[LK_NUM_IGNORE_BYTES - lk->ignore_bytes--] = data; in lkkbd_interrupt()
452 if (lk->ignore_bytes == 0) in lkkbd_interrupt()
453 lkkbd_detection_done(lk); in lkkbd_interrupt()
461 input_report_key(input_dev, lk->keycode[i], 0); in lkkbd_interrupt()
467 lk->ignore_bytes = LK_NUM_IGNORE_BYTES; in lkkbd_interrupt()
468 lk->id[LK_NUM_IGNORE_BYTES - lk->ignore_bytes--] = data; in lkkbd_interrupt()
469 schedule_work(&lk->tq); in lkkbd_interrupt()
485 keycode = lk->keycode[data]; in lkkbd_interrupt()
493 __FILE__, data, lk->name); in lkkbd_interrupt()
500 static void lkkbd_toggle_leds(struct lkkbd *lk) in lkkbd_toggle_leds() argument
502 struct serio *serio = lk->serio; in lkkbd_toggle_leds()
506 CHECK_LED(lk, leds_on, leds_off, LED_CAPSL, LK_LED_SHIFTLOCK); in lkkbd_toggle_leds()
507 CHECK_LED(lk, leds_on, leds_off, LED_COMPOSE, LK_LED_COMPOSE); in lkkbd_toggle_leds()
508 CHECK_LED(lk, leds_on, leds_off, LED_SCROLLL, LK_LED_SCROLLLOCK); in lkkbd_toggle_leds()
509 CHECK_LED(lk, leds_on, leds_off, LED_SLEEP, LK_LED_WAIT); in lkkbd_toggle_leds()
520 static void lkkbd_toggle_keyclick(struct lkkbd *lk, bool on) in lkkbd_toggle_keyclick() argument
522 struct serio *serio = lk->serio; in lkkbd_toggle_keyclick()
527 serio_write(serio, volume_to_hw(lk->keyclick_volume)); in lkkbd_toggle_keyclick()
529 serio_write(serio, volume_to_hw(lk->ctrlclick_volume)); in lkkbd_toggle_keyclick()
544 struct lkkbd *lk = input_get_drvdata(dev); in lkkbd_event() local
548 lkkbd_toggle_leds(lk); in lkkbd_event()
554 lkkbd_toggle_keyclick(lk, value); in lkkbd_event()
559 serio_write(lk->serio, LK_CMD_SOUND_BELL); in lkkbd_event()
580 struct lkkbd *lk = container_of(work, struct lkkbd, tq); in lkkbd_reinit() local
584 serio_write(lk->serio, LK_CMD_REQUEST_ID); in lkkbd_reinit()
587 serio_write(lk->serio, LK_CMD_SET_DEFAULTS); in lkkbd_reinit()
590 lkkbd_toggle_leds(lk); in lkkbd_reinit()
597 serio_write(lk->serio, LK_CMD_ENABLE_LK401); in lkkbd_reinit()
601 serio_write(lk->serio, in lkkbd_reinit()
605 serio_write(lk->serio, LK_CMD_ENABLE_BELL); in lkkbd_reinit()
606 serio_write(lk->serio, volume_to_hw(lk->bell_volume)); in lkkbd_reinit()
609 lkkbd_toggle_keyclick(lk, test_bit(SND_CLICK, lk->dev->snd)); in lkkbd_reinit()
612 if (test_bit(SND_BELL, lk->dev->snd)) in lkkbd_reinit()
613 serio_write(lk->serio, LK_CMD_SOUND_BELL); in lkkbd_reinit()
621 struct lkkbd *lk; in lkkbd_connect() local
626 lk = kzalloc(sizeof(struct lkkbd), GFP_KERNEL); in lkkbd_connect()
628 if (!lk || !input_dev) { in lkkbd_connect()
633 lk->serio = serio; in lkkbd_connect()
634 lk->dev = input_dev; in lkkbd_connect()
635 INIT_WORK(&lk->tq, lkkbd_reinit); in lkkbd_connect()
636 lk->bell_volume = bell_volume; in lkkbd_connect()
637 lk->keyclick_volume = keyclick_volume; in lkkbd_connect()
638 lk->ctrlclick_volume = ctrlclick_volume; in lkkbd_connect()
639 memcpy(lk->keycode, lkkbd_keycode, sizeof(lk->keycode)); in lkkbd_connect()
641 strlcpy(lk->name, "DEC LK keyboard", sizeof(lk->name)); in lkkbd_connect()
642 snprintf(lk->phys, sizeof(lk->phys), "%s/input0", serio->phys); in lkkbd_connect()
644 input_dev->name = lk->name; in lkkbd_connect()
645 input_dev->phys = lk->phys; in lkkbd_connect()
653 input_set_drvdata(input_dev, lk); in lkkbd_connect()
666 input_dev->keycode = lk->keycode; in lkkbd_connect()
667 input_dev->keycodesize = sizeof(lk->keycode[0]); in lkkbd_connect()
668 input_dev->keycodemax = ARRAY_SIZE(lk->keycode); in lkkbd_connect()
671 __set_bit(lk->keycode[i], input_dev->keybit); in lkkbd_connect()
674 serio_set_drvdata(serio, lk); in lkkbd_connect()
680 err = input_register_device(lk->dev); in lkkbd_connect()
684 serio_write(lk->serio, LK_CMD_POWERCYCLE_RESET); in lkkbd_connect()
691 kfree(lk); in lkkbd_connect()
700 struct lkkbd *lk = serio_get_drvdata(serio); in lkkbd_disconnect() local
702 input_get_device(lk->dev); in lkkbd_disconnect()
703 input_unregister_device(lk->dev); in lkkbd_disconnect()
706 input_put_device(lk->dev); in lkkbd_disconnect()
707 kfree(lk); in lkkbd_disconnect()