mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-03 11:13:56 +08:00
iio: dln2-adc: fix iio_triggered_buffer_postenable() position
The iio_triggered_buffer_postenable() hook should be called first to attach the poll function. The iio_triggered_buffer_predisable() hook is called last (as is it should). This change moves iio_triggered_buffer_postenable() to be called first. It adds iio_triggered_buffer_predisable() on the error paths of the postenable hook. For the predisable hook, some code-paths have been changed to make sure that the iio_triggered_buffer_predisable() hook gets called in case there is an error before it. Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
f8be8d1ede
commit
a7bddfe2df
@ -524,6 +524,10 @@ static int dln2_adc_triggered_buffer_postenable(struct iio_dev *indio_dev)
|
|||||||
u16 conflict;
|
u16 conflict;
|
||||||
unsigned int trigger_chan;
|
unsigned int trigger_chan;
|
||||||
|
|
||||||
|
ret = iio_triggered_buffer_postenable(indio_dev);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
mutex_lock(&dln2->mutex);
|
mutex_lock(&dln2->mutex);
|
||||||
|
|
||||||
/* Enable ADC */
|
/* Enable ADC */
|
||||||
@ -537,6 +541,7 @@ static int dln2_adc_triggered_buffer_postenable(struct iio_dev *indio_dev)
|
|||||||
(int)conflict);
|
(int)conflict);
|
||||||
ret = -EBUSY;
|
ret = -EBUSY;
|
||||||
}
|
}
|
||||||
|
iio_triggered_buffer_predisable(indio_dev);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -550,6 +555,7 @@ static int dln2_adc_triggered_buffer_postenable(struct iio_dev *indio_dev)
|
|||||||
mutex_unlock(&dln2->mutex);
|
mutex_unlock(&dln2->mutex);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
|
dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
|
||||||
|
iio_triggered_buffer_predisable(indio_dev);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -557,12 +563,12 @@ static int dln2_adc_triggered_buffer_postenable(struct iio_dev *indio_dev)
|
|||||||
mutex_unlock(&dln2->mutex);
|
mutex_unlock(&dln2->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return iio_triggered_buffer_postenable(indio_dev);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dln2_adc_triggered_buffer_predisable(struct iio_dev *indio_dev)
|
static int dln2_adc_triggered_buffer_predisable(struct iio_dev *indio_dev)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret, ret2;
|
||||||
struct dln2_adc *dln2 = iio_priv(indio_dev);
|
struct dln2_adc *dln2 = iio_priv(indio_dev);
|
||||||
|
|
||||||
mutex_lock(&dln2->mutex);
|
mutex_lock(&dln2->mutex);
|
||||||
@ -577,12 +583,14 @@ static int dln2_adc_triggered_buffer_predisable(struct iio_dev *indio_dev)
|
|||||||
ret = dln2_adc_set_port_enabled(dln2, false, NULL);
|
ret = dln2_adc_set_port_enabled(dln2, false, NULL);
|
||||||
|
|
||||||
mutex_unlock(&dln2->mutex);
|
mutex_unlock(&dln2->mutex);
|
||||||
if (ret < 0) {
|
if (ret < 0)
|
||||||
dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
|
dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return iio_triggered_buffer_predisable(indio_dev);
|
ret2 = iio_triggered_buffer_predisable(indio_dev);
|
||||||
|
if (ret == 0)
|
||||||
|
ret = ret2;
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct iio_buffer_setup_ops dln2_adc_buffer_setup_ops = {
|
static const struct iio_buffer_setup_ops dln2_adc_buffer_setup_ops = {
|
||||||
|
Loading…
Reference in New Issue
Block a user