static int iforce_serio_connect(struct serio *serio, struct serio_driver *drv) { struct iforce *iforce; int err; iforce = kzalloc(sizeof(struct iforce), GFP_KERNEL); if (!iforce) return -ENOMEM; iforce->bus = IFORCE_232; iforce->serio = serio; serio_set_drvdata(serio, iforce); err = serio_open(serio, drv); if (err) { serio_set_drvdata(serio, NULL); kfree(iforce); return err; } err = iforce_init_device(iforce); if (err) { serio_close(serio); serio_set_drvdata(serio, NULL); kfree(iforce); return -ENODEV; } return 0; }
/*----------------------------------------------------------------------- Destroy a serial driver. -----------------------------------------------------------------------*/ void ser_destroy(ser_t *ser) { if (ser) { serio_close(&ser->serio); dp_FREE(ser); } }
static void sec_keyboard_disconnect(struct serio *serio) { struct sec_keyboard_drvdata *data = serio_get_drvdata(serio); printk(KERN_DEBUG "[Keyboard] %s", __func__); data->tx_ready = false; serio_close(serio); }
static int vsxxxaa_connect (struct serio *serio, struct serio_driver *drv) { struct vsxxxaa *mouse; struct input_dev *input_dev; int err = -ENOMEM; mouse = kzalloc (sizeof (struct vsxxxaa), GFP_KERNEL); input_dev = input_allocate_device (); if (!mouse || !input_dev) goto fail1; mouse->dev = input_dev; mouse->serio = serio; strlcat (mouse->name, "DEC VSXXX-AA/-GA mouse or VSXXX-AB digitizer", sizeof (mouse->name)); snprintf (mouse->phys, sizeof (mouse->phys), "%s/input0", serio->phys); input_dev->name = mouse->name; input_dev->phys = mouse->phys; input_dev->id.bustype = BUS_RS232; input_dev->dev.parent = &serio->dev; set_bit (EV_KEY, input_dev->evbit); /* We have buttons */ set_bit (EV_REL, input_dev->evbit); set_bit (EV_ABS, input_dev->evbit); set_bit (BTN_LEFT, input_dev->keybit); /* We have 3 buttons */ set_bit (BTN_MIDDLE, input_dev->keybit); set_bit (BTN_RIGHT, input_dev->keybit); set_bit (BTN_TOUCH, input_dev->keybit); /* ...and Tablet */ set_bit (REL_X, input_dev->relbit); set_bit (REL_Y, input_dev->relbit); input_set_abs_params (input_dev, ABS_X, 0, 1023, 0, 0); input_set_abs_params (input_dev, ABS_Y, 0, 1023, 0, 0); serio_set_drvdata (serio, mouse); err = serio_open (serio, drv); if (err) goto fail2; /* * Request selftest. Standard packet format and differential * mode will be requested after the device ID'ed successfully. */ serio->write (serio, 'T'); /* Test */ err = input_register_device (input_dev); if (err) goto fail3; return 0; fail3: serio_close (serio); fail2: serio_set_drvdata (serio, NULL); fail1: input_free_device (input_dev); kfree (mouse); return err; }
static void magellan_disconnect(struct serio *serio) { struct magellan* magellan = serio_get_drvdata(serio); serio_close(serio); serio_set_drvdata(serio, NULL); input_unregister_device(magellan->dev); kfree(magellan); }
static void spaceball_disconnect(struct serio *serio) { struct spaceball* spaceball = serio_get_drvdata(serio); serio_close(serio); serio_set_drvdata(serio, NULL); input_unregister_device(spaceball->dev); kfree(spaceball); }
static void iforce_serio_disconnect(struct serio *serio) { struct iforce *iforce = serio_get_drvdata(serio); input_unregister_device(iforce->dev); serio_close(serio); serio_set_drvdata(serio, NULL); kfree(iforce); }
static void nkbd_disconnect(struct serio *serio) { struct nkbd *nkbd = serio_get_drvdata(serio); serio_close(serio); serio_set_drvdata(serio, NULL); input_unregister_device(nkbd->dev); kfree(nkbd); }
static void vsxxxaa_disconnect(struct serio *serio) { struct vsxxxaa *mouse = serio_get_drvdata(serio); serio_close(serio); serio_set_drvdata(serio, NULL); input_unregister_device(mouse->dev); kfree(mouse); }
static void sunkbd_disconnect(struct serio *serio) { struct sunkbd *sunkbd = serio_get_drvdata(serio); sunkbd_enable(sunkbd, false); input_unregister_device(sunkbd->dev); serio_close(serio); serio_set_drvdata(serio, NULL); kfree(sunkbd); }
static void dock_keyboard_serio_disconnect(struct serio *serio) { struct dock_keyboard_data *data = serio_get_drvdata(serio); pr_debug("kbd: serio_disconnect\n"); data->serio = NULL; serio_close(serio); serio_set_drvdata(serio, NULL); }
static void tsc_disconnect(struct serio *serio) { struct tsc_ser *ptsc = serio_get_drvdata(serio); serio_close(serio); input_unregister_device(ptsc->dev); kfree(ptsc); serio_set_drvdata(serio, NULL); }
/* * fujitsu_disconnect() is the opposite of fujitsu_connect() */ static void fujitsu_disconnect(struct serio *serio) { struct fujitsu *fujitsu = serio_get_drvdata(serio); input_get_device(fujitsu->dev); input_unregister_device(fujitsu->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(fujitsu->dev); kfree(fujitsu); }
static void pm_disconnect(struct serio *serio) { struct pm *pm = serio_get_drvdata(serio); serio_close(serio); input_unregister_device(pm->dev); kfree(pm); serio_set_drvdata(serio, NULL); }
/* * lkkbd_disconnect() unregisters and closes behind us. */ static void lkkbd_disconnect(struct serio *serio) { struct lkkbd *lk = serio_get_drvdata(serio); input_get_device(lk->dev); input_unregister_device(lk->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(lk->dev); kfree(lk); }
static int skbd_connect(struct serio *serio, struct serio_driver *drv) { struct skbd *skbd; struct input_dev *input_dev; int err = -ENOMEM; int i; skbd = kzalloc(sizeof(struct skbd), GFP_KERNEL); input_dev = input_allocate_device(); if (!skbd || !input_dev) goto fail1; skbd->serio = serio; skbd->dev = input_dev; snprintf(skbd->phys, sizeof(skbd->phys), "%s/input0", serio->phys); memcpy(skbd->keycode, skbd_keycode, sizeof(skbd->keycode)); input_dev->name = "Stowaway Keyboard"; input_dev->phys = skbd->phys; input_dev->id.bustype = BUS_RS232; input_dev->id.vendor = SERIO_STOWAWAY; input_dev->id.product = 0x0001; input_dev->id.version = 0x0100; input_dev->dev.parent = &serio->dev; input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); input_dev->keycode = skbd->keycode; input_dev->keycodesize = sizeof(unsigned char); input_dev->keycodemax = ARRAY_SIZE(skbd_keycode); for (i = 0; i < ARRAY_SIZE(skbd_keycode); i++) set_bit(skbd_keycode[i], input_dev->keybit); clear_bit(0, input_dev->keybit); serio_set_drvdata(serio, skbd); err = serio_open(serio, drv); if (err) goto fail2; err = input_register_device(skbd->dev); if (err) goto fail3; return 0; fail3: serio_close(serio); fail2: serio_set_drvdata(serio, NULL); fail1: input_free_device(input_dev); kfree(skbd); return err; }
static void mtouch_disconnect(struct serio *serio) { struct mtouch* mtouch = serio_get_drvdata(serio); input_get_device(mtouch->dev); input_unregister_device(mtouch->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(mtouch->dev); kfree(mtouch); }
static void dynapro_disconnect(struct serio *serio) { struct dynapro *pdynapro = serio_get_drvdata(serio); input_get_device(pdynapro->dev); input_unregister_device(pdynapro->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(pdynapro->dev); kfree(pdynapro); }
static void elo_disconnect(struct serio *serio) { struct elo *elo = serio_get_drvdata(serio); input_get_device(elo->dev); input_unregister_device(elo->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(elo->dev); kfree(elo); }
static void inexio_disconnect(struct serio *serio) { struct inexio* pinexio = serio_get_drvdata(serio); input_get_device(pinexio->dev); input_unregister_device(pinexio->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(pinexio->dev); kfree(pinexio); }
static void tw_disconnect(struct serio *serio) { struct tw *tw = serio_get_drvdata(serio); input_get_device(tw->dev); input_unregister_device(tw->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(tw->dev); kfree(tw); }
static void gunze_disconnect(struct serio *serio) { struct gunze *gunze = serio_get_drvdata(serio); input_get_device(gunze->dev); input_unregister_device(gunze->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(gunze->dev); kfree(gunze); }
static void hampshire_disconnect(struct serio *serio) { struct hampshire *phampshire = serio_get_drvdata(serio); input_get_device(phampshire->dev); input_unregister_device(phampshire->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(phampshire->dev); kfree(phampshire); }
static void hil_dev_disconnect(struct serio *serio) { struct hil_dev *dev = serio_get_drvdata(serio); BUG_ON(dev == NULL); serio_close(serio); input_unregister_device(dev->dev); serio_set_drvdata(serio, NULL); kfree(dev); }
static void rain_disconnect(struct serio *serio) { struct rain *rain = serio_get_drvdata(serio); cancel_work_sync(&rain->work); cec_unregister_adapter(rain->adap); dev_info(&serio->dev, "disconnected\n"); serio_close(serio); serio_set_drvdata(serio, NULL); kfree(rain); }
static void touchit213_disconnect(struct serio *serio) { struct touchit213 *touchit213 = serio_get_drvdata(serio); input_get_device(touchit213->dev); input_unregister_device(touchit213->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(touchit213->dev); kfree(touchit213); }
static int tsc_connect(struct serio *serio, struct serio_driver *drv) { struct tsc_ser *ptsc; struct input_dev *input_dev; int error; ptsc = kzalloc(sizeof(struct tsc_ser), GFP_KERNEL); input_dev = input_allocate_device(); if (!ptsc || !input_dev) { error = -ENOMEM; goto fail1; } ptsc->serio = serio; ptsc->dev = input_dev; snprintf(ptsc->phys, sizeof(ptsc->phys), "%s/input0", serio->phys); input_dev->name = "TSC-10/25/40 Serial TouchScreen"; input_dev->phys = ptsc->phys; input_dev->id.bustype = BUS_RS232; input_dev->id.vendor = SERIO_TSC40; input_dev->id.product = 40; input_dev->id.version = 0x0001; input_dev->dev.parent = &serio->dev; input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); __set_bit(BTN_TOUCH, input_dev->keybit); input_set_abs_params(ptsc->dev, ABS_X, 0, 0x3ff, 0, 0); input_set_abs_params(ptsc->dev, ABS_Y, 0, 0x3ff, 0, 0); input_set_abs_params(ptsc->dev, ABS_PRESSURE, 0, 0, 0, 0); serio_set_drvdata(serio, ptsc); error = serio_open(serio, drv); if (error) goto fail2; error = input_register_device(ptsc->dev); if (error) goto fail3; return 0; fail3: serio_close(serio); fail2: serio_set_drvdata(serio, NULL); fail1: input_free_device(input_dev); kfree(ptsc); return error; }
static void taos_disconnect(struct serio *serio) { struct taos_data *taos = serio_get_drvdata(serio); if (taos->client) i2c_unregister_device(taos->client); i2c_del_adapter(&taos->adapter); serio_close(serio); serio_set_drvdata(serio, NULL); kfree(taos); dev_dbg(&serio->dev, "Disconnected from TAOS EVM\n"); }
static void h3600ts_disconnect(struct serio *serio) { struct h3600_dev *ts = serio_get_drvdata(serio); free_irq(IRQ_GPIO_BITSY_ACTION_BUTTON, &ts->dev); free_irq(IRQ_GPIO_BITSY_NPOWER_BUTTON, &ts->dev); input_get_device(ts->dev); input_unregister_device(ts->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(ts->dev); kfree(ts); }
static int hampshire_connect(struct serio *serio, struct serio_driver *drv) { struct hampshire *phampshire; struct input_dev *input_dev; int err; phampshire = kzalloc(sizeof(struct hampshire), GFP_KERNEL); input_dev = input_allocate_device(); if (!phampshire || !input_dev) { err = -ENOMEM; goto fail1; } phampshire->serio = serio; phampshire->dev = input_dev; snprintf(phampshire->phys, sizeof(phampshire->phys), "%s/input0", serio->phys); input_dev->name = "Hampshire Serial TouchScreen"; input_dev->phys = phampshire->phys; input_dev->id.bustype = BUS_RS232; input_dev->id.vendor = SERIO_HAMPSHIRE; input_dev->id.product = 0; input_dev->id.version = 0x0001; input_dev->dev.parent = &serio->dev; input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); input_set_abs_params(phampshire->dev, ABS_X, HAMPSHIRE_MIN_XC, HAMPSHIRE_MAX_XC, 0, 0); input_set_abs_params(phampshire->dev, ABS_Y, HAMPSHIRE_MIN_YC, HAMPSHIRE_MAX_YC, 0, 0); serio_set_drvdata(serio, phampshire); err = serio_open(serio, drv); if (err) goto fail2; err = input_register_device(phampshire->dev); if (err) goto fail3; return 0; fail3: serio_close(serio); fail2: serio_set_drvdata(serio, NULL); fail1: input_free_device(input_dev); kfree(phampshire); return err; }