2 * Copyright 2011 Analog Devices Inc.
4 * Licensed under the GPL-2.
8 #include <linux/kernel.h>
9 #include <linux/module.h>
10 #include <linux/platform_device.h>
11 #include <linux/slab.h>
14 #include "../trigger.h"
16 static ssize_t
iio_sysfs_trigger_poll(struct device
*dev
,
17 struct device_attribute
*attr
, const char *buf
, size_t count
)
19 struct iio_trigger
*trig
= dev_get_drvdata(dev
);
20 iio_trigger_poll(trig
, 0);
25 static DEVICE_ATTR(trigger_now
, S_IWUSR
, NULL
, iio_sysfs_trigger_poll
);
26 static IIO_TRIGGER_NAME_ATTR
;
28 static struct attribute
*iio_sysfs_trigger_attrs
[] = {
29 &dev_attr_trigger_now
.attr
,
34 static const struct attribute_group iio_sysfs_trigger_attr_group
= {
35 .attrs
= iio_sysfs_trigger_attrs
,
38 static int __devinit
iio_sysfs_trigger_probe(struct platform_device
*pdev
)
40 struct iio_trigger
*trig
;
43 trig
= iio_allocate_trigger();
49 trig
->control_attrs
= &iio_sysfs_trigger_attr_group
;
50 trig
->owner
= THIS_MODULE
;
51 trig
->name
= kasprintf(GFP_KERNEL
, "sysfstrig%d", pdev
->id
);
52 if (trig
->name
== NULL
) {
57 ret
= iio_trigger_register(trig
);
61 platform_set_drvdata(pdev
, trig
);
67 iio_put_trigger(trig
);
73 static int __devexit
iio_sysfs_trigger_remove(struct platform_device
*pdev
)
75 struct iio_trigger
*trig
= platform_get_drvdata(pdev
);
77 iio_trigger_unregister(trig
);
79 iio_put_trigger(trig
);
84 static struct platform_driver iio_sysfs_trigger_driver
= {
86 .name
= "iio_sysfs_trigger",
89 .probe
= iio_sysfs_trigger_probe
,
90 .remove
= __devexit_p(iio_sysfs_trigger_remove
),
93 static int __init
iio_sysfs_trig_init(void)
95 return platform_driver_register(&iio_sysfs_trigger_driver
);
97 module_init(iio_sysfs_trig_init
);
99 static void __exit
iio_sysfs_trig_exit(void)
101 platform_driver_unregister(&iio_sysfs_trigger_driver
);
103 module_exit(iio_sysfs_trig_exit
);
105 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
106 MODULE_DESCRIPTION("Sysfs based trigger for the iio subsystem");
107 MODULE_LICENSE("GPL v2");
108 MODULE_ALIAS("platform:iio-trig-sysfs");