Commit c69fb76e authored by Karl Hiramoto's avatar Karl Hiramoto Committed by David S. Miller
Browse files

atm/adummy: add syfs DEVICE_ATTR to change signal

parent 00506612
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -40,6 +40,42 @@ struct adummy_dev {

static LIST_HEAD(adummy_devs);

static ssize_t __set_signal(struct device *dev,
		struct device_attribute *attr,
		const char *buf, size_t len)
{
	struct atm_dev *atm_dev = container_of(dev, struct atm_dev, class_dev);
	int signal;

	if (sscanf(buf, "%d", &signal) == 1) {

		if (signal < ATM_PHY_SIG_LOST || signal > ATM_PHY_SIG_FOUND)
			signal = ATM_PHY_SIG_UNKNOWN;

		atm_dev_signal_change(atm_dev, signal);
		return 1;
	}
	return -EINVAL;
}

static ssize_t __show_signal(struct device *dev,
	struct device_attribute *attr, char *buf)
{
	struct atm_dev *atm_dev = container_of(dev, struct atm_dev, class_dev);
	return sprintf(buf, "%d\n", atm_dev->signal);
}
static DEVICE_ATTR(signal, 0644, __show_signal, __set_signal);

static struct attribute *adummy_attrs[] = {
	&dev_attr_signal.attr,
	NULL
};

static struct attribute_group adummy_group_attrs = {
	.name = NULL, /* We want them in dev's root folder */
	.attrs = adummy_attrs
};

static int __init
adummy_start(struct atm_dev *dev)
{
@@ -128,6 +164,9 @@ static int __init adummy_init(void)
	adummy_dev->atm_dev = atm_dev;
	atm_dev->dev_data = adummy_dev;

	if (sysfs_create_group(&atm_dev->class_dev.kobj, &adummy_group_attrs))
		dev_err(&atm_dev->class_dev, "Could not register attrs for adummy\n");

	if (adummy_start(atm_dev)) {
		printk(KERN_ERR DEV_LABEL ": adummy_start() failed\n");
		err = -ENODEV;