grip
struct grip *grip = gameport_get_drvdata(gameport);
dev = grip->dev[i];
grip->reads++;
switch (grip->mode[i]) {
if (grip_gpp_read_packet(grip->gameport, (i << 1) + 4, data)) {
grip->bads++;
if (grip_xt_read_packet(grip->gameport, (i << 1) + 4, data)) {
grip->bads++;
if (grip_xt_read_packet(grip->gameport, (i << 1) + 4, data)) {
grip->bads++;
if (grip_xt_read_packet(grip->gameport, (i << 1) + 4, data)) {
grip->bads++;
struct grip *grip = input_get_drvdata(dev);
gameport_start_polling(grip->gameport);
struct grip *grip = input_get_drvdata(dev);
gameport_stop_polling(grip->gameport);
struct grip *grip;
grip = kzalloc_obj(*grip);
if (!grip)
grip->gameport = gameport;
gameport_set_drvdata(gameport, grip);
grip->mode[i] = GRIP_MODE_GPP;
grip->mode[i] = GRIP_MODE_BD;
grip->mode[i] = GRIP_MODE_XT;
grip->mode[i] = GRIP_MODE_DC;
if (!grip->mode[0] && !grip->mode[1]) {
if (!grip->mode[i])
grip->dev[i] = input_dev = input_allocate_device();
snprintf(grip->phys[i], sizeof(grip->phys[i]),
input_dev->name = grip_name[grip->mode[i]];
input_dev->phys = grip->phys[i];
input_dev->id.product = grip->mode[i];
input_set_drvdata(input_dev, grip);
for (j = 0; (t = grip_abs[grip->mode[i]][j]) >= 0; j++) {
if (j < grip_cen[grip->mode[i]])
else if (j < grip_anx[grip->mode[i]])
for (j = 0; (t = grip_btn[grip->mode[i]][j]) >= 0; j++)
err = input_register_device(grip->dev[i]);
fail4: input_free_device(grip->dev[i]);
if (grip->dev[i])
input_unregister_device(grip->dev[i]);
kfree(grip);
struct grip *grip = gameport_get_drvdata(gameport);
if (grip->dev[i])
input_unregister_device(grip->dev[i]);
kfree(grip);
static int register_slot(int i, struct grip_mp *grip);
static int get_and_decode_packet(struct grip_mp *grip, int flags)
flags = multiport_io(grip->gameport, flags, 0, &packet);
grip->reads++;
grip->bads++;
port = grip->port[slot];
if (register_slot(slot, grip)) {
static int slots_valid(struct grip_mp *grip)
flags = get_and_decode_packet(grip, 0);
if (grip->port[slot]->mode == GRIP_MODE_RESET)
if (grip->port[slot]->mode != GRIP_MODE_NONE)
static int multiport_init(struct grip_mp *grip)
dig_mode = dig_mode_start(grip->gameport, &packet);
dig_mode = dig_mode_start(grip->gameport, &packet);
if (slots_valid(grip)) {
static void report_slot(struct grip_mp *grip, int slot)
struct grip_port *port = grip->port[slot];
struct grip_mp *grip = gameport_get_drvdata(gameport);
flags = get_and_decode_packet(grip, flags);
if (grip->port[i]->dirty)
report_slot(grip, i);
struct grip_mp *grip = input_get_drvdata(dev);
gameport_start_polling(grip->gameport);
struct grip_mp *grip = input_get_drvdata(dev);
gameport_stop_polling(grip->gameport);
static int register_slot(int slot, struct grip_mp *grip)
struct grip_port *port = grip->port[slot];
input_dev->dev.parent = &grip->gameport->dev;
input_set_drvdata(input_dev, grip);
report_slot(grip, slot);
struct grip_mp *grip;
grip = kzalloc_obj(*grip);
if (!grip)
grip->gameport = gameport;
gameport_set_drvdata(gameport, grip);
if (!multiport_init(grip)) {
if (!grip->port[0]->mode && !grip->port[1]->mode && !grip->port[2]->mode && !grip->port[3]->mode) {
kfree(grip);
struct grip_mp *grip = gameport_get_drvdata(gameport);
if (grip->port[i]->registered)
input_unregister_device(grip->port[i]->dev);
kfree(grip);