guillemot
struct guillemot *guillemot = gameport_get_drvdata(gameport);
struct input_dev *dev = guillemot->dev;
guillemot->reads++;
if (guillemot_read_packet(guillemot->gameport, data) != GUILLEMOT_MAX_LENGTH * 8 ||
guillemot->bads++;
for (i = 0; i < 6 && guillemot->type->abs[i] >= 0; i++)
input_report_abs(dev, guillemot->type->abs[i], data[i + 5]);
if (guillemot->type->hat) {
for (i = 0; i < 16 && guillemot->type->btn[i] >= 0; i++)
input_report_key(dev, guillemot->type->btn[i], (data[2 + (i >> 3)] >> (i & 7)) & 1);
struct guillemot *guillemot = input_get_drvdata(dev);
gameport_start_polling(guillemot->gameport);
struct guillemot *guillemot = input_get_drvdata(dev);
gameport_stop_polling(guillemot->gameport);
struct guillemot *guillemot;
guillemot = kzalloc_obj(*guillemot);
if (!guillemot || !input_dev) {
guillemot->gameport = gameport;
guillemot->dev = input_dev;
gameport_set_drvdata(gameport, guillemot);
snprintf(guillemot->phys, sizeof(guillemot->phys), "%s/input0", gameport->phys);
guillemot->type = guillemot_type + i;
input_dev->phys = guillemot->phys;
input_set_drvdata(input_dev, guillemot);
for (i = 0; (t = guillemot->type->abs[i]) >= 0; i++)
if (guillemot->type->hat) {
for (i = 0; (t = guillemot->type->btn[i]) >= 0; i++)
err = input_register_device(guillemot->dev);
kfree(guillemot);
struct guillemot *guillemot = gameport_get_drvdata(gameport);
printk(KERN_INFO "guillemot.c: Failed %d reads out of %d on %s\n", guillemot->reads, guillemot->bads, guillemot->phys);
input_unregister_device(guillemot->dev);
kfree(guillemot);