On 10/12/10 09:30, michael.hennerich@xxxxxxxxxx wrote: > From: Michael Hennerich <michael.hennerich@xxxxxxxxxx> > > -Simplify by using iio_alloc_pollfunc helper function > -Print in_scale in decimal format. > -Simplify ring pointer dereferences > > Signed-off-by: Michael Hennerich <michael.hennerich@xxxxxxxxxx> Acked-by: Jonathan Cameron <jic23@xxxxxxxxx> > --- > drivers/staging/iio/adc/ad799x_core.c | 9 ++----- > drivers/staging/iio/adc/ad799x_ring.c | 34 ++++++++++++++------------------ > 2 files changed, 18 insertions(+), 25 deletions(-) > > diff --git a/drivers/staging/iio/adc/ad799x_core.c b/drivers/staging/iio/adc/ad799x_core.c > index 35fad73..6309d52 100644 > --- a/drivers/staging/iio/adc/ad799x_core.c > +++ b/drivers/staging/iio/adc/ad799x_core.c > @@ -428,14 +428,11 @@ static ssize_t ad799x_show_scale(struct device *dev, > /* Driver currently only support internal vref */ > struct iio_dev *dev_info = dev_get_drvdata(dev); > struct ad799x_state *st = iio_dev_get_devdata(dev_info); > + > /* Corresponds to Vref / 2^(bits) */ > + unsigned int scale_uv = (st->int_vref_mv * 1000) >> st->chip_info->bits; > > - if ((1 << (st->chip_info->bits + 1)) > - > st->int_vref_mv) > - return sprintf(buf, "0.5\n"); > - else > - return sprintf(buf, "%d\n", > - st->int_vref_mv >> st->chip_info->bits); > + return sprintf(buf, "%d.%d\n", scale_uv / 1000, scale_uv % 1000); > } > > static IIO_DEVICE_ATTR(in_scale, S_IRUGO, ad799x_show_scale, NULL, 0); > diff --git a/drivers/staging/iio/adc/ad799x_ring.c b/drivers/staging/iio/adc/ad799x_ring.c > index c6871fa..975cdcb 100644 > --- a/drivers/staging/iio/adc/ad799x_ring.c > +++ b/drivers/staging/iio/adc/ad799x_ring.c > @@ -32,6 +32,7 @@ int ad799x_single_channel_from_ring(struct ad799x_state *st, long mask) > struct iio_ring_buffer *ring = st->indio_dev->ring; > int count = 0, ret; > u16 *ring_data; > + > if (!(ring->scan_mask & mask)) { > ret = -EBUSY; > goto error_ret; > @@ -70,6 +71,7 @@ error_ret: > **/ > static int ad799x_ring_preenable(struct iio_dev *indio_dev) > { > + struct iio_ring_buffer *ring = indio_dev->ring; > struct ad799x_state *st = indio_dev->dev_data; > size_t d_size; > unsigned long numvals; > @@ -80,16 +82,15 @@ static int ad799x_ring_preenable(struct iio_dev *indio_dev) > */ > > if (st->id == ad7997 || st->id == ad7998) > - ad799x_set_scan_mode(st, st->indio_dev->ring->scan_mask); > + ad799x_set_scan_mode(st, ring->scan_mask); > > - numvals = st->indio_dev->ring->scan_count; > + numvals = ring->scan_count; > > - if (indio_dev->ring->access.set_bytes_per_datum) { > + if (ring->access.set_bytes_per_datum) { > d_size = numvals*2 + sizeof(s64); > if (d_size % 8) > d_size += 8 - (d_size % 8); > - indio_dev->ring->access.set_bytes_per_datum(indio_dev->ring, > - d_size); > + ring->access.set_bytes_per_datum(ring, d_size); > } > > return 0; > @@ -124,14 +125,15 @@ static void ad799x_poll_bh_to_ring(struct work_struct *work_s) > struct ad799x_state *st = container_of(work_s, struct ad799x_state, > poll_work); > struct iio_dev *indio_dev = st->indio_dev; > - struct iio_sw_ring_buffer *ring = iio_to_sw_ring(indio_dev->ring); > + struct iio_ring_buffer *ring = indio_dev->ring; > + struct iio_sw_ring_buffer *ring_sw = iio_to_sw_ring(indio_dev->ring); > s64 time_ns; > __u8 *rxbuf; > int b_sent; > size_t d_size; > u8 cmd; > > - unsigned long numvals = st->indio_dev->ring->scan_count; > + unsigned long numvals = ring->scan_count; > > /* Ensure the timestamp is 8 byte aligned */ > d_size = numvals*2 + sizeof(s64); > @@ -158,14 +160,13 @@ static void ad799x_poll_bh_to_ring(struct work_struct *work_s) > case ad7991: > case ad7995: > case ad7999: > - cmd = st->config | (st->indio_dev->ring->scan_mask << > - AD799X_CHANNEL_SHIFT); > + cmd = st->config | (ring->scan_mask << AD799X_CHANNEL_SHIFT); > break; > case ad7992: > case ad7993: > case ad7994: > - cmd = (st->indio_dev->ring->scan_mask << > - AD799X_CHANNEL_SHIFT) | AD7998_CONV_RES_REG; > + cmd = (ring->scan_mask << AD799X_CHANNEL_SHIFT) | > + AD7998_CONV_RES_REG; > break; > case ad7997: > case ad7998: > @@ -184,7 +185,7 @@ static void ad799x_poll_bh_to_ring(struct work_struct *work_s) > > memcpy(rxbuf + d_size - sizeof(s64), &time_ns, sizeof(time_ns)); > > - indio_dev->ring->access.store_to(&ring->buf, rxbuf, time_ns); > + ring->access.store_to(&ring_sw->buf, rxbuf, time_ns); > done: > kfree(rxbuf); > atomic_dec(&st->protect_ring); > @@ -203,14 +204,9 @@ int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev) > } > /* Effectively select the ring buffer implementation */ > iio_ring_sw_register_funcs(&st->indio_dev->ring->access); > - indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); > - if (indio_dev->pollfunc == NULL) { > - ret = -ENOMEM; > + ret = iio_alloc_pollfunc(indio_dev, NULL, &ad799x_poll_func_th); > + if (ret) > goto error_deallocate_sw_rb; > - } > - /* Configure the polling function called on trigger interrupts */ > - indio_dev->pollfunc->poll_func_main = &ad799x_poll_func_th; > - indio_dev->pollfunc->private_data = indio_dev; > > /* Ring buffer functions - here trigger setup related */ > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html