db9
struct db9 *db9 = timer_container_of(db9, t, timer);
struct parport *port = db9->pd->port;
struct input_dev *dev = db9->dev[0];
struct input_dev *dev2 = db9->dev[1];
switch (db9->mode) {
db9_saturn(db9->mode, port, db9->dev);
mod_timer(&db9->timer, jiffies + DB9_REFRESH_TIME);
struct db9 *db9 = input_get_drvdata(dev);
struct parport *port = db9->pd->port;
scoped_guard(mutex_intr, &db9->mutex) {
if (!db9->used++) {
parport_claim(db9->pd);
if (db9_modes[db9->mode].reverse) {
mod_timer(&db9->timer, jiffies + DB9_REFRESH_TIME);
struct db9 *db9 = input_get_drvdata(dev);
struct parport *port = db9->pd->port;
guard(mutex)(&db9->mutex);
if (!--db9->used) {
timer_delete_sync(&db9->timer);
parport_release(db9->pd);
struct db9 *db9;
db9 = kzalloc_obj(*db9);
if (!db9)
mutex_init(&db9->mutex);
db9->pd = pd;
db9->mode = mode;
db9->parportno = pp->number;
timer_setup(&db9->timer, db9_timer, 0);
db9->dev[i] = input_dev = input_allocate_device();
snprintf(db9->phys[i], sizeof(db9->phys[i]),
"%s/input%d", db9->pd->port->name, i);
input_dev->phys = db9->phys[i];
input_set_drvdata(input_dev, db9);
db9_base[port_idx] = db9;
input_free_device(db9->dev[i]);
input_unregister_device(db9->dev[i]);
kfree(db9);
struct db9 *db9;
db9 = db9_base[i];
for (i = 0; i < min(db9_modes[db9->mode].n_pads, DB9_MAX_DEVICES); i++)
input_unregister_device(db9->dev[i]);
parport_unregister_device(db9->pd);
kfree(db9);
static struct db9 *db9_base[3];