static int __exit isp1301_remove(struct i2c_client *i2c) { struct isp1301 *isp; isp = i2c_get_clientdata(i2c); isp1301_clear_bits(isp, ISP1301_INTERRUPT_FALLING, ~0); isp1301_clear_bits(isp, ISP1301_INTERRUPT_RISING, ~0); free_irq(i2c->irq, isp); #ifdef CONFIG_USB_OTG otg_unbind(isp); #endif if (machine_is_omap_h2()) gpio_free(2); isp->timer.data = 0; set_bit(WORK_STOP, &isp->todo); del_timer_sync(&isp->timer); flush_scheduled_work(); put_device(&i2c->dev); the_transceiver = NULL; return 0; }
static int isp1301_detach_client(struct i2c_client *i2c) { struct isp1301 *isp; isp = container_of(i2c, struct isp1301, client); isp1301_clear_bits(isp, ISP1301_INTERRUPT_FALLING, ~0); isp1301_clear_bits(isp, ISP1301_INTERRUPT_RISING, ~0); free_irq(isp->irq, isp); #ifdef CONFIG_USB_OTG otg_unbind(isp); #endif if (machine_is_omap_h2()) omap_free_gpio(2); isp->timer.data = 0; set_bit(WORK_STOP, &isp->todo); del_timer_sync(&isp->timer); flush_scheduled_work(); put_device(&i2c->dev); the_transceiver = 0; return i2c_detach_client(i2c); }