Пример #1
0
static struct rmi_control_handler_data *driver_ctl_attach(struct device *dev, void *data)
{
	struct rmi_device *rmi_dev = to_rmi_device(dev);
	struct driver_ctl_data *ctl_data;
	int retval;
	struct rmi_driver_data *driver_data = dev_get_drvdata(&rmi_dev->dev);

	rmi_dev = to_rmi_device(dev);
	dev_dbg(dev, "%s called.\n", __func__);

	ctl_data = devm_kzalloc(dev, sizeof(struct driver_ctl_data), GFP_KERNEL);
	if (!ctl_data)
		return NULL;
	ctl_data->rmi_dev = rmi_dev;

	dev_dbg(dev, "Checking BSR.\n");
	if (driver_data && driver_data->pdt_props.has_bsr) {
		retval = device_create_file(dev, &bsr_attribute);
		if (retval < 0)
			dev_warn(dev, "Failed to create sysfs file bsr.\n");
	}

#ifdef CONFIG_RMI4_DEBUG
	setup_debugfs(ctl_data);
#endif

	return &ctl_data->hdata;
}
Пример #2
0
static ssize_t rmi_driver_bsr_store(struct device *dev,
				    struct device_attribute *attr,
				    const char *buf, size_t count)
{
	int retval;
	unsigned long val;
	struct rmi_device *rmi_dev = to_rmi_device(dev);
	struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev);

	/* need to convert the string data to an actual value */
	retval = strict_strtoul(buf, 10, &val);
	if (retval < 0 || val > 255) {
		dev_err(dev, "Invalid value '%s' written to BSR.\n", buf);
		return -EINVAL;
	}

	retval = rmi_write(rmi_dev, BSR_LOCATION, (u8)val);
	if (retval < 0) {
		dev_err(dev, "%s : failed to write bsr %lu to %#06x\n",
			__func__, val, BSR_LOCATION);
		return retval;
	}

	data->bsr = val;

	return count;
}
Пример #3
0
static ssize_t rmi_driver_bsr_show(struct device *dev,
				   struct device_attribute *attr, char *buf)
{
	struct rmi_device *rmi_dev = to_rmi_device(dev);
	struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev);

	return snprintf(buf, PAGE_SIZE, "%u\n", data->bsr);
}
Пример #4
0
static int rmi_physical_remove(struct device *dev)
{
	struct rmi_driver *driver;
	struct rmi_device *rmi_dev = to_rmi_device(dev);

	driver = to_rmi_driver(dev->driver);

	if (driver->remove)
		return driver->remove(rmi_dev);
	return 0;
}
Пример #5
0
static int driver_ctl_cleanup(struct rmi_control_handler_data *hdata)
{
	struct device *dev = hdata->dev;
	struct rmi_device *rmi_dev = to_rmi_device(dev);
	struct rmi_driver_data *driver_data = dev_get_drvdata(&rmi_dev->dev);
	struct driver_ctl_data *ctl_data =
			container_of(hdata, struct driver_ctl_data, hdata);

	teardown_debugfs(ctl_data);

	if (driver_data->pdt_props.has_bsr)
		device_remove_file(&rmi_dev->dev, &bsr_attribute);

	devm_kfree(dev, ctl_data);

	return 0;
}
Пример #6
0
static void rmi_release_device(struct device *dev)
{
	struct rmi_device *rmi_dev = to_rmi_device(dev);

	kfree(rmi_dev);
}