staging:iio:ad7280a: Use managed interfaces
Subsystems (4)
PATCH 1/1 staging:iio:ad7280a: Use managed interfaces
This patch moves data allocated using unmanaged interfaces to managed interfaces like devm_kzalloc, devm_iio_device_register, devm_kasprintf, devm_request_threaded_irq and does away with the calls to free the allocated memory in the probe and remove functions. Some labels in the probe function are also removed.
---
I am not very sure if devmifying request_irq is a good idea as it leads to the freeing of the interrupt after the ad7280_write.
drivers/staging/iio/adc/ad7280a.c | 57 ++++++++++++++------------------------- 1 file changed, 20 insertions(+), 37 deletions(-)
drivers/staging/iio/adc/ad7280a.c +20 -37
@@ -486,8 +486,8 @@ static int ad7280_channel_init(struct ad7280_state *st) {int dev, ch, cnt; - st->channels =kcalloc ((st->slave_num +1 ) *12 +2 , -sizeof (*st->channels),GFP_KERNEL ); + st->channels =devm_kcalloc (&st->spi->dev, (st->slave_num +1 ) *12 +2 , +sizeof (*st->channels),GFP_KERNEL );if (st->channels ==NULL )return -ENOMEM ;
@@ -547,8 +547,9 @@ static int ad7280_attr_init(struct ad7280_state *st) {int dev, ch, cnt; - st->iio_attr =kzalloc (sizeof (*st->iio_attr) * (st->slave_num +1 ) * -AD7280A_CELLS_PER_DEV *2 ,GFP_KERNEL ); + st->iio_attr =devm_kzalloc (&st->spi->dev,sizeof (*st->iio_attr) * + (st->slave_num +1 ) * +AD7280A_CELLS_PER_DEV *2 ,GFP_KERNEL );if (st->iio_attr ==NULL )return -ENOMEM ;
@@ -564,7 +565,7 @@ static int ad7280_attr_init(struct ad7280_state *st) st->iio_attr[cnt].dev_attr.store = ad7280_store_balance_sw; st->iio_attr[cnt].dev_attr.attr.name = -kasprintf (GFP_KERNEL , +devm_kasprintf (&st->spi->dev,GFP_KERNEL ,"in%d-in%d_balance_switch_en" , (dev *AD7280A_CELLS_PER_DEV ) + ch, (dev *AD7280A_CELLS_PER_DEV ) + ch +1 );
@@ -581,7 +582,8 @@ static int ad7280_attr_init(struct ad7280_state *st) st->iio_attr[cnt].dev_attr.store = ad7280_store_balance_timer; st->iio_attr[cnt].dev_attr.attr.name = -kasprintf (GFP_KERNEL ,"in%d-in%d_balance_timer" , +devm_kasprintf (&st->spi->dev,GFP_KERNEL , +"in%d-in%d_balance_timer" , (dev *AD7280A_CELLS_PER_DEV ) + ch, (dev *AD7280A_CELLS_PER_DEV ) + ch +1 ); ad7280_attributes[cnt] =
@@ -900,48 +902,36 @@ static int ad7280_probe(struct spi_device *spi) ret =ad7280_attr_init (st);if (ret <0 ) - goto error_free_channels; +return ret; - ret =iio_device_register (indio_dev); + ret =devm_iio_device_register (&spi->dev, indio_dev);if (ret) - goto error_free_attr; +return ret;if (spi->irq >0 ) { ret =ad7280_write (st,AD7280A_DEVADDR_MASTER ,AD7280A_ALERT ,1 ,AD7280A_ALERT_RELAY_SIG_CHAIN_DOWN );if (ret) - goto error_unregister; +return ret; ret =ad7280_write (st,AD7280A_DEVADDR (st->slave_num),AD7280A_ALERT ,0 ,AD7280A_ALERT_GEN_STATIC_HIGH | (pdata->chain_last_alert_ignore &0xF ));if (ret) - goto error_unregister; - - ret =request_threaded_irq (spi->irq, -NULL , - ad7280_event_handler, -IRQF_TRIGGER_FALLING | -IRQF_ONESHOT , - indio_dev->name, - indio_dev); +return ret; + + ret =devm_request_threaded_irq (&spi->dev, spi->irq,NULL , + ad7280_event_handler, +IRQF_TRIGGER_FALLING | +IRQF_ONESHOT , indio_dev->name, + indio_dev);if (ret) - goto error_unregister; +return ret; }return 0 ; -error_unregister: -iio_device_unregister (indio_dev); - -error_free_attr: -kfree (st->iio_attr); - -error_free_channels: -kfree (st->channels); - -return ret; }static int ad7280_remove (struct spi_device *spi)
@@ -949,16 +939,9 @@ static int ad7280_remove(struct spi_device *spi)struct iio_dev *indio_dev =spi_get_drvdata (spi);struct ad7280_state *st =iio_priv (indio_dev); -if (spi->irq >0 ) -free_irq (spi->irq, indio_dev); -iio_device_unregister (indio_dev); -ad7280_write (st,AD7280A_DEVADDR_MASTER ,AD7280A_CONTROL_HB ,1 ,AD7280A_CTRL_HB_PWRDN_SW | st->ctrl_hb); -kfree (st->channels); -kfree (st->iio_attr); -return 0 ; }
Signature · 1 line
1.9.1
Jonathan Cameron
maintainerQuoted 7 lines · Himangi Saraogi
This patch moves data allocated using unmanaged interfaces to managed interfaces like
devm_kzalloc,devm_iio_device_register,devm_kasprintf,devm_request_threaded_irqand does away with the calls to free the allocated memory in the probe and remove functions. Some labels in the probe function are also removed.Signed-off-by Himangi Saraogi <[email protected]>
cc'ing Lars who tends to look after Analog Devices drivers and more specifically was involved in the thread that lead to this patch.
Also, the devm_kasprintf does not appear to be in upstream so this patch should have made an dependency clear.
https://lkml.org/lkml/2014/7/16/667
What is the intended merge path for that patch?
Quoted 3 lines
---
I am not very sure if devmifyingrequest_irqis a good idea as it leads to the freeing of the interrupt after thead7280_write.
Agreed. I wouldn't do it!
Otherwise, all looks fine.
Quoted 128 lines
drivers/staging/iio/adc/ad7280a.c | 57 ++++++++++++++------------------------- 1 file changed, 20 insertions(+), 37 deletions(-)drivers/staging/iio/adc/ad7280a.c +20
-37@@ -486,8 +486,8 @@ static int ad7280_channel_init(struct ad7280_state *st) {int dev, ch, cnt; - st->channels =kcalloc ((st->slave_num +1 ) *12 +2 , -sizeof (*st->channels),GFP_KERNEL ); + st->channels =devm_kcalloc (&st->spi->dev, (st->slave_num +1 ) *12 +2 , +sizeof (*st->channels),GFP_KERNEL );if (st->channels ==NULL )return -ENOMEM ;@@ -547,8 +547,9 @@ static int ad7280_attr_init(struct ad7280_state *st) {int dev, ch, cnt; - st->iio_attr =kzalloc (sizeof (*st->iio_attr) * (st->slave_num +1 ) * -AD7280A_CELLS_PER_DEV *2 ,GFP_KERNEL ); + st->iio_attr =devm_kzalloc (&st->spi->dev,sizeof (*st->iio_attr) * + (st->slave_num +1 ) * +AD7280A_CELLS_PER_DEV *2 ,GFP_KERNEL );if (st->iio_attr ==NULL )return -ENOMEM ;@@ -564,7 +565,7 @@ static int ad7280_attr_init(struct ad7280_state *st) st->iio_attr[cnt].dev_attr.store = ad7280_store_balance_sw; st->iio_attr[cnt].dev_attr.attr.name = -kasprintf (GFP_KERNEL , +devm_kasprintf (&st->spi->dev,GFP_KERNEL ,"in%d-in%d_balance_switch_en" , (dev *AD7280A_CELLS_PER_DEV ) + ch, (dev *AD7280A_CELLS_PER_DEV ) + ch +1 );@@ -581,7 +582,8 @@ static int ad7280_attr_init(struct ad7280_state *st) st->iio_attr[cnt].dev_attr.store = ad7280_store_balance_timer; st->iio_attr[cnt].dev_attr.attr.name = -kasprintf (GFP_KERNEL ,"in%d-in%d_balance_timer" , +devm_kasprintf (&st->spi->dev,GFP_KERNEL , +"in%d-in%d_balance_timer" , (dev *AD7280A_CELLS_PER_DEV ) + ch, (dev *AD7280A_CELLS_PER_DEV ) + ch +1 ); ad7280_attributes[cnt] =@@ -900,48 +902,36 @@ static int ad7280_probe(struct spi_device *spi) ret =ad7280_attr_init (st);if (ret <0 ) - goto error_free_channels; +return ret; - ret =iio_device_register (indio_dev); + ret =devm_iio_device_register (&spi->dev, indio_dev);if (ret) - goto error_free_attr; +return ret;if (spi->irq >0 ) { ret =ad7280_write (st,AD7280A_DEVADDR_MASTER ,AD7280A_ALERT ,1 ,AD7280A_ALERT_RELAY_SIG_CHAIN_DOWN );if (ret) - goto error_unregister; +return ret; ret =ad7280_write (st,AD7280A_DEVADDR (st->slave_num),AD7280A_ALERT ,0 ,AD7280A_ALERT_GEN_STATIC_HIGH | (pdata->chain_last_alert_ignore &0xF ));if (ret) - goto error_unregister; - - ret =request_threaded_irq (spi->irq, -NULL , - ad7280_event_handler, -IRQF_TRIGGER_FALLING | -IRQF_ONESHOT , - indio_dev->name, - indio_dev); +return ret; + + ret =devm_request_threaded_irq (&spi->dev, spi->irq,NULL , + ad7280_event_handler, +IRQF_TRIGGER_FALLING | +IRQF_ONESHOT , indio_dev->name, + indio_dev);if (ret) - goto error_unregister; +return ret; }return 0 ; -error_unregister: -iio_device_unregister (indio_dev); - -error_free_attr: -kfree (st->iio_attr); - -error_free_channels: -kfree (st->channels); - -return ret; }static int ad7280_remove (struct spi_device *spi)@@ -949,16 +939,9 @@ static int ad7280_remove(struct spi_device *spi)struct iio_dev *indio_dev =spi_get_drvdata (spi);struct ad7280_state *st =iio_priv (indio_dev); -if (spi->irq >0 ) -free_irq (spi->irq, indio_dev); -iio_device_unregister (indio_dev); -ad7280_write (st,AD7280A_DEVADDR_MASTER ,AD7280A_CONTROL_HB ,1 ,AD7280A_CTRL_HB_PWRDN_SW | st->ctrl_hb); -kfree (st->channels); -kfree (st->iio_attr); -return 0 ; }
Quoted 12 lines · Jonathan Cameron
Quoted 7 lines · Himangi Saraogi
This patch moves data allocated using unmanaged interfaces to managed interfaces like
devm_kzalloc,devm_iio_device_register,devm_kasprintf,devm_request_threaded_irqand does away with the calls to free the allocated memory in the probe and remove functions. Some labels in the probe function are also removed.Signed-off-by Himangi Saraogi <[email protected]>cc'ing Lars who tends to look after Analog Devices drivers and more specifically was involved in the thread that lead to this patch.
Quoted 6 lines
Also, the
devm_kasprintfdoes not appear to be in upstream so this patch should have made an dependency clear.https://lkml.org/lkml/2014/7/16/667
What is the intended merge path for that patch?
Greg said that he would be taking it. He already took the devm_kasprintf patch.
julia
Quoted 144 lines
Quoted 5 lines
---
I am not very sure if devmifyingrequest_irqis a good idea as it leads to the freeing of the interrupt after thead7280_write.Agreed. I wouldn't do it!
Otherwise, all looks fine.
Quoted 134 lines
drivers/staging/iio/adc/ad7280a.c | 57 ++++++++++++++------------------------- 1 file changed, 20 insertions(+), 37 deletions(-)drivers/staging/iio/adc/ad7280a.c +6
-5@@ -486,8 +486,8 @@ static int ad7280_channel_init(struct ad7280_state *st) {int dev, ch, cnt; - st->channels =kcalloc ((st->slave_num +1 ) *12 +2 , -sizeof (*st->channels),GFP_KERNEL ); + st->channels =devm_kcalloc (&st->spi->dev, (st->slave_num +1 ) *12 +2 , +sizeof (*st->channels),GFP_KERNEL );if (st->channels ==NULL )return -ENOMEM ;@@ -547,8 +547,9 @@ static int ad7280_attr_init(struct ad7280_state *st) {int dev, ch, cnt; - st->iio_attr =kzalloc (sizeof (*st->iio_attr) * (st->slave_num +1 ) * -AD7280A_CELLS_PER_DEV *2 ,GFP_KERNEL ); + st->iio_attr =devm_kzalloc (&st->spi->dev,sizeof (*st->iio_attr) * + (st->slave_num +1 ) * +AD7280A_CELLS_PER_DEV *2 ,GFP_KERNEL );if (st->iio_attr ==NULL )return -ENOMEM ;@@ -564,7 +565,7 @@ static int ad7280_attr_init(struct ad7280_state *st) st->iio_attr[cnt].dev_attr.store = ad7280_store_balance_sw; st->iio_attr[cnt].dev_attr.attr.name = - kasprintf(GFP_KERNEL, + devm_kasprintf(&st->spi->dev, GFP_KERNEL, "in%d-in%d_balance_switch_en", (dev * AD7280A_CELLS_PER_DEV) + ch, (dev * AD7280A_CELLS_PER_DEV) + ch +1);
drivers/staging/iio/adc/ad7280a.c +2
-1@@ -581,7 +582,8 @@ static int ad7280_attr_init(struct ad7280_state *st) st->iio_attr[cnt].dev_attr.store = ad7280_store_balance_timer; st->iio_attr[cnt].dev_attr.attr.name = - kasprintf(GFP_KERNEL,"in%d-in%d_balance_timer" , + devm_kasprintf(&st->spi->dev, GFP_KERNEL, + "in%d-in%d_balance_timer", (dev * AD7280A_CELLS_PER_DEV) + ch, (dev * AD7280A_CELLS_PER_DEV) + ch +1);
ad7280_attributes[cnt] =drivers/staging/iio/adc/ad7280a.c +12
-31@@ -900,48 +902,36 @@ static int ad7280_probe(struct spi_device *spi) ret =ad7280_attr_init (st);if (ret <0 ) - goto error_free_channels; +return ret; - ret =iio_device_register (indio_dev); + ret =devm_iio_device_register (&spi->dev, indio_dev);if (ret) - goto error_free_attr; +return ret;if (spi->irq >0 ) { ret =ad7280_write (st,AD7280A_DEVADDR_MASTER ,AD7280A_ALERT ,1 ,AD7280A_ALERT_RELAY_SIG_CHAIN_DOWN );if (ret) - goto error_unregister; +return ret; ret =ad7280_write (st,AD7280A_DEVADDR (st->slave_num),AD7280A_ALERT ,0 ,AD7280A_ALERT_GEN_STATIC_HIGH | (pdata->chain_last_alert_ignore &0xF ));if (ret) - goto error_unregister; - - ret =request_threaded_irq (spi->irq, -NULL , - ad7280_event_handler, -IRQF_TRIGGER_FALLING | -IRQF_ONESHOT , - indio_dev->name, - indio_dev); +return ret; + + ret =devm_request_threaded_irq (&spi->dev, spi->irq,NULL , + ad7280_event_handler, +IRQF_TRIGGER_FALLING | +IRQF_ONESHOT , indio_dev->name, + indio_dev);if (ret) - goto error_unregister; +return ret; }return 0 ; -error_unregister: -iio_device_unregister (indio_dev); - -error_free_attr: -kfree (st->iio_attr); - -error_free_channels: -kfree (st->channels); - -return ret; }static int ad7280_remove (struct spi_device *spi)@@ -949,16 +939,9 @@ static int ad7280_remove(struct spi_device *spi)struct iio_dev *indio_dev =spi_get_drvdata (spi);struct ad7280_state *st =iio_priv (indio_dev); -if (spi->irq >0 ) -free_irq (spi->irq, indio_dev); -iio_device_unregister (indio_dev); -ad7280_write (st,AD7280A_DEVADDR_MASTER ,AD7280A_CONTROL_HB ,1 ,AD7280A_CTRL_HB_PWRDN_SW | st->ctrl_hb); -kfree (st->channels); -kfree (st->iio_attr); -return 0 ; }
Jonathan Cameron
maintainerQuoted 19 lines · Julia Lawall
Quoted 15 lines · Jonathan Cameron
Quoted 7 lines · Himangi Saraogi
This patch moves data allocated using unmanaged interfaces to managed interfaces like
devm_kzalloc,devm_iio_device_register,devm_kasprintf,devm_request_threaded_irqand does away with the calls to free the allocated memory in the probe and remove functions. Some labels in the probe function are also removed.Signed-off-by Himangi Saraogi <[email protected]>cc'ing Lars who tends to look after Analog Devices drivers and more specifically was involved in the thread that lead to this patch.
Also, the
devm_kasprintfdoes not appear to be in upstream so this patch should have made an dependency clear.
Quoted 6 lines
Quoted 3 lines
https://lkml.org/lkml/2014/7/16/667
What is the intended merge path for that patch?
Greg said that he would be taking it. He already took the
devm_kasprintfpatch.
Cool. That's fine (and now you mention it - he did say that in the thread I just forgot). Still, it did want mentioning in the description for this patch as well.
Quoted 152 lines
julia
Quoted 135 lines
Quoted 5 lines
---
I am not very sure if devmifyingrequest_irqis a good idea as it leads to the freeing of the interrupt after thead7280_write.Agreed. I wouldn't do it!
Otherwise, all looks fine.
Quoted 127 lines
drivers/staging/iio/adc/ad7280a.c | 57 ++++++++++++++------------------------- 1 file changed, 20 insertions(+), 37 deletions(-)drivers/staging/iio/adc/ad7280a.c +6
-5@@ -486,8 +486,8 @@ static int ad7280_channel_init(struct ad7280_state *st) {int dev, ch, cnt; - st->channels =kcalloc ((st->slave_num +1 ) *12 +2 , -sizeof (*st->channels),GFP_KERNEL ); + st->channels =devm_kcalloc (&st->spi->dev, (st->slave_num +1 ) *12 +2 , +sizeof (*st->channels),GFP_KERNEL );if (st->channels ==NULL )return -ENOMEM ;@@ -547,8 +547,9 @@ static int ad7280_attr_init(struct ad7280_state *st) {int dev, ch, cnt; - st->iio_attr =kzalloc (sizeof (*st->iio_attr) * (st->slave_num +1 ) * -AD7280A_CELLS_PER_DEV *2 ,GFP_KERNEL ); + st->iio_attr =devm_kzalloc (&st->spi->dev,sizeof (*st->iio_attr) * + (st->slave_num +1 ) * +AD7280A_CELLS_PER_DEV *2 ,GFP_KERNEL );if (st->iio_attr ==NULL )return -ENOMEM ;@@ -564,7 +565,7 @@ static int ad7280_attr_init(struct ad7280_state *st) st->iio_attr[cnt].dev_attr.store = ad7280_store_balance_sw; st->iio_attr[cnt].dev_attr.attr.name = - kasprintf(GFP_KERNEL, + devm_kasprintf(&st->spi->dev, GFP_KERNEL, "in%d-in%d_balance_switch_en", (dev * AD7280A_CELLS_PER_DEV) + ch, (dev * AD7280A_CELLS_PER_DEV) + ch +1);
drivers/staging/iio/adc/ad7280a.c +2
-1@@ -581,7 +582,8 @@ static int ad7280_attr_init(struct ad7280_state *st) st->iio_attr[cnt].dev_attr.store = ad7280_store_balance_timer; st->iio_attr[cnt].dev_attr.attr.name = - kasprintf(GFP_KERNEL,"in%d-in%d_balance_timer" , + devm_kasprintf(&st->spi->dev, GFP_KERNEL, + "in%d-in%d_balance_timer", (dev * AD7280A_CELLS_PER_DEV) + ch, (dev * AD7280A_CELLS_PER_DEV) + ch +1); ad7280_attributes[cnt] =drivers/staging/iio/adc/ad7280a.c +12
-28@@ -900,48 +902,36 @@ static int ad7280_probe(struct spi_device *spi) ret =ad7280_attr_init (st);if (ret <0 ) - goto error_free_channels; +return ret; - ret =iio_device_register (indio_dev); + ret =devm_iio_device_register (&spi->dev, indio_dev);if (ret) - goto error_free_attr; +return ret;if (spi->irq >0 ) { ret =ad7280_write (st,AD7280A_DEVADDR_MASTER ,AD7280A_ALERT ,1 ,AD7280A_ALERT_RELAY_SIG_CHAIN_DOWN );if (ret) - goto error_unregister; +return ret; ret =ad7280_write (st,AD7280A_DEVADDR (st->slave_num),AD7280A_ALERT ,0 ,AD7280A_ALERT_GEN_STATIC_HIGH | (pdata->chain_last_alert_ignore &0xF ));if (ret) - goto error_unregister; - - ret =request_threaded_irq (spi->irq, -NULL , - ad7280_event_handler, -IRQF_TRIGGER_FALLING | -IRQF_ONESHOT , - indio_dev->name, - indio_dev); +return ret; + + ret =devm_request_threaded_irq (&spi->dev, spi->irq,NULL , + ad7280_event_handler, +IRQF_TRIGGER_FALLING | +IRQF_ONESHOT , indio_dev->name, + indio_dev);if (ret) - goto error_unregister; +return ret; }return 0 ; -error_unregister: -iio_device_unregister (indio_dev); - -error_free_attr: -kfree (st->iio_attr); - -error_free_channels: -kfree (st->channels); - -return ret; }static int ad7280_remove (struct spi_device *spi)@@ -949,16 +939,9 @@ static int ad7280_remove(struct spi_device *spi)struct iio_dev *indio_dev =spi_get_drvdata (spi);struct ad7280_state *st =iio_priv (indio_dev); -if (spi->irq >0 ) -free_irq (spi->irq, indio_dev); -iio_device_unregister (indio_dev); -ad7280_write (st,AD7280A_DEVADDR_MASTER ,AD7280A_CONTROL_HB ,1 ,AD7280A_CTRL_HB_PWRDN_SW | st->ctrl_hb);Quoted 9 lines
drivers/staging/iio/adc/ad7280a.c static int ad7280_remove(struct spi_device *spi) · line 947
Quoted 7 lines
drivers/staging/iio/adc/ad7280a.c +0
-3-kfree (st->channels); -kfree (st->iio_attr); -return 0 ; }--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 22 lines · Jonathan Cameron
Quoted 21 lines · Julia Lawall
Quoted 17 lines · Jonathan Cameron
Quoted 7 lines · Himangi Saraogi
This patch moves data allocated using unmanaged interfaces to managed interfaces like
devm_kzalloc,devm_iio_device_register,devm_kasprintf,devm_request_threaded_irqand does away with the calls to free the allocated memory in the probe and remove functions. Some labels in the probe function are also removed.Signed-off-by Himangi Saraogi <[email protected]>cc'ing Lars who tends to look after Analog Devices drivers and more specifically was involved in the thread that lead to this patch.
Also, the
devm_kasprintfdoes not appear to be in upstream so this patch should have made an dependency clear.
Quoted 7 lines
Quoted 4 lines
Quoted 1 line
What is the intended merge path for that patch?
Greg said that he would be taking it. He already took the
devm_kasprintfpatch.Cool. That's fine (and now you mention it - he did say that in the thread I just forgot). Still, it did want mentioning in the description for this patch as well.
Indeed. Sorry about that.
julia
Quoted 161 lines
Quoted 159 lines
julia
Quoted 142 lines
Quoted 5 lines
---
I am not very sure if devmifyingrequest_irqis a good idea as it leads to the freeing of the interrupt after thead7280_write.Agreed. I wouldn't do it!
Otherwise, all looks fine.
Quoted 134 lines
drivers/staging/iio/adc/ad7280a.c | 57 ++++++++++++++------------------------- 1 file changed, 20 insertions(+), 37 deletions(-)drivers/staging/iio/adc/ad7280a.c +2
-2@@ -486,8 +486,8 @@ static int ad7280_channel_init(struct ad7280_state *st) {int dev, ch, cnt; - st->channels =kcalloc ((st->slave_num +1 ) *12 +2 , -sizeof (*st->channels),GFP_KERNEL ); + st->channels =devm_kcalloc (&st->spi->dev, (st->slave_num +1 ) *12 +2 , +sizeof (*st->channels),GFP_KERNEL );if (st->channels ==NULL )return -ENOMEM;drivers/staging/iio/adc/ad7280a.c +6
-3@@ -547,8 +547,9 @@ static int ad7280_attr_init(struct ad7280_state *st) {int dev, ch, cnt; - st->iio_attr =kzalloc (sizeof (*st->iio_attr) * (st->slave_num +1 ) * -AD7280A_CELLS_PER_DEV *2 ,GFP_KERNEL ); + st->iio_attr =devm_kzalloc (&st->spi->dev,sizeof (*st->iio_attr) * + (st->slave_num +1 ) * +AD7280A_CELLS_PER_DEV *2 ,GFP_KERNEL );if (st->iio_attr ==NULL )return -ENOMEM ;@@ -564,7 +565,7 @@ static int ad7280_attr_init(struct ad7280_state *st) st->iio_attr[cnt].dev_attr.store = ad7280_store_balance_sw; st->iio_attr[cnt].dev_attr.attr.name = -kasprintf (GFP_KERNEL , + devm_kasprintf(&st->spi->dev, GFP_KERNEL, "in%d-in%d_balance_switch_en", (dev * AD7280A_CELLS_PER_DEV) + ch, (dev * AD7280A_CELLS_PER_DEV) + ch +1);
drivers/staging/iio/adc/ad7280a.c +4
-1@@ -581,7 +582,8 @@ static int ad7280_attr_init(struct ad7280_state *st) st->iio_attr[cnt].dev_attr.store = ad7280_store_balance_timer; st->iio_attr[cnt].dev_attr.attr.name = -kasprintf (GFP_KERNEL ,"in%d-in%d_balance_timer" , + devm_kasprintf(&st->spi->dev, GFP_KERNEL, + "in%d-in%d_balance_timer", (dev * AD7280A_CELLS_PER_DEV) + ch, (dev * AD7280A_CELLS_PER_DEV) + ch +1); ad7280_attributes[cnt] =drivers/staging/iio/adc/ad7280a.c +12
-24@@ -900,48 +902,36 @@ static int ad7280_probe(struct spi_device *spi) ret =ad7280_attr_init (st);if (ret <0 ) - goto error_free_channels; +return ret; - ret =iio_device_register (indio_dev); + ret =devm_iio_device_register (&spi->dev, indio_dev);if (ret) - goto error_free_attr; +return ret;if (spi->irq >0 ) { ret =ad7280_write (st,AD7280A_DEVADDR_MASTER ,AD7280A_ALERT ,1 ,AD7280A_ALERT_RELAY_SIG_CHAIN_DOWN );if (ret) - goto error_unregister; +return ret; ret =ad7280_write (st,AD7280A_DEVADDR (st->slave_num),AD7280A_ALERT ,0 ,AD7280A_ALERT_GEN_STATIC_HIGH | (pdata->chain_last_alert_ignore &0xF ));if (ret) - goto error_unregister; - - ret =request_threaded_irq (spi->irq, -NULL , - ad7280_event_handler, -IRQF_TRIGGER_FALLING | -IRQF_ONESHOT , - indio_dev->name, - indio_dev); +return ret; + + ret =devm_request_threaded_irq (&spi->dev, spi->irq,NULL , + ad7280_event_handler, +IRQF_TRIGGER_FALLING | +IRQF_ONESHOT , indio_dev->name, + indio_dev);if (ret) - goto error_unregister; +return ret; }return 0 ; -error_unregister: -iio_device_unregister (indio_dev); - -error_free_attr: -kfree (st->iio_attr); - -error_free_channels: -kfree (st->channels); - -return ret; }static int
ad7280_remove(struct spi_device *spi)drivers/staging/iio/adc/ad7280a.c +0
-4@@ -949,16 +939,9 @@ static int ad7280_remove(struct spi_device *spi)struct iio_dev *indio_dev =spi_get_drvdata (spi);struct ad7280_state *st =iio_priv (indio_dev); -if (spi->irq >0 ) -free_irq (spi->irq, indio_dev); -iio_device_unregister (indio_dev); -ad7280_write (st,AD7280A_DEVADDR_MASTER ,AD7280A_CONTROL_HB ,1 ,AD7280A_CTRL_HB_PWRDN_SW | st->ctrl_hb);Quoted 9 lines
drivers/staging/iio/adc/ad7280a.c static int ad7280_remove(struct spi_device *spi) · line 946
Quoted 7 lines
drivers/staging/iio/adc/ad7280a.c +0
-3-kfree (st->channels); -kfree (st->iio_attr); -return 0 ; }--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html