static int pwm_fan_remove(struct platform_device *pdev)
{
	struct fan_dev_data *fan_data = platform_get_drvdata(pdev);

	if (!fan_data)
		return -EINVAL;
	debugfs_remove_recursive(fan_debugfs_root);
	free_irq(fan_data->tach_irq, NULL);
	gpio_free(fan_data->tach_gpio);
	pwm_config(fan_data->pwm_dev, 0, fan_data->pwm_period);
	pwm_disable(fan_data->pwm_dev);
	pwm_free(fan_data->pwm_dev);
	thermal_cooling_device_unregister(fan_data->cdev);
	cancel_delayed_work(&fan_data->fan_tach_work);
	destroy_workqueue(fan_data->tach_workqueue);
	cancel_delayed_work(&fan_data->fan_ramp_work);
	destroy_workqueue(fan_data->workqueue);
	devm_kfree(&pdev->dev, (void *)(fan_data->fan_pwm));
	devm_kfree(&pdev->dev, (void *)(fan_data->fan_state_cap_lookup));
	devm_kfree(&pdev->dev, (void *)(fan_data->fan_rrd));
	devm_kfree(&pdev->dev, (void *)(fan_data->fan_rru));
	devm_kfree(&pdev->dev, (void *)(fan_data->fan_rpm));
	devm_kfree(&pdev->dev, (void *)fan_data);
	remove_sysfs_entry(&pdev->dev);

	if (fan_data->fan_reg)
		regulator_put(fan_data->fan_reg);
	return 0;
}
static int pwm_fan_remove(struct platform_device *pdev)
{
	struct fan_dev_data *fan_data = platform_get_drvdata(pdev);

	if (!fan_data)
		return -EINVAL;
	debugfs_remove_recursive(fan_debugfs_root);
	free_irq(fan_data->tach_irq, NULL);
	gpio_free(fan_data->tach_gpio);
	pwm_config(fan_data->pwm_dev, 0, fan_data->pwm_period);
	pwm_disable(fan_data->pwm_dev);
	pwm_free(fan_data->pwm_dev);
	thermal_cooling_device_unregister(fan_data->cdev);
	remove_sysfs_entry(&pdev->dev);
	return 0;
}
Beispiel #3
0
static NvS32 tegra_acc_remove(struct platform_device *pdev)
{
	remove_sysfs_entry();
	input_unregister_device(g_input_dev);
	return 0;
}