From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151]:35510 "EHLO ppsw-51.csi.cam.ac.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755177Ab1DRPsj (ORCPT ); Mon, 18 Apr 2011 11:48:39 -0400 Message-ID: <4DAC5DCD.5040706@cam.ac.uk> Date: Mon, 18 Apr 2011 16:50:37 +0100 From: Jonathan Cameron MIME-Version: 1.0 To: michael.hennerich@analog.com CC: linux-iio@vger.kernel.org, drivers@analog.com, device-drivers-devel@blackfin.uclinux.org Subject: Re: [PATCH 1/1] IIO-onwards: ADC: AD799x: Use private data space from iio_allocate_device References: <1303140639-3306-1-git-send-email-michael.hennerich@analog.com> In-Reply-To: <1303140639-3306-1-git-send-email-michael.hennerich@analog.com> Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-iio-owner@vger.kernel.org List-Id: linux-iio@vger.kernel.org On 04/18/11 16:30, michael.hennerich@analog.com wrote: > From: Michael Hennerich > > Use private data space from iio_allocate_device > Fix typo in pollfunc name That's in the tree already after you pointed out the other one. > > Signed-off-by: Michael Hennerich > --- > drivers/staging/iio/adc/ad799x.h | 1 - > drivers/staging/iio/adc/ad799x_core.c | 77 +++++++++++++++------------------ > drivers/staging/iio/adc/ad799x_ring.c | 9 ++-- > 3 files changed, 39 insertions(+), 48 deletions(-) > > diff --git a/drivers/staging/iio/adc/ad799x.h b/drivers/staging/iio/adc/ad799x.h > index 2e1506b..ae049f4 100644 > --- a/drivers/staging/iio/adc/ad799x.h > +++ b/drivers/staging/iio/adc/ad799x.h > @@ -103,7 +103,6 @@ struct ad799x_chip_info { > }; > > struct ad799x_state { > - struct iio_dev *indio_dev; > struct i2c_client *client; > const struct ad799x_chip_info *chip_info; > size_t d_size; > diff --git a/drivers/staging/iio/adc/ad799x_core.c b/drivers/staging/iio/adc/ad799x_core.c > index 10185c4..ceb75a3 100644 > --- a/drivers/staging/iio/adc/ad799x_core.c > +++ b/drivers/staging/iio/adc/ad799x_core.c > @@ -638,14 +638,15 @@ static int __devinit ad799x_probe(struct i2c_client *client, > { > int ret, regdone = 0; > struct ad799x_platform_data *pdata = client->dev.platform_data; > - struct ad799x_state *st = kzalloc(sizeof(*st), GFP_KERNEL); > - if (st == NULL) { > - ret = -ENOMEM; > - goto error_ret; > - } > + struct ad799x_state *st; > + struct iio_dev *indio_dev = iio_allocate_device(sizeof(*st)); > + > + if (indio_dev == NULL) > + return -ENOMEM; > > + st = iio_priv(indio_dev); > /* this is only used for device removal purposes */ > - i2c_set_clientdata(client, st); > + i2c_set_clientdata(client, indio_dev); > > st->id = id->driver_data; > st->chip_info = &ad799x_chip_info_tbl[st->id]; > @@ -666,35 +667,29 @@ static int __devinit ad799x_probe(struct i2c_client *client, > } > st->client = client; > > - st->indio_dev = iio_allocate_device(0); > - if (st->indio_dev == NULL) { > - ret = -ENOMEM; > - goto error_disable_reg; > - } > - > - st->indio_dev->dev.parent = &client->dev; > - st->indio_dev->name = id->name; > - st->indio_dev->event_attrs = st->chip_info->event_attrs; > - st->indio_dev->dev_data = (void *)(st); > - st->indio_dev->driver_module = THIS_MODULE; > - st->indio_dev->modes = INDIO_DIRECT_MODE; > - st->indio_dev->num_interrupt_lines = 1; > - st->indio_dev->channels = st->chip_info->channel; > - st->indio_dev->num_channels = st->chip_info->num_channels; > - st->indio_dev->read_raw = &ad799x_read_raw; > - > - ret = ad799x_register_ring_funcs_and_init(st->indio_dev); > + indio_dev->dev.parent = &client->dev; > + indio_dev->name = id->name; > + indio_dev->event_attrs = st->chip_info->event_attrs; > + indio_dev->dev_data = (void *)(st); > + indio_dev->driver_module = THIS_MODULE; > + indio_dev->modes = INDIO_DIRECT_MODE; > + indio_dev->num_interrupt_lines = 1; > + indio_dev->channels = st->chip_info->channel; > + indio_dev->num_channels = st->chip_info->num_channels; > + indio_dev->read_raw = &ad799x_read_raw; > + > + ret = ad799x_register_ring_funcs_and_init(indio_dev); > if (ret) > - goto error_free_device; > + goto error_disable_reg; > > - ret = iio_device_register(st->indio_dev); > + ret = iio_device_register(indio_dev); > if (ret) > goto error_cleanup_ring; > regdone = 1; > > - ret = iio_ring_buffer_register_ex(st->indio_dev->ring, 0, > - st->indio_dev->channels, > - st->indio_dev->num_channels); > + ret = iio_ring_buffer_register_ex(indio_dev->ring, 0, > + indio_dev->channels, > + indio_dev->num_channels); > if (ret) > goto error_cleanup_ring; > > @@ -705,46 +700,44 @@ static int __devinit ad799x_probe(struct i2c_client *client, > IRQF_TRIGGER_FALLING | > IRQF_ONESHOT, > client->name, > - st->indio_dev); > + indio_dev); > if (ret) > goto error_cleanup_ring; > } > > return 0; > + > error_cleanup_ring: > - ad799x_ring_cleanup(st->indio_dev); > -error_free_device: > - if (!regdone) > - iio_free_device(st->indio_dev); > - else > - iio_device_unregister(st->indio_dev); > + ad799x_ring_cleanup(indio_dev); > error_disable_reg: > if (!IS_ERR(st->reg)) > regulator_disable(st->reg); > error_put_reg: > if (!IS_ERR(st->reg)) > regulator_put(st->reg); > - kfree(st); > -error_ret: > + if (regdone) > + iio_device_unregister(indio_dev); > + else > + iio_free_device(indio_dev); > + > return ret; > } > > static __devexit int ad799x_remove(struct i2c_client *client) > { > - struct ad799x_state *st = i2c_get_clientdata(client); > - struct iio_dev *indio_dev = st->indio_dev; > + struct iio_dev *indio_dev = i2c_get_clientdata(client); > + struct ad799x_state *st = iio_priv(indio_dev); > > if (client->irq > 0 && st->chip_info->monitor_mode) > free_irq(client->irq, indio_dev); > > iio_ring_buffer_unregister(indio_dev->ring); > ad799x_ring_cleanup(indio_dev); > - iio_device_unregister(indio_dev); > if (!IS_ERR(st->reg)) { > regulator_disable(st->reg); > regulator_put(st->reg); > } > - kfree(st); > + iio_device_unregister(indio_dev); > > return 0; > } > diff --git a/drivers/staging/iio/adc/ad799x_ring.c b/drivers/staging/iio/adc/ad799x_ring.c > index a82461f..3804265 100644 > --- a/drivers/staging/iio/adc/ad799x_ring.c > +++ b/drivers/staging/iio/adc/ad799x_ring.c > @@ -29,7 +29,7 @@ > > int ad799x_single_channel_from_ring(struct ad799x_state *st, long mask) > { > - struct iio_ring_buffer *ring = st->indio_dev->ring; > + struct iio_ring_buffer *ring = iio_priv_to_dev(st)->ring; > int count = 0, ret; > u16 *ring_data; > > @@ -72,7 +72,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; > + struct ad799x_state *st = iio_dev_get_devdata(indio_dev); > > /* > * Need to figure out the current mode based upon the requested > @@ -166,7 +166,6 @@ out: > > int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev) > { > - struct ad799x_state *st = indio_dev->dev_data; > int ret = 0; > > indio_dev->ring = iio_sw_rb_allocate(indio_dev); > @@ -175,7 +174,7 @@ int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev) > goto error_ret; > } > /* Effectively select the ring buffer implementation */ > - iio_ring_sw_register_funcs(&st->indio_dev->ring->access); > + iio_ring_sw_register_funcs(&indio_dev->ring->access); > indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); > if (indio_dev->pollfunc == NULL) { > ret = -ENOMEM; > @@ -185,7 +184,7 @@ int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev) > indio_dev->pollfunc->thread = &ad799x_trigger_handler; > indio_dev->pollfunc->type = IRQF_ONESHOT; > indio_dev->pollfunc->name = > - kasprintf(GFP_KERNEL, "adis16203_consumer%d", indio_dev->id); > + kasprintf(GFP_KERNEL, "ad799x_consumer%d", indio_dev->id); > if (indio_dev->pollfunc->name == NULL) { > ret = -ENOMEM; > goto error_free_poll_func;