static int cyttsp5_device_access_release(struct cyttsp5_device *ttsp)
{
	struct device *dev = &ttsp->dev;
	struct cyttsp5_device_access_data *dad = dev_get_drvdata(dev);

	pm_runtime_suspend(dev);
	pm_runtime_disable(dev);

	if (dad->sysfs_nodes_created) {
		device_remove_file(dev, &dev_attr_command);
		device_remove_file(dev, &dev_attr_status);
		device_remove_file(dev, &dev_attr_response);
		device_remove_file(dev, &dev_attr_responsestr);
#ifdef CONFIG_TCMD 
		device_remove_file(dev, &dev_attr_tcmdresponse);
		device_remove_file(dev, &dev_attr_tcmdresponsesize);
		device_remove_file(dev, &dev_attr_tcmdread_status);
#endif
#ifdef TTHE_TUNER_SUPPORT
		debugfs_remove(dad->tthe_get_panel_data_debugfs);
#endif
	} else {
		cyttsp5_unsubscribe_attention(ttsp, CY_ATTEN_STARTUP,
			cyttsp5_setup_sysfs_attention, 0);
	}

	dev_set_drvdata(dev, NULL);
	kfree(dad);
	return 0;
}
예제 #2
0
static int cyttsp5_debug_release(struct cyttsp5_device *ttsp)
{
    struct device *dev = &ttsp->dev;
    struct cyttsp5_debug_data *dd = dev_get_drvdata(dev);
    int rc = 0;

    if (dev_get_drvdata(&ttsp->core->dev) == NULL) {
        dev_err(dev, "%s: Error, core driver does not exist\n",
                __func__);
        goto cyttsp5_debug_release_exit;
    }

    rc = cyttsp5_unsubscribe_attention(ttsp, CY_ATTEN_IRQ,
                                       cyttsp5_debug_attention, CY_MODE_OPERATIONAL);
    if (rc < 0) {
        dev_err(dev, "%s: Error, could not un-subscribe attention\n",
                __func__);
        goto cyttsp5_debug_release_exit;
    }

cyttsp5_debug_release_exit:
    pm_runtime_suspend(dev);
    pm_runtime_disable(dev);
    device_remove_file(dev, &dev_attr_int_count);
    dev_set_drvdata(dev, NULL);
    kfree(dd);

    return rc;
}
static int cyttsp5_setup_sysfs_attention(struct cyttsp5_device *ttsp)
{
	struct device *dev = &ttsp->dev;
	struct cyttsp5_device_access_data *dad = dev_get_drvdata(dev);
	int rc = 0;

	dad->si = cyttsp5_request_sysinfo(ttsp);
	if (!dad->si)
		return -1;

	rc = cyttsp5_setup_sysfs(ttsp);

	cyttsp5_unsubscribe_attention(ttsp, CY_ATTEN_STARTUP,
		cyttsp5_setup_sysfs_attention, 0);

	return rc;

}