Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / drivers / iio / dummy / iio_simple_dummy.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /**
3  * Copyright (c) 2011 Jonathan Cameron
4  *
5  * A reference industrial I/O driver to illustrate the functionality available.
6  *
7  * There are numerous real drivers to illustrate the finer points.
8  * The purpose of this driver is to provide a driver with far more comments
9  * and explanatory notes than any 'real' driver would have.
10  * Anyone starting out writing an IIO driver should first make sure they
11  * understand all of this driver except those bits specifically marked
12  * as being present to allow us to 'fake' the presence of hardware.
13  */
14 #include <linux/kernel.h>
15 #include <linux/slab.h>
16 #include <linux/module.h>
17 #include <linux/string.h>
18
19 #include <linux/iio/iio.h>
20 #include <linux/iio/sysfs.h>
21 #include <linux/iio/events.h>
22 #include <linux/iio/buffer.h>
23 #include <linux/iio/sw_device.h>
24 #include "iio_simple_dummy.h"
25
26 static const struct config_item_type iio_dummy_type = {
27         .ct_owner = THIS_MODULE,
28 };
29
30 /**
31  * struct iio_dummy_accel_calibscale - realworld to register mapping
32  * @val: first value in read_raw - here integer part.
33  * @val2: second value in read_raw etc - here micro part.
34  * @regval: register value - magic device specific numbers.
35  */
36 struct iio_dummy_accel_calibscale {
37         int val;
38         int val2;
39         int regval; /* what would be written to hardware */
40 };
41
42 static const struct iio_dummy_accel_calibscale dummy_scales[] = {
43         { 0, 100, 0x8 }, /* 0.000100 */
44         { 0, 133, 0x7 }, /* 0.000133 */
45         { 733, 13, 0x9 }, /* 733.000013 */
46 };
47
48 #ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
49
50 /*
51  * simple event - triggered when value rises above
52  * a threshold
53  */
54 static const struct iio_event_spec iio_dummy_event = {
55         .type = IIO_EV_TYPE_THRESH,
56         .dir = IIO_EV_DIR_RISING,
57         .mask_separate = BIT(IIO_EV_INFO_VALUE) | BIT(IIO_EV_INFO_ENABLE),
58 };
59
60 /*
61  * simple step detect event - triggered when a step is detected
62  */
63 static const struct iio_event_spec step_detect_event = {
64         .type = IIO_EV_TYPE_CHANGE,
65         .dir = IIO_EV_DIR_NONE,
66         .mask_separate = BIT(IIO_EV_INFO_ENABLE),
67 };
68
69 /*
70  * simple transition event - triggered when the reported running confidence
71  * value rises above a threshold value
72  */
73 static const struct iio_event_spec iio_running_event = {
74         .type = IIO_EV_TYPE_THRESH,
75         .dir = IIO_EV_DIR_RISING,
76         .mask_separate = BIT(IIO_EV_INFO_VALUE) | BIT(IIO_EV_INFO_ENABLE),
77 };
78
79 /*
80  * simple transition event - triggered when the reported walking confidence
81  * value falls under a threshold value
82  */
83 static const struct iio_event_spec iio_walking_event = {
84         .type = IIO_EV_TYPE_THRESH,
85         .dir = IIO_EV_DIR_FALLING,
86         .mask_separate = BIT(IIO_EV_INFO_VALUE) | BIT(IIO_EV_INFO_ENABLE),
87 };
88 #endif
89
90 /*
91  * iio_dummy_channels - Description of available channels
92  *
93  * This array of structures tells the IIO core about what the device
94  * actually provides for a given channel.
95  */
96 static const struct iio_chan_spec iio_dummy_channels[] = {
97         /* indexed ADC channel in_voltage0_raw etc */
98         {
99                 .type = IIO_VOLTAGE,
100                 /* Channel has a numeric index of 0 */
101                 .indexed = 1,
102                 .channel = 0,
103                 /* What other information is available? */
104                 .info_mask_separate =
105                 /*
106                  * in_voltage0_raw
107                  * Raw (unscaled no bias removal etc) measurement
108                  * from the device.
109                  */
110                 BIT(IIO_CHAN_INFO_RAW) |
111                 /*
112                  * in_voltage0_offset
113                  * Offset for userspace to apply prior to scale
114                  * when converting to standard units (microvolts)
115                  */
116                 BIT(IIO_CHAN_INFO_OFFSET) |
117                 /*
118                  * in_voltage0_scale
119                  * Multipler for userspace to apply post offset
120                  * when converting to standard units (microvolts)
121                  */
122                 BIT(IIO_CHAN_INFO_SCALE),
123                 /*
124                  * sampling_frequency
125                  * The frequency in Hz at which the channels are sampled
126                  */
127                 .info_mask_shared_by_dir = BIT(IIO_CHAN_INFO_SAMP_FREQ),
128                 /* The ordering of elements in the buffer via an enum */
129                 .scan_index = DUMMY_INDEX_VOLTAGE_0,
130                 .scan_type = { /* Description of storage in buffer */
131                         .sign = 'u', /* unsigned */
132                         .realbits = 13, /* 13 bits */
133                         .storagebits = 16, /* 16 bits used for storage */
134                         .shift = 0, /* zero shift */
135                 },
136 #ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
137                 .event_spec = &iio_dummy_event,
138                 .num_event_specs = 1,
139 #endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS */
140         },
141         /* Differential ADC channel in_voltage1-voltage2_raw etc*/
142         {
143                 .type = IIO_VOLTAGE,
144                 .differential = 1,
145                 /*
146                  * Indexing for differential channels uses channel
147                  * for the positive part, channel2 for the negative.
148                  */
149                 .indexed = 1,
150                 .channel = 1,
151                 .channel2 = 2,
152                 /*
153                  * in_voltage1-voltage2_raw
154                  * Raw (unscaled no bias removal etc) measurement
155                  * from the device.
156                  */
157                 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
158                 /*
159                  * in_voltage-voltage_scale
160                  * Shared version of scale - shared by differential
161                  * input channels of type IIO_VOLTAGE.
162                  */
163                 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
164                 /*
165                  * sampling_frequency
166                  * The frequency in Hz at which the channels are sampled
167                  */
168                 .scan_index = DUMMY_INDEX_DIFFVOLTAGE_1M2,
169                 .scan_type = { /* Description of storage in buffer */
170                         .sign = 's', /* signed */
171                         .realbits = 12, /* 12 bits */
172                         .storagebits = 16, /* 16 bits used for storage */
173                         .shift = 0, /* zero shift */
174                 },
175         },
176         /* Differential ADC channel in_voltage3-voltage4_raw etc*/
177         {
178                 .type = IIO_VOLTAGE,
179                 .differential = 1,
180                 .indexed = 1,
181                 .channel = 3,
182                 .channel2 = 4,
183                 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
184                 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
185                 .info_mask_shared_by_dir = BIT(IIO_CHAN_INFO_SAMP_FREQ),
186                 .scan_index = DUMMY_INDEX_DIFFVOLTAGE_3M4,
187                 .scan_type = {
188                         .sign = 's',
189                         .realbits = 11,
190                         .storagebits = 16,
191                         .shift = 0,
192                 },
193         },
194         /*
195          * 'modified' (i.e. axis specified) acceleration channel
196          * in_accel_z_raw
197          */
198         {
199                 .type = IIO_ACCEL,
200                 .modified = 1,
201                 /* Channel 2 is use for modifiers */
202                 .channel2 = IIO_MOD_X,
203                 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
204                 /*
205                  * Internal bias and gain correction values. Applied
206                  * by the hardware or driver prior to userspace
207                  * seeing the readings. Typically part of hardware
208                  * calibration.
209                  */
210                 BIT(IIO_CHAN_INFO_CALIBSCALE) |
211                 BIT(IIO_CHAN_INFO_CALIBBIAS),
212                 .info_mask_shared_by_dir = BIT(IIO_CHAN_INFO_SAMP_FREQ),
213                 .scan_index = DUMMY_INDEX_ACCELX,
214                 .scan_type = { /* Description of storage in buffer */
215                         .sign = 's', /* signed */
216                         .realbits = 16, /* 16 bits */
217                         .storagebits = 16, /* 16 bits used for storage */
218                         .shift = 0, /* zero shift */
219                 },
220         },
221         /*
222          * Convenience macro for timestamps. 4 is the index in
223          * the buffer.
224          */
225         IIO_CHAN_SOFT_TIMESTAMP(4),
226         /* DAC channel out_voltage0_raw */
227         {
228                 .type = IIO_VOLTAGE,
229                 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
230                 .scan_index = -1, /* No buffer support */
231                 .output = 1,
232                 .indexed = 1,
233                 .channel = 0,
234         },
235         {
236                 .type = IIO_STEPS,
237                 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_ENABLE) |
238                         BIT(IIO_CHAN_INFO_CALIBHEIGHT),
239                 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
240                 .scan_index = -1, /* No buffer support */
241 #ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
242                 .event_spec = &step_detect_event,
243                 .num_event_specs = 1,
244 #endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS */
245         },
246         {
247                 .type = IIO_ACTIVITY,
248                 .modified = 1,
249                 .channel2 = IIO_MOD_RUNNING,
250                 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
251                 .scan_index = -1, /* No buffer support */
252 #ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
253                 .event_spec = &iio_running_event,
254                 .num_event_specs = 1,
255 #endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS */
256         },
257         {
258                 .type = IIO_ACTIVITY,
259                 .modified = 1,
260                 .channel2 = IIO_MOD_WALKING,
261                 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
262                 .scan_index = -1, /* No buffer support */
263 #ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
264                 .event_spec = &iio_walking_event,
265                 .num_event_specs = 1,
266 #endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS */
267         },
268 };
269
270 /**
271  * iio_dummy_read_raw() - data read function.
272  * @indio_dev:  the struct iio_dev associated with this device instance
273  * @chan:       the channel whose data is to be read
274  * @val:        first element of returned value (typically INT)
275  * @val2:       second element of returned value (typically MICRO)
276  * @mask:       what we actually want to read as per the info_mask_*
277  *              in iio_chan_spec.
278  */
279 static int iio_dummy_read_raw(struct iio_dev *indio_dev,
280                               struct iio_chan_spec const *chan,
281                               int *val,
282                               int *val2,
283                               long mask)
284 {
285         struct iio_dummy_state *st = iio_priv(indio_dev);
286         int ret = -EINVAL;
287
288         mutex_lock(&st->lock);
289         switch (mask) {
290         case IIO_CHAN_INFO_RAW: /* magic value - channel value read */
291                 switch (chan->type) {
292                 case IIO_VOLTAGE:
293                         if (chan->output) {
294                                 /* Set integer part to cached value */
295                                 *val = st->dac_val;
296                                 ret = IIO_VAL_INT;
297                         } else if (chan->differential) {
298                                 if (chan->channel == 1)
299                                         *val = st->differential_adc_val[0];
300                                 else
301                                         *val = st->differential_adc_val[1];
302                                 ret = IIO_VAL_INT;
303                         } else {
304                                 *val = st->single_ended_adc_val;
305                                 ret = IIO_VAL_INT;
306                         }
307                         break;
308                 case IIO_ACCEL:
309                         *val = st->accel_val;
310                         ret = IIO_VAL_INT;
311                         break;
312                 default:
313                         break;
314                 }
315                 break;
316         case IIO_CHAN_INFO_PROCESSED:
317                 switch (chan->type) {
318                 case IIO_STEPS:
319                         *val = st->steps;
320                         ret = IIO_VAL_INT;
321                         break;
322                 case IIO_ACTIVITY:
323                         switch (chan->channel2) {
324                         case IIO_MOD_RUNNING:
325                                 *val = st->activity_running;
326                                 ret = IIO_VAL_INT;
327                                 break;
328                         case IIO_MOD_WALKING:
329                                 *val = st->activity_walking;
330                                 ret = IIO_VAL_INT;
331                                 break;
332                         default:
333                                 break;
334                         }
335                         break;
336                 default:
337                         break;
338                 }
339                 break;
340         case IIO_CHAN_INFO_OFFSET:
341                 /* only single ended adc -> 7 */
342                 *val = 7;
343                 ret = IIO_VAL_INT;
344                 break;
345         case IIO_CHAN_INFO_SCALE:
346                 switch (chan->type) {
347                 case IIO_VOLTAGE:
348                         switch (chan->differential) {
349                         case 0:
350                                 /* only single ended adc -> 0.001333 */
351                                 *val = 0;
352                                 *val2 = 1333;
353                                 ret = IIO_VAL_INT_PLUS_MICRO;
354                                 break;
355                         case 1:
356                                 /* all differential adc -> 0.000001344 */
357                                 *val = 0;
358                                 *val2 = 1344;
359                                 ret = IIO_VAL_INT_PLUS_NANO;
360                         }
361                         break;
362                 default:
363                         break;
364                 }
365                 break;
366         case IIO_CHAN_INFO_CALIBBIAS:
367                 /* only the acceleration axis - read from cache */
368                 *val = st->accel_calibbias;
369                 ret = IIO_VAL_INT;
370                 break;
371         case IIO_CHAN_INFO_CALIBSCALE:
372                 *val = st->accel_calibscale->val;
373                 *val2 = st->accel_calibscale->val2;
374                 ret = IIO_VAL_INT_PLUS_MICRO;
375                 break;
376         case IIO_CHAN_INFO_SAMP_FREQ:
377                 *val = 3;
378                 *val2 = 33;
379                 ret = IIO_VAL_INT_PLUS_NANO;
380                 break;
381         case IIO_CHAN_INFO_ENABLE:
382                 switch (chan->type) {
383                 case IIO_STEPS:
384                         *val = st->steps_enabled;
385                         ret = IIO_VAL_INT;
386                         break;
387                 default:
388                         break;
389                 }
390                 break;
391         case IIO_CHAN_INFO_CALIBHEIGHT:
392                 switch (chan->type) {
393                 case IIO_STEPS:
394                         *val = st->height;
395                         ret = IIO_VAL_INT;
396                         break;
397                 default:
398                         break;
399                 }
400                 break;
401
402         default:
403                 break;
404         }
405         mutex_unlock(&st->lock);
406         return ret;
407 }
408
409 /**
410  * iio_dummy_write_raw() - data write function.
411  * @indio_dev:  the struct iio_dev associated with this device instance
412  * @chan:       the channel whose data is to be written
413  * @val:        first element of value to set (typically INT)
414  * @val2:       second element of value to set (typically MICRO)
415  * @mask:       what we actually want to write as per the info_mask_*
416  *              in iio_chan_spec.
417  *
418  * Note that all raw writes are assumed IIO_VAL_INT and info mask elements
419  * are assumed to be IIO_INT_PLUS_MICRO unless the callback write_raw_get_fmt
420  * in struct iio_info is provided by the driver.
421  */
422 static int iio_dummy_write_raw(struct iio_dev *indio_dev,
423                                struct iio_chan_spec const *chan,
424                                int val,
425                                int val2,
426                                long mask)
427 {
428         int i;
429         int ret = 0;
430         struct iio_dummy_state *st = iio_priv(indio_dev);
431
432         switch (mask) {
433         case IIO_CHAN_INFO_RAW:
434                 switch (chan->type) {
435                 case IIO_VOLTAGE:
436                         if (chan->output == 0)
437                                 return -EINVAL;
438
439                         /* Locking not required as writing single value */
440                         mutex_lock(&st->lock);
441                         st->dac_val = val;
442                         mutex_unlock(&st->lock);
443                         return 0;
444                 default:
445                         return -EINVAL;
446                 }
447         case IIO_CHAN_INFO_PROCESSED:
448                 switch (chan->type) {
449                 case IIO_STEPS:
450                         mutex_lock(&st->lock);
451                         st->steps = val;
452                         mutex_unlock(&st->lock);
453                         return 0;
454                 case IIO_ACTIVITY:
455                         if (val < 0)
456                                 val = 0;
457                         if (val > 100)
458                                 val = 100;
459                         switch (chan->channel2) {
460                         case IIO_MOD_RUNNING:
461                                 st->activity_running = val;
462                                 return 0;
463                         case IIO_MOD_WALKING:
464                                 st->activity_walking = val;
465                                 return 0;
466                         default:
467                                 return -EINVAL;
468                         }
469                         break;
470                 default:
471                         return -EINVAL;
472                 }
473         case IIO_CHAN_INFO_CALIBSCALE:
474                 mutex_lock(&st->lock);
475                 /* Compare against table - hard matching here */
476                 for (i = 0; i < ARRAY_SIZE(dummy_scales); i++)
477                         if (val == dummy_scales[i].val &&
478                             val2 == dummy_scales[i].val2)
479                                 break;
480                 if (i == ARRAY_SIZE(dummy_scales))
481                         ret = -EINVAL;
482                 else
483                         st->accel_calibscale = &dummy_scales[i];
484                 mutex_unlock(&st->lock);
485                 return ret;
486         case IIO_CHAN_INFO_CALIBBIAS:
487                 mutex_lock(&st->lock);
488                 st->accel_calibbias = val;
489                 mutex_unlock(&st->lock);
490                 return 0;
491         case IIO_CHAN_INFO_ENABLE:
492                 switch (chan->type) {
493                 case IIO_STEPS:
494                         mutex_lock(&st->lock);
495                         st->steps_enabled = val;
496                         mutex_unlock(&st->lock);
497                         return 0;
498                 default:
499                         return -EINVAL;
500                 }
501         case IIO_CHAN_INFO_CALIBHEIGHT:
502                 switch (chan->type) {
503                 case IIO_STEPS:
504                         st->height = val;
505                         return 0;
506                 default:
507                         return -EINVAL;
508                 }
509
510         default:
511                 return -EINVAL;
512         }
513 }
514
515 /*
516  * Device type specific information.
517  */
518 static const struct iio_info iio_dummy_info = {
519         .read_raw = &iio_dummy_read_raw,
520         .write_raw = &iio_dummy_write_raw,
521 #ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
522         .read_event_config = &iio_simple_dummy_read_event_config,
523         .write_event_config = &iio_simple_dummy_write_event_config,
524         .read_event_value = &iio_simple_dummy_read_event_value,
525         .write_event_value = &iio_simple_dummy_write_event_value,
526 #endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS */
527 };
528
529 /**
530  * iio_dummy_init_device() - device instance specific init
531  * @indio_dev: the iio device structure
532  *
533  * Most drivers have one of these to set up default values,
534  * reset the device to known state etc.
535  */
536 static int iio_dummy_init_device(struct iio_dev *indio_dev)
537 {
538         struct iio_dummy_state *st = iio_priv(indio_dev);
539
540         st->dac_val = 0;
541         st->single_ended_adc_val = 73;
542         st->differential_adc_val[0] = 33;
543         st->differential_adc_val[1] = -34;
544         st->accel_val = 34;
545         st->accel_calibbias = -7;
546         st->accel_calibscale = &dummy_scales[0];
547         st->steps = 47;
548         st->activity_running = 98;
549         st->activity_walking = 4;
550
551         return 0;
552 }
553
554 /**
555  * iio_dummy_probe() - device instance probe
556  * @index: an id number for this instance.
557  *
558  * Arguments are bus type specific.
559  * I2C: iio_dummy_probe(struct i2c_client *client,
560  *                      const struct i2c_device_id *id)
561  * SPI: iio_dummy_probe(struct spi_device *spi)
562  */
563 static struct iio_sw_device *iio_dummy_probe(const char *name)
564 {
565         int ret;
566         struct iio_dev *indio_dev;
567         struct iio_dummy_state *st;
568         struct iio_sw_device *swd;
569
570         swd = kzalloc(sizeof(*swd), GFP_KERNEL);
571         if (!swd) {
572                 ret = -ENOMEM;
573                 goto error_kzalloc;
574         }
575         /*
576          * Allocate an IIO device.
577          *
578          * This structure contains all generic state
579          * information about the device instance.
580          * It also has a region (accessed by iio_priv()
581          * for chip specific state information.
582          */
583         indio_dev = iio_device_alloc(sizeof(*st));
584         if (!indio_dev) {
585                 ret = -ENOMEM;
586                 goto error_ret;
587         }
588
589         st = iio_priv(indio_dev);
590         mutex_init(&st->lock);
591
592         iio_dummy_init_device(indio_dev);
593         /*
594          * With hardware: Set the parent device.
595          * indio_dev->dev.parent = &spi->dev;
596          * indio_dev->dev.parent = &client->dev;
597          */
598
599          /*
600          * Make the iio_dev struct available to remove function.
601          * Bus equivalents
602          * i2c_set_clientdata(client, indio_dev);
603          * spi_set_drvdata(spi, indio_dev);
604          */
605         swd->device = indio_dev;
606
607         /*
608          * Set the device name.
609          *
610          * This is typically a part number and obtained from the module
611          * id table.
612          * e.g. for i2c and spi:
613          *    indio_dev->name = id->name;
614          *    indio_dev->name = spi_get_device_id(spi)->name;
615          */
616         indio_dev->name = kstrdup(name, GFP_KERNEL);
617
618         /* Provide description of available channels */
619         indio_dev->channels = iio_dummy_channels;
620         indio_dev->num_channels = ARRAY_SIZE(iio_dummy_channels);
621
622         /*
623          * Provide device type specific interface functions and
624          * constant data.
625          */
626         indio_dev->info = &iio_dummy_info;
627
628         /* Specify that device provides sysfs type interfaces */
629         indio_dev->modes = INDIO_DIRECT_MODE;
630
631         ret = iio_simple_dummy_events_register(indio_dev);
632         if (ret < 0)
633                 goto error_free_device;
634
635         ret = iio_simple_dummy_configure_buffer(indio_dev);
636         if (ret < 0)
637                 goto error_unregister_events;
638
639         ret = iio_device_register(indio_dev);
640         if (ret < 0)
641                 goto error_unconfigure_buffer;
642
643         iio_swd_group_init_type_name(swd, name, &iio_dummy_type);
644
645         return swd;
646 error_unconfigure_buffer:
647         iio_simple_dummy_unconfigure_buffer(indio_dev);
648 error_unregister_events:
649         iio_simple_dummy_events_unregister(indio_dev);
650 error_free_device:
651         iio_device_free(indio_dev);
652 error_ret:
653         kfree(swd);
654 error_kzalloc:
655         return ERR_PTR(ret);
656 }
657
658 /**
659  * iio_dummy_remove() - device instance removal function
660  * @swd: pointer to software IIO device abstraction
661  *
662  * Parameters follow those of iio_dummy_probe for buses.
663  */
664 static int iio_dummy_remove(struct iio_sw_device *swd)
665 {
666         /*
667          * Get a pointer to the device instance iio_dev structure
668          * from the bus subsystem. E.g.
669          * struct iio_dev *indio_dev = i2c_get_clientdata(client);
670          * struct iio_dev *indio_dev = spi_get_drvdata(spi);
671          */
672         struct iio_dev *indio_dev = swd->device;
673
674         /* Unregister the device */
675         iio_device_unregister(indio_dev);
676
677         /* Device specific code to power down etc */
678
679         /* Buffered capture related cleanup */
680         iio_simple_dummy_unconfigure_buffer(indio_dev);
681
682         iio_simple_dummy_events_unregister(indio_dev);
683
684         /* Free all structures */
685         kfree(indio_dev->name);
686         iio_device_free(indio_dev);
687
688         return 0;
689 }
690 /**
691  * module_iio_sw_device_driver() -  device driver registration
692  *
693  * Varies depending on bus type of the device. As there is no device
694  * here, call probe directly. For information on device registration
695  * i2c:
696  * Documentation/i2c/writing-clients
697  * spi:
698  * Documentation/spi/spi-summary
699  */
700 static const struct iio_sw_device_ops iio_dummy_device_ops = {
701         .probe = iio_dummy_probe,
702         .remove = iio_dummy_remove,
703 };
704
705 static struct iio_sw_device_type iio_dummy_device = {
706         .name = "dummy",
707         .owner = THIS_MODULE,
708         .ops = &iio_dummy_device_ops,
709 };
710
711 module_iio_sw_device_driver(iio_dummy_device);
712
713 MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>");
714 MODULE_DESCRIPTION("IIO dummy driver");
715 MODULE_LICENSE("GPL v2");