forked from luck/tmp_suning_uos_patched
staging:iio: core. Allow for event chrdev obtaining ioctl if no buffer present.
Logic bug meant the chrdev would fail to open if there was no buffer support in a driver or in the core. This meant the ioctl to get the event chrdev would fail and hence events were not available. V2: change error to -EINVAL to mark as unsuitable for reading rather than not there. Both are true depending on how you look at it. Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
bc9f35db8f
commit
96e00f110f
@ -49,7 +49,7 @@ ssize_t iio_buffer_read_first_n_outer(struct file *filp, char __user *buf,
|
||||
|
||||
static inline int iio_chrdev_buffer_open(struct iio_dev *indio_dev)
|
||||
{
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void iio_chrdev_buffer_release(struct iio_dev *indio_dev)
|
||||
|
@ -43,7 +43,7 @@ ssize_t iio_buffer_read_first_n_outer(struct file *filp, char __user *buf,
|
||||
struct iio_dev *indio_dev = filp->private_data;
|
||||
struct iio_buffer *rb = indio_dev->buffer;
|
||||
|
||||
if (!rb->access->read_first_n)
|
||||
if (!rb || !rb->access->read_first_n)
|
||||
return -EINVAL;
|
||||
return rb->access->read_first_n(rb, n, buf);
|
||||
}
|
||||
@ -68,7 +68,7 @@ int iio_chrdev_buffer_open(struct iio_dev *indio_dev)
|
||||
{
|
||||
struct iio_buffer *rb = indio_dev->buffer;
|
||||
if (!rb)
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
if (rb->access->mark_in_use)
|
||||
rb->access->mark_in_use(rb);
|
||||
return 0;
|
||||
@ -78,6 +78,8 @@ void iio_chrdev_buffer_release(struct iio_dev *indio_dev)
|
||||
{
|
||||
struct iio_buffer *rb = indio_dev->buffer;
|
||||
|
||||
if (!rb)
|
||||
return;
|
||||
clear_bit(IIO_BUSY_BIT_POS, &rb->flags);
|
||||
if (rb->access->unmark_in_use)
|
||||
rb->access->unmark_in_use(rb);
|
||||
|
Loading…
Reference in New Issue
Block a user