diff options
author | Stefan Agner <stefan.agner@toradex.com> | 2017-04-13 18:38:33 -0700 |
---|---|---|
committer | Marcel Ziswiler <marcel.ziswiler@toradex.com> | 2017-12-21 14:27:46 +0100 |
commit | 7d9a3340afa8c6279eefe46be553953388f5fd7a (patch) | |
tree | 06a8db7aaec6fd573f0289f0c3ae606a229c58bb /drivers | |
parent | eae4f0271151b1b6fd73c26df82e67a2717e3d98 (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.c | 77 |
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); |