16 #include <linux/kernel.h>
17 #include <linux/slab.h>
21 #include <linux/module.h>
29 #define IIO_EVENTGEN_NO 10
48 static const char *iio_evgen_name =
"iio_dummy_evgen";
50 static void iio_dummy_event_irqmask(
struct irq_data *
d)
59 static void iio_dummy_event_irqunmask(
struct irq_data *
d)
68 static int iio_dummy_evgen_create(
void)
72 iio_evgen = kzalloc(
sizeof(*iio_evgen),
GFP_KERNEL);
73 if (iio_evgen ==
NULL)
77 if (iio_evgen->
base < 0) {
78 ret = iio_evgen->
base;
82 iio_evgen->
chip.name = iio_evgen_name;
83 iio_evgen->
chip.irq_mask = &iio_dummy_event_irqmask;
84 iio_evgen->
chip.irq_unmask = &iio_dummy_event_irqunmask;
106 if (iio_evgen ==
NULL)
111 if (iio_evgen->
inuse[i] ==
false) {
112 ret = iio_evgen->
base +
i;
113 iio_evgen->
inuse[
i] =
true;
117 if (i == IIO_EVENTGEN_NO)
132 iio_evgen->
inuse[irq - iio_evgen->
base] =
false;
139 static void iio_dummy_evgen_free(
void)
145 static void iio_evgen_release(
struct device *
dev)
147 iio_dummy_evgen_free();
174 static struct attribute *iio_evgen_attrs[] = {
175 &iio_dev_attr_poke_ev0.dev_attr.attr,
176 &iio_dev_attr_poke_ev1.dev_attr.attr,
177 &iio_dev_attr_poke_ev2.dev_attr.attr,
178 &iio_dev_attr_poke_ev3.dev_attr.attr,
179 &iio_dev_attr_poke_ev4.dev_attr.attr,
180 &iio_dev_attr_poke_ev5.dev_attr.attr,
181 &iio_dev_attr_poke_ev6.dev_attr.attr,
182 &iio_dev_attr_poke_ev7.dev_attr.attr,
183 &iio_dev_attr_poke_ev8.dev_attr.attr,
184 &iio_dev_attr_poke_ev9.dev_attr.attr,
189 .attrs = iio_evgen_attrs,
197 static struct device iio_evgen_dev = {
199 .groups = iio_evgen_groups,
200 .release = &iio_evgen_release,
202 static __init int iio_dummy_evgen_init(
void)
204 int ret = iio_dummy_evgen_create();
213 static __exit void iio_dummy_evgen_exit(
void)