Re: [PATCH 1/1] IIO-onwards: ADC: AD799x: Use private data space from iio_allocate_device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 04/18/11 16:50, Jonathan Cameron wrote:
> On 04/18/11 16:30, michael.hennerich@xxxxxxxxxx wrote:
>> From: Michael Hennerich <michael.hennerich@xxxxxxxxxx>
>>
>> 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.
Oops, forgot to say - I'll pull this one into iio-onwards as well.

Thanks.
>>
>> Signed-off-by: Michael Hennerich <michael.hennerich@xxxxxxxxxx>
Acked-by: Jonathan Cameron <jic23@xxxxxxxxx>
>> ---
>>  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;
> 
> --
> 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
> 

--
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


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux