static int lge_hsd_remove(struct platform_device *pdev) { struct hsd_info *hi = (struct hsd_info *)platform_get_drvdata(pdev); HSD_DBG("lge_hsd_remove\n"); zw_irqs_info_unregister(hi->irq_key); zw_irqs_info_unregister(hi->irq_detect); if (switch_get_state(&hi->sdev)) remove_headset(hi); input_unregister_device(hi->input); switch_dev_unregister(&hi->sdev); free_irq(hi->irq_key, 0); free_irq(hi->irq_detect, 0); gpio_free(hi->gpio_detect); gpio_free(hi->gpio_key); gpio_free(hi->gpio_mic_en); mutex_destroy(&hi->mutex_lock); kfree(hi); return 0; }
static int anx7808_i2c_remove(struct i2c_client *client) { struct anx7808_data *anx7808 = i2c_get_clientdata(client); int i = 0; #ifdef CONFIG_ZERO_WAIT zw_irqs_info_unregister(client->irq); zw_notifier_chain_unregister(&zw_slimport_nb); #endif for (i = 0; i < ARRAY_SIZE(slimport_device_attrs); i++) device_remove_file(&client->dev, &slimport_device_attrs[i]); free_irq(client->irq, anx7808); anx7808_free_gpio(anx7808); destroy_workqueue(anx7808->workqueue); wake_lock_destroy(&anx7808->slimport_lock); kfree(anx7808); return 0; }