~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise-security

« back to all changes in this revision

Viewing changes to drivers/staging/iio/meter/ade7758_core.c

  • Committer: Package Import Robot
  • Author(s): Paolo Pisati, Paolo Pisati
  • Date: 2011-12-06 15:56:07 UTC
  • Revision ID: package-import@ubuntu.com-20111206155607-pcf44kv5fmhk564f
Tags: 3.2.0-1401.1
[ Paolo Pisati ]

* Rebased on top of Ubuntu-3.2.0-3.8
* Tilt-tracking @ ef2487af4bb15bdd0689631774b5a5e3a59f74e2
* Delete debian.ti-omap4/control, it shoudln't be tracked
* Fix architecture spelling (s/armel/armhf/)
* [Config] Update configs following 3.2 import
* [Config] Fix compilation: disable CODA and ARCH_OMAP3
* [Config] Fix compilation: disable Ethernet Faraday
* Update series to precise

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
 
9
9
#include <linux/interrupt.h>
10
10
#include <linux/irq.h>
11
 
#include <linux/gpio.h>
12
11
#include <linux/delay.h>
13
12
#include <linux/mutex.h>
14
13
#include <linux/device.h>
17
16
#include <linux/slab.h>
18
17
#include <linux/sysfs.h>
19
18
#include <linux/list.h>
 
19
#include <linux/module.h>
20
20
 
21
21
#include "../iio.h"
22
22
#include "../sysfs.h"
23
 
#include "../ring_generic.h"
 
23
#include "../buffer_generic.h"
24
24
#include "meter.h"
25
25
#include "ade7758.h"
26
26
 
583
583
}
584
584
 
585
585
static IIO_DEV_ATTR_TEMP_RAW(ade7758_read_8bit);
586
 
static IIO_CONST_ATTR(temp_offset, "129 C");
587
 
static IIO_CONST_ATTR(temp_scale, "4 C");
 
586
static IIO_CONST_ATTR(in_temp_offset, "129 C");
 
587
static IIO_CONST_ATTR(in_temp_scale, "4 C");
588
588
 
589
589
static IIO_DEV_ATTR_AWATTHR(ade7758_read_16bit,
590
590
                ADE7758_AWATTHR);
614
614
static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("26040 13020 6510 3255");
615
615
 
616
616
static struct attribute *ade7758_attributes[] = {
617
 
        &iio_dev_attr_temp_raw.dev_attr.attr,
618
 
        &iio_const_attr_temp_offset.dev_attr.attr,
619
 
        &iio_const_attr_temp_scale.dev_attr.attr,
 
617
        &iio_dev_attr_in_temp_raw.dev_attr.attr,
 
618
        &iio_const_attr_in_temp_offset.dev_attr.attr,
 
619
        &iio_const_attr_in_temp_scale.dev_attr.attr,
620
620
        &iio_dev_attr_sampling_frequency.dev_attr.attr,
621
621
        &iio_const_attr_sampling_frequency_available.dev_attr.attr,
622
622
        &iio_dev_attr_reset.dev_attr.attr,
662
662
};
663
663
 
664
664
static struct iio_chan_spec ade7758_channels[] = {
665
 
        IIO_CHAN(IIO_IN, 0, 1, 0, "raw", 0, 0,
 
665
        IIO_CHAN(IIO_VOLTAGE, 0, 1, 0, "raw", 0, 0,
666
666
                (1 << IIO_CHAN_INFO_SCALE_SHARED),
667
667
                AD7758_WT(AD7758_PHASE_A, AD7758_VOLTAGE),
668
668
                0, IIO_ST('s', 24, 32, 0), 0),
682
682
                (1 << IIO_CHAN_INFO_SCALE_SHARED),
683
683
                AD7758_WT(AD7758_PHASE_A, AD7758_REACT_PWR),
684
684
                4, IIO_ST('s', 24, 32, 0), 0),
685
 
        IIO_CHAN(IIO_IN, 0, 1, 0, "raw", 1, 0,
 
685
        IIO_CHAN(IIO_VOLTAGE, 0, 1, 0, "raw", 1, 0,
686
686
                (1 << IIO_CHAN_INFO_SCALE_SHARED),
687
687
                AD7758_WT(AD7758_PHASE_B, AD7758_VOLTAGE),
688
688
                5, IIO_ST('s', 24, 32, 0), 0),
702
702
                (1 << IIO_CHAN_INFO_SCALE_SHARED),
703
703
                AD7758_WT(AD7758_PHASE_B, AD7758_REACT_PWR),
704
704
                9, IIO_ST('s', 24, 32, 0), 0),
705
 
