Skip to content

Commit

Permalink
staging:iio: core. Allow for event chrdev obtaining ioctl if no buffe…
Browse files Browse the repository at this point in the history
…r 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>
  • Loading branch information
Jonathan Cameron authored and Greg Kroah-Hartman committed Nov 27, 2011
1 parent bc9f35d commit 96e00f1
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 3 deletions.
2 changes: 1 addition & 1 deletion drivers/staging/iio/iio_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
6 changes: 4 additions & 2 deletions drivers/staging/iio/industrialio-buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand All @@ -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;
Expand All @@ -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);
Expand Down

0 comments on commit 96e00f1

Please sign in to comment.