q40kbd
struct q40kbd *q40kbd;
q40kbd = kzalloc_obj(*q40kbd);
if (!q40kbd || !port) {
q40kbd->port = port;
spin_lock_init(&q40kbd->lock);
port->port_data = q40kbd;
DRV_NAME, q40kbd);
serio_register_port(q40kbd->port);
platform_set_drvdata(pdev, q40kbd);
kfree(q40kbd);
struct q40kbd *q40kbd = platform_get_drvdata(pdev);
serio_unregister_port(q40kbd->port);
free_irq(Q40_IRQ_KEYBOARD, q40kbd);
kfree(q40kbd);
struct q40kbd *q40kbd = dev_id;
guard(spinlock_irqsave)(&q40kbd->lock);
serio_interrupt(q40kbd->port, master_inb(KEYCODE_REG), 0);
static void q40kbd_flush(struct q40kbd *q40kbd)
guard(spinlock_irqsave)(&q40kbd->lock);
struct q40kbd *q40kbd = port->port_data;
q40kbd_flush(q40kbd);
struct q40kbd *q40kbd = port->port_data;
q40kbd_flush(q40kbd);