        IIO_CHAN(IIO_IN, 0, 1, 0, "raw", 2, 0,
 
705
        IIO_CHAN(IIO_VOLTAGE, 0, 1, 0, "raw", 2, 0,
706
706
                (1 << IIO_CHAN_INFO_SCALE_SHARED),
707
707
                AD7758_WT(AD7758_PHASE_C, AD7758_VOLTAGE),
708
708
                10, IIO_ST('s', 24, 32, 0), 0),
732
732
 
733
733
static int __devinit ade7758_probe(struct spi_device *spi)
734
734
{
735
 
        int i, ret, regdone = 0;
 
735
        int i, ret;
736
736
        struct ade7758_state *st;
737
737
        struct iio_dev *indio_dev = iio_allocate_device(sizeof(*st));
738
738
 
766
766
        indio_dev->modes = INDIO_DIRECT_MODE;
767
767
 
768
768
        for (i = 0; i < AD7758_NUM_WAVESRC; i++)
769
 
                st->available_scan_masks[i] = 1 << i;
 
769
                set_bit(i, &st->available_scan_masks[i]);
770
770
 
771
771
        indio_dev->available_scan_masks = st->available_scan_masks;
772
772
 
774
774
        if (ret)
775
775
                goto error_free_tx;
776
776
 
777
 
        ret = iio_device_register(indio_dev);
778
 
        if (ret)
779
 
                goto error_unreg_ring_funcs;
780
 
        regdone = 1;
781
 
 
782
 
        ret = iio_ring_buffer_register_ex(indio_dev->ring, 0,
783
 
                                          &ade7758_channels[0],
784
 
                                          ARRAY_SIZE(ade7758_channels));
 
777
        ret = iio_buffer_register(indio_dev,
 
778
                                  &ade7758_channels[0],
 
779
                                  ARRAY_SIZE(ade7758_channels));
785
780
        if (ret) {
786
781
                dev_err(&spi->dev, "failed to initialize the ring\n");
787
782
                goto error_unreg_ring_funcs;
795
790
        if (spi->irq) {
796
791
                ret = ade7758_probe_trigger(indio_dev);
797
792
                if (ret)
798
 
                        goto error_remove_trigger;
 
793
                        goto error_uninitialize_ring;
799
794
        }
800
795
 
 
796
        ret = iio_device_register(indio_dev);
 
797
        if (ret)
 
798
                goto error_remove_trigger;
 
799
 
801
800
        return 0;
802
801
 
803
802
error_remove_trigger:
804
 
        if (indio_dev->modes & INDIO_RING_TRIGGERED)
 
803
        if (indio_dev->modes & INDIO_BUFFER_TRIGGERED)
805
804
                ade7758_remove_trigger(indio_dev);
806
805
error_uninitialize_ring:
807
 
        ade7758_uninitialize_ring(indio_dev->ring);
 
806
        ade7758_uninitialize_ring(indio_dev);
808
807
error_unreg_ring_funcs:
809
808
        ade7758_unconfigure_ring(indio_dev);
810
809
error_free_tx:
812
811
error_free_rx:
813
812
        kfree(st->rx);
814
813
error_free_dev:
815
 
        if (regdone)
816
 
                iio_device_unregister(indio_dev);
817
 
        else
818
 
                iio_free_device(indio_dev);
 
814
        iio_free_device(indio_dev);
819
815
error_ret:
820
816
        return ret;
821
817
}
826
822
        struct ade7758_state *st = iio_priv(indio_dev);
827
823
        int ret;
828
824
 
 
825
        iio_device_unregister(indio_dev);
829
826
        ret = ade7758_stop_device(&indio_dev->dev);
830
827
        if (ret)
831
828
                goto err_ret;
832
829
 
833
830
        ade7758_remove_trigger(indio_dev);
834
 
        ade7758_uninitialize_ring(indio_dev->ring);
 
831
        ade7758_uninitialize_ring(indio_dev);
835
832
        ade7758_unconfigure_ring(indio_dev);
836
833
        kfree(st->tx);
837
834
        kfree(st->rx);
838
 
        iio_device_unregister(indio_dev);
839
 
 
840
 
        return 0;
 
835
 
 
836
        iio_free_device(indio_dev);
 
837
 
841
838
err_ret:
842
839
        return ret;
843
840
}