aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/iio/meter/ade7758_core.c
diff options
context:
space:
mode:
authorMichael Hennerich <michael.hennerich@analog.com>2011-05-18 09:42:36 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-05-19 19:15:05 -0400
commita3f02370c9fa6d85fbee2c11649ebc9c84bae919 (patch)
tree137f547f29e7f5e5954e5d82174b91bcebe8dca6 /drivers/staging/iio/meter/ade7758_core.c
parent7df86302f4258764a3b8b1d63848dab3aa292654 (diff)
staging:iio:meter:ade7758: Use private data space from iio_allocate_device
Use private data space from iio_allocate_device. Drop dev_data in favor of iio_priv(). Fix indention issues from previous patches. Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Acked-by: Jonathan Cameron <jic23@cam.ac.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/iio/meter/ade7758_core.c')
-rw-r--r--drivers/staging/iio/meter/ade7758_core.c92
1 files changed, 43 insertions, 49 deletions
diff --git a/drivers/staging/iio/meter/ade7758_core.c b/drivers/staging/iio/meter/ade7758_core.c
index 42682ad0b26..d9dfd832122 100644
--- a/drivers/staging/iio/meter/ade7758_core.c
+++ b/drivers/staging/iio/meter/ade7758_core.c
@@ -30,7 +30,7 @@ int ade7758_spi_write_reg_8(struct device *dev,
30{ 30{
31 int ret; 31 int ret;
32 struct iio_dev *indio_dev = dev_get_drvdata(dev); 32 struct iio_dev *indio_dev = dev_get_drvdata(dev);
33 struct ade7758_state *st = iio_dev_get_devdata(indio_dev); 33 struct ade7758_state *st = iio_priv(indio_dev);
34 34
35 mutex_lock(&st->buf_lock); 35 mutex_lock(&st->buf_lock);
36 st->tx[0] = ADE7758_WRITE_REG(reg_address); 36 st->tx[0] = ADE7758_WRITE_REG(reg_address);
@@ -49,7 +49,7 @@ static int ade7758_spi_write_reg_16(struct device *dev,
49 int ret; 49 int ret;
50 struct spi_message msg; 50 struct spi_message msg;
51 struct iio_dev *indio_dev = dev_get_drvdata(dev); 51 struct iio_dev *indio_dev = dev_get_drvdata(dev);
52 struct ade7758_state *st = iio_dev_get_devdata(indio_dev); 52 struct ade7758_state *st = iio_priv(indio_dev);
53 struct spi_transfer xfers[] = { 53 struct spi_transfer xfers[] = {
54 { 54 {
55 .tx_buf = st->tx, 55 .tx_buf = st->tx,
@@ -78,7 +78,7 @@ static int ade7758_spi_write_reg_24(struct device *dev,
78 int ret; 78 int ret;
79 struct spi_message msg; 79 struct spi_message msg;
80 struct iio_dev *indio_dev = dev_get_drvdata(dev); 80 struct iio_dev *indio_dev = dev_get_drvdata(dev);
81 struct ade7758_state *st = iio_dev_get_devdata(indio_dev); 81 struct ade7758_state *st = iio_priv(indio_dev);
82 struct spi_transfer xfers[] = { 82 struct spi_transfer xfers[] = {
83 { 83 {
84 .tx_buf = st->tx, 84 .tx_buf = st->tx,
@@ -107,7 +107,7 @@ int ade7758_spi_read_reg_8(struct device *dev,
107{ 107{
108 struct spi_message msg; 108 struct spi_message msg;
109 struct iio_dev *indio_dev = dev_get_drvdata(dev); 109 struct iio_dev *indio_dev = dev_get_drvdata(dev);
110 struct ade7758_state *st = iio_dev_get_devdata(indio_dev); 110 struct ade7758_state *st = iio_priv(indio_dev);
111 int ret; 111 int ret;
112 struct spi_transfer xfers[] = { 112 struct spi_transfer xfers[] = {
113 { 113 {
@@ -150,7 +150,7 @@ static int ade7758_spi_read_reg_16(struct device *dev,
150{ 150{
151 struct spi_message msg; 151 struct spi_message msg;
152 struct iio_dev *indio_dev = dev_get_drvdata(dev); 152 struct iio_dev *indio_dev = dev_get_drvdata(dev);
153 struct ade7758_state *st = iio_dev_get_devdata(indio_dev); 153 struct ade7758_state *st = iio_priv(indio_dev);
154 int ret; 154 int ret;
155 struct spi_transfer xfers[] = { 155 struct spi_transfer xfers[] = {
156 { 156 {
@@ -196,7 +196,7 @@ static int ade7758_spi_read_reg_24(struct device *dev,
196{ 196{
197 struct spi_message msg; 197 struct spi_message msg;
198 struct iio_dev *indio_dev = dev_get_drvdata(dev); 198 struct iio_dev *indio_dev = dev_get_drvdata(dev);
199 struct ade7758_state *st = iio_dev_get_devdata(indio_dev); 199 struct ade7758_state *st = iio_priv(indio_dev);
200 int ret; 200 int ret;
201 struct spi_transfer xfers[] = { 201 struct spi_transfer xfers[] = {
202 { 202 {
@@ -485,10 +485,11 @@ static int ade7758_stop_device(struct device *dev)
485 return ret; 485 return ret;
486} 486}
487 487
488static int ade7758_initial_setup(struct ade7758_state *st) 488static int ade7758_initial_setup(struct iio_dev *indio_dev)
489{ 489{
490 struct ade7758_state *st = iio_priv(indio_dev);
491 struct device *dev = &indio_dev->dev;
490 int ret; 492 int ret;
491 struct device *dev = &st->indio_dev->dev;
492 493
493 /* use low spi speed for init */ 494 /* use low spi speed for init */
494 st->us->mode = SPI_MODE_1; 495 st->us->mode = SPI_MODE_1;
@@ -727,19 +728,23 @@ static struct iio_chan_spec ade7758_channels[] = {
727static int __devinit ade7758_probe(struct spi_device *spi) 728static int __devinit ade7758_probe(struct spi_device *spi)
728{ 729{
729 int i, ret, regdone = 0; 730 int i, ret, regdone = 0;
730 struct ade7758_state *st = kzalloc(sizeof *st, GFP_KERNEL); 731 struct ade7758_state *st;
731 if (!st) { 732 struct iio_dev *indio_dev = iio_allocate_device(sizeof(*st));
732 ret = -ENOMEM; 733
734 if (indio_dev == NULL) {
735 ret = -ENOMEM;
733 goto error_ret; 736 goto error_ret;
734 } 737 }
738
739 st = iio_priv(indio_dev);
735 /* this is only used for removal purposes */ 740 /* this is only used for removal purposes */
736 spi_set_drvdata(spi, st); 741 spi_set_drvdata(spi, indio_dev);
737 742
738 /* Allocate the comms buffers */ 743 /* Allocate the comms buffers */
739 st->rx = kzalloc(sizeof(*st->rx)*ADE7758_MAX_RX, GFP_KERNEL); 744 st->rx = kzalloc(sizeof(*st->rx)*ADE7758_MAX_RX, GFP_KERNEL);
740 if (st->rx == NULL) { 745 if (st->rx == NULL) {
741 ret = -ENOMEM; 746 ret = -ENOMEM;
742 goto error_free_st; 747 goto error_free_dev;
743 } 748 }
744 st->tx = kzalloc(sizeof(*st->tx)*ADE7758_MAX_TX, GFP_KERNEL); 749 st->tx = kzalloc(sizeof(*st->tx)*ADE7758_MAX_TX, GFP_KERNEL);
745 if (st->tx == NULL) { 750 if (st->tx == NULL) {
@@ -749,35 +754,28 @@ static int __devinit ade7758_probe(struct spi_device *spi)
749 st->us = spi; 754 st->us = spi;
750 st->ade7758_ring_channels = &ade7758_channels[0]; 755 st->ade7758_ring_channels = &ade7758_channels[0];
751 mutex_init(&st->buf_lock); 756 mutex_init(&st->buf_lock);
752 /* setup the industrialio driver allocated elements */
753 st->indio_dev = iio_allocate_device(0);
754 if (st->indio_dev == NULL) {
755 ret = -ENOMEM;
756 goto error_free_tx;
757 }
758 757
759 st->indio_dev->name = spi->dev.driver->name; 758 indio_dev->name = spi->dev.driver->name;
760 st->indio_dev->dev.parent = &spi->dev; 759 indio_dev->dev.parent = &spi->dev;
761 st->indio_dev->attrs = &ade7758_attribute_group; 760 indio_dev->attrs = &ade7758_attribute_group;
762 st->indio_dev->dev_data = (void *)(st); 761 indio_dev->driver_module = THIS_MODULE;
763 st->indio_dev->driver_module = THIS_MODULE; 762 indio_dev->modes = INDIO_DIRECT_MODE;
764 st->indio_dev->modes = INDIO_DIRECT_MODE;
765 763
766 for (i = 0; i < AD7758_NUM_WAVESRC; i++) 764 for (i = 0; i < AD7758_NUM_WAVESRC; i++)
767 st->available_scan_masks[i] = 1 << i; 765 st->available_scan_masks[i] = 1 << i;
768 766
769 st->indio_dev->available_scan_masks = st->available_scan_masks; 767 indio_dev->available_scan_masks = st->available_scan_masks;
770 768
771 ret = ade7758_configure_ring(st->indio_dev); 769 ret = ade7758_configure_ring(indio_dev);
772 if (ret) 770 if (ret)
773 goto error_free_dev; 771 goto error_free_tx;
774 772
775 ret = iio_device_register(st->indio_dev); 773 ret = iio_device_register(indio_dev);
776 if (ret) 774 if (ret)
777 goto error_unreg_ring_funcs; 775 goto error_unreg_ring_funcs;
778 regdone = 1; 776 regdone = 1;
779 777
780 ret = iio_ring_buffer_register_ex(st->indio_dev->ring, 0, 778 ret = iio_ring_buffer_register_ex(indio_dev->ring, 0,
781 &ade7758_channels[0], 779 &ade7758_channels[0],
782 ARRAY_SIZE(ade7758_channels)); 780 ARRAY_SIZE(ade7758_channels));
783 if (ret) { 781 if (ret) {
@@ -786,12 +784,12 @@ static int __devinit ade7758_probe(struct spi_device *spi)
786 } 784 }
787 785
788 /* Get the device into a sane initial state */ 786 /* Get the device into a sane initial state */
789 ret = ade7758_initial_setup(st); 787 ret = ade7758_initial_setup(indio_dev);
790 if (ret) 788 if (ret)
791 goto error_uninitialize_ring; 789 goto error_uninitialize_ring;
792 790
793 if (spi->irq) { 791 if (spi->irq) {
794 ret = ade7758_probe_trigger(st->indio_dev); 792 ret = ade7758_probe_trigger(indio_dev);
795 if (ret) 793 if (ret)
796 goto error_remove_trigger; 794 goto error_remove_trigger;
797 } 795 }
@@ -799,47 +797,43 @@ static int __devinit ade7758_probe(struct spi_device *spi)
799 return 0; 797 return 0;
800 798
801error_remove_trigger: 799error_remove_trigger:
802 if (st->indio_dev->modes & INDIO_RING_TRIGGERED) 800 if (indio_dev->modes & INDIO_RING_TRIGGERED)
803 ade7758_remove_trigger(st->indio_dev); 801 ade7758_remove_trigger(indio_dev);
804error_uninitialize_ring: 802error_uninitialize_ring:
805 ade7758_uninitialize_ring(st->indio_dev->ring); 803 ade7758_uninitialize_ring(indio_dev->ring);
806error_unreg_ring_funcs: 804error_unreg_ring_funcs:
807 ade7758_unconfigure_ring(st->indio_dev); 805 ade7758_unconfigure_ring(indio_dev);
808error_free_dev:
809 if (regdone)
810 iio_device_unregister(st->indio_dev);
811 else
812 iio_free_device(st->indio_dev);
813error_free_tx: 806error_free_tx:
814 kfree(st->tx); 807 kfree(st->tx);
815error_free_rx: 808error_free_rx:
816 kfree(st->rx); 809 kfree(st->rx);
817error_free_st: 810error_free_dev:
818 kfree(st); 811 if (regdone)
812 iio_device_unregister(indio_dev);
813 else
814 iio_free_device(indio_dev);
819error_ret: 815error_ret:
820 return ret; 816 return ret;
821} 817}
822 818
823static int ade7758_remove(struct spi_device *spi) 819static int ade7758_remove(struct spi_device *spi)
824{ 820{
821 struct iio_dev *indio_dev = spi_get_drvdata(spi);
822 struct ade7758_state *st = iio_priv(indio_dev);
825 int ret; 823 int ret;
826 struct ade7758_state *st = spi_get_drvdata(spi);
827 struct iio_dev *indio_dev = st->indio_dev;
828 824
829 ret = ade7758_stop_device(&(indio_dev->dev)); 825 ret = ade7758_stop_device(&indio_dev->dev);
830 if (ret) 826 if (ret)
831 goto err_ret; 827 goto err_ret;
832 828
833 ade7758_remove_trigger(indio_dev); 829 ade7758_remove_trigger(indio_dev);
834 ade7758_uninitialize_ring(indio_dev->ring); 830 ade7758_uninitialize_ring(indio_dev->ring);
835 iio_device_unregister(indio_dev);
836 ade7758_unconfigure_ring(indio_dev); 831 ade7758_unconfigure_ring(indio_dev);
837 kfree(st->tx); 832 kfree(st->tx);
838 kfree(st->rx); 833 kfree(st->rx);
839 kfree(st); 834 iio_device_unregister(indio_dev);
840 835
841 return 0; 836 return 0;
842
843err_ret: 837err_ret:
844 return ret; 838 return ret;
845} 839}