atm/adummy: add syfs DEVICE_ATTR to change signal
authorKarl Hiramoto <karl@hiramoto.org>
Thu, 8 Jul 2010 20:55:32 +0000 (20:55 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 9 Jul 2010 07:09:21 +0000 (00:09 -0700)
Signed-off-by: Karl Hiramoto <karl@hiramoto.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/atm/adummy.c

index 6d44f07b69f8fc656b75397c26552f4170b7366d..46b94762125b0b179792948cbd47be8a9bc8448f 100644 (file)
@@ -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;