summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2017-04-13 18:38:33 -0700
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2017-12-21 14:27:46 +0100
commit7d9a3340afa8c6279eefe46be553953388f5fd7a (patch)
tree06a8db7aaec6fd573f0289f0c3ae606a229c58bb /drivers
parenteae4f0271151b1b6fd73c26df82e67a2717e3d98 (diff)
iio: adc: remove event advertisment
The driver currently advertise events, however, the required callback read_event_config is not implemented. This leads to a stack trace when trying to read the even files in sysfs: Unable to handle kernel NULL pointer dereference at virtual address 00000000 pgd = 80e04000 [00000000] *pgd=10a57831, *pte=00000000, *ppte=00000000 Internal error: Oops: 80000007 [#1] SMP ARM Modules linked in: CPU: 0 PID: 175 Comm: cat Not tainted 4.1.39-00001-g52349f183498 #41 Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree) task: 80e4e800 ti: 80a38000 task.ti: 80a38000 PC is at 0x0 LR is at iio_ev_state_show+0x4c/0x70 pc : [<00000000>] lr : [<80613704>] psr: a0070013 sp : 80a39aa0 ip : 807f1a74 fp : 80a39ab4 r10: 00000001 r9 : 8809d000 r8 : 80e74800 r7 : 80da0c18 r6 : 807cae38 r5 : 00000000 r4 : 8809d000 r3 : 00000002 r2 : 00000000 r1 : 807f1730 r0 : 80da0c00 Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel Control: 10c5387d Table: 10e0404a DAC: 00000015 Process cat (pid: 175, stack limit = 0x80a38210) Signed-off-by: Stefan Agner <stefan.agner@toradex.com> Acked-by: Max Krummenacher <max.krummenacher@toradex.com> (cherry picked from commit b6798bb5050a786f7cdd2a47db8029fee74e36fe)
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/iio/adc/stmpe-adc.c77
1 files changed, 28 insertions, 49 deletions
diff --git a/drivers/staging/iio/adc/stmpe-adc.c b/drivers/staging/iio/adc/stmpe-adc.c
index f23c1e92d5bb..2918b16d98e8 100644
--- a/drivers/staging/iio/adc/stmpe-adc.c
+++ b/drivers/staging/iio/adc/stmpe-adc.c
@@ -191,64 +191,41 @@ static const struct iio_info stmpe_adc_iio_info = {
.driver_module = THIS_MODULE,
};
-
-static const struct iio_event_spec stmpe_adc_events[] = {
- {
- .type = IIO_EV_TYPE_THRESH,
- .dir = IIO_EV_DIR_RISING,
- .mask_separate = BIT(IIO_EV_INFO_VALUE) |
- BIT(IIO_EV_INFO_ENABLE),
- }, {
- .type = IIO_EV_TYPE_THRESH,
- .dir = IIO_EV_DIR_FALLING,
- .mask_separate = BIT(IIO_EV_INFO_VALUE) |
- BIT(IIO_EV_INFO_ENABLE),
- },
-};
-
-#define STMPE_VOLTAGE_CHAN(_chan, ev_spec, num_ev_spec) \
+#define STMPE_VOLTAGE_CHAN(_chan) \
{ \
.type = IIO_VOLTAGE, \
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
.indexed = 1, \
.channel = _chan, \
- .event_spec = ev_spec, \
- .num_event_specs = num_ev_spec, \
+}
+
+#define STMPE_TEMP_CHAN(_chan) \
+{ \
+ .type = IIO_TEMP, \
+ .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), \
+ .indexed = 1, \
+ .channel = _chan, \
}
static const struct iio_chan_spec stmpe_adc_all_iio_channels[] = {
- STMPE_VOLTAGE_CHAN(0, stmpe_adc_events, ARRAY_SIZE(stmpe_adc_events)),
- STMPE_VOLTAGE_CHAN(1, stmpe_adc_events, ARRAY_SIZE(stmpe_adc_events)),
- STMPE_VOLTAGE_CHAN(2, stmpe_adc_events, ARRAY_SIZE(stmpe_adc_events)),
- STMPE_VOLTAGE_CHAN(3, stmpe_adc_events, ARRAY_SIZE(stmpe_adc_events)),
- STMPE_VOLTAGE_CHAN(4, stmpe_adc_events, ARRAY_SIZE(stmpe_adc_events)),
- STMPE_VOLTAGE_CHAN(5, stmpe_adc_events, ARRAY_SIZE(stmpe_adc_events)),
- STMPE_VOLTAGE_CHAN(6, stmpe_adc_events, ARRAY_SIZE(stmpe_adc_events)),
- STMPE_VOLTAGE_CHAN(7, stmpe_adc_events, ARRAY_SIZE(stmpe_adc_events)),
- {
- .type = IIO_TEMP,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .indexed = 1,
- .channel = 8,
- .event_spec = stmpe_adc_events,
- .num_event_specs = ARRAY_SIZE(stmpe_adc_events),
- }
+ STMPE_VOLTAGE_CHAN(0),
+ STMPE_VOLTAGE_CHAN(1),
+ STMPE_VOLTAGE_CHAN(2),
+ STMPE_VOLTAGE_CHAN(3),
+ STMPE_VOLTAGE_CHAN(4),
+ STMPE_VOLTAGE_CHAN(5),
+ STMPE_VOLTAGE_CHAN(6),
+ STMPE_VOLTAGE_CHAN(7),
+ STMPE_TEMP_CHAN(8),
};
static const struct iio_chan_spec stmpe_adc_iio_channels[] = {
- STMPE_VOLTAGE_CHAN(4, stmpe_adc_events, ARRAY_SIZE(stmpe_adc_events)),
- STMPE_VOLTAGE_CHAN(5, stmpe_adc_events, ARRAY_SIZE(stmpe_adc_events)),
- STMPE_VOLTAGE_CHAN(6, stmpe_adc_events, ARRAY_SIZE(stmpe_adc_events)),
- STMPE_VOLTAGE_CHAN(7, stmpe_adc_events, ARRAY_SIZE(stmpe_adc_events)),
- {
- .type = IIO_TEMP,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .indexed = 1,
- .channel = 8,
- .event_spec = stmpe_adc_events,
- .num_event_specs = ARRAY_SIZE(stmpe_adc_events),
- }
+ STMPE_VOLTAGE_CHAN(4),
+ STMPE_VOLTAGE_CHAN(5),
+ STMPE_VOLTAGE_CHAN(6),
+ STMPE_VOLTAGE_CHAN(7),
+ STMPE_TEMP_CHAN(8),
};
static int stmpe_adc_init_hw(struct stmpe_adc *adc)
@@ -360,11 +337,13 @@ static int stmpe_adc_probe(struct platform_device *pdev)
indio_dev->modes = INDIO_DIRECT_MODE;
/* Register TS-Channels only if they are available */
- if (stmpe->blocks & STMPE_BLOCK_TOUCHSCREEN)
+ if (stmpe->blocks & STMPE_BLOCK_TOUCHSCREEN) {
indio_dev->channels = stmpe_adc_iio_channels;
- else
+ indio_dev->num_channels = ARRAY_SIZE(stmpe_adc_iio_channels);
+ } else {
indio_dev->channels = stmpe_adc_all_iio_channels;
- indio_dev->num_channels = ARRAY_SIZE(stmpe_adc_iio_channels);
+ indio_dev->num_channels = ARRAY_SIZE(stmpe_adc_all_iio_channels);
+ }
stmpe_adc_get_platform_info(pdev, info);