tgfx
mod_timer(&tgfx->timer, jiffies + TGFX_REFRESH_TIME);
struct tgfx *tgfx = input_get_drvdata(dev);
scoped_guard(mutex_intr, &tgfx->sem) {
if (!tgfx->used++) {
parport_claim(tgfx->pd);
parport_write_control(tgfx->pd->port, 0x04);
mod_timer(&tgfx->timer, jiffies + TGFX_REFRESH_TIME);
struct tgfx *tgfx = input_get_drvdata(dev);
guard(mutex)(&tgfx->sem);
if (!--tgfx->used) {
timer_delete_sync(&tgfx->timer);
parport_write_control(tgfx->pd->port, 0x00);
parport_release(tgfx->pd);
struct tgfx *tgfx;
tgfx = kzalloc_obj(*tgfx);
if (!tgfx) {
mutex_init(&tgfx->sem);
tgfx->pd = pd;
tgfx->parportno = pp->number;
timer_setup(&tgfx->timer, tgfx_timer, 0);
tgfx->dev[i] = input_dev = input_allocate_device();
tgfx->sticks |= (1 << i);
snprintf(tgfx->name[i], sizeof(tgfx->name[i]),
snprintf(tgfx->phys[i], sizeof(tgfx->phys[i]),
"%s/input%d", tgfx->pd->port->name, i);
input_dev->name = tgfx->name[i];
input_dev->phys = tgfx->phys[i];
input_set_drvdata(input_dev, tgfx);
if (input_register_device(tgfx->dev[i]))
if (!tgfx->sticks) {
tgfx_base[port_idx] = tgfx;
input_free_device(tgfx->dev[i]);
if (tgfx->dev[i])
input_unregister_device(tgfx->dev[i]);
kfree(tgfx);
struct tgfx *tgfx;
tgfx = tgfx_base[i];
if (tgfx->dev[i])
input_unregister_device(tgfx->dev[i]);
parport_unregister_device(tgfx->pd);
kfree(tgfx);
struct tgfx *tgfx = timer_container_of(tgfx, t, timer);
if (tgfx->sticks & (1 << i)) {
dev = tgfx->dev[i];
parport_write_data(tgfx->pd->port, ~(1 << i));
data1 = parport_read_status(tgfx->pd->port) ^ 0x7f;
data2 = parport_read_control(tgfx->pd->port) ^ 0x04; /* CAVEAT parport */