| From e1b1fa66a0398f0b52ae79a2bdc7de87c205d074 Mon Sep 17 00:00:00 2001 |
| From: Marek Vasut <marex@denx.de> |
| Date: Sat, 29 Jun 2013 22:20:00 +0100 |
| Subject: iio: mxs-lradc: Fix misuse of iio->trig |
| |
| From: Marek Vasut <marex@denx.de> |
| |
| commit e1b1fa66a0398f0b52ae79a2bdc7de87c205d074 upstream. |
| |
| The struct iio_dev .trig field is to be used only by the IIO core, |
| the driver shall not fill this field. This fixes ugly crash when |
| the driver is compiled as a module and the module is rmmod'd. |
| |
| Signed-off-by: Marek Vasut <marex@denx.de> |
| Cc: Fabio Estevam <fabio.estevam@freescale.com> |
| Cc: Jonathan Cameron <jic23@kernel.org> |
| Cc: Shawn Guo <shawn.guo@linaro.org> |
| Signed-off-by: Jonathan Cameron <jic23@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/staging/iio/adc/mxs-lradc.c | 11 +++++++---- |
| 1 file changed, 7 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/staging/iio/adc/mxs-lradc.c |
| +++ b/drivers/staging/iio/adc/mxs-lradc.c |
| @@ -661,12 +661,13 @@ static int mxs_lradc_trigger_init(struct |
| { |
| int ret; |
| struct iio_trigger *trig; |
| + struct mxs_lradc *lradc = iio_priv(iio); |
| |
| trig = iio_trigger_alloc("%s-dev%i", iio->name, iio->id); |
| if (trig == NULL) |
| return -ENOMEM; |
| |
| - trig->dev.parent = iio->dev.parent; |
| + trig->dev.parent = lradc->dev; |
| iio_trigger_set_drvdata(trig, iio); |
| trig->ops = &mxs_lradc_trigger_ops; |
| |
| @@ -676,15 +677,17 @@ static int mxs_lradc_trigger_init(struct |
| return ret; |
| } |
| |
| - iio->trig = trig; |
| + lradc->trig = trig; |
| |
| return 0; |
| } |
| |
| static void mxs_lradc_trigger_remove(struct iio_dev *iio) |
| { |
| - iio_trigger_unregister(iio->trig); |
| - iio_trigger_free(iio->trig); |
| + struct mxs_lradc *lradc = iio_priv(iio); |
| + |
| + iio_trigger_unregister(lradc->trig); |
| + iio_trigger_free(lradc->trig); |
| } |
| |
| static int mxs_lradc_buffer_preenable(struct iio_dev *iio) |