Commit 3a491aeae86577e0f23cd094f3e16351b6061209

Authored by Greg Kroah-Hartman

Merge tag 'v3.6-rc1-iio-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/…

…jic23/iio into staging-linus

IIO fixes for v3.6-rc1

These mostly consist of fixes from Lars-Peter Clausen that were
the first part of a large series reworking the drivers concerned.
Turns out these drivers had quite a wealth of minor bugs.

Also here are some build warning fixes for lm3533-als and
adjd_s111 (both new drives in this cycle).
Final elements are a a div factor overflow and a warning
related fix in a couple of Analog Devices drivers.

All in all nothing major, but a worthwhile bunch of short
fixes.

Showing 8 changed files Side-by-side Diff

drivers/iio/frequency/adf4350.c
... ... @@ -129,7 +129,7 @@
129 129 {
130 130 struct adf4350_platform_data *pdata = st->pdata;
131 131 u64 tmp;
132   - u32 div_gcd, prescaler;
  132 + u32 div_gcd, prescaler, chspc;
133 133 u16 mdiv, r_cnt = 0;
134 134 u8 band_sel_div;
135 135  
136 136  
137 137  
... ... @@ -158,15 +158,21 @@
158 158 if (pdata->ref_div_factor)
159 159 r_cnt = pdata->ref_div_factor - 1;
160 160  
  161 + chspc = st->chspc;
  162 +
161 163 do {
162   - r_cnt = adf4350_tune_r_cnt(st, r_cnt);
  164 + do {
  165 + do {
  166 + r_cnt = adf4350_tune_r_cnt(st, r_cnt);
  167 + st->r1_mod = st->fpfd / chspc;
  168 + if (r_cnt > ADF4350_MAX_R_CNT) {
  169 + /* try higher spacing values */
  170 + chspc++;
  171 + r_cnt = 0;
  172 + }
  173 + } while ((st->r1_mod > ADF4350_MAX_MODULUS) && r_cnt);
  174 + } while (r_cnt == 0);
163 175  
164   - st->r1_mod = st->fpfd / st->chspc;
165   - while (st->r1_mod > ADF4350_MAX_MODULUS) {
166   - r_cnt = adf4350_tune_r_cnt(st, r_cnt);
167   - st->r1_mod = st->fpfd / st->chspc;
168   - }
169   -
170 176 tmp = freq * (u64)st->r1_mod + (st->fpfd > 1);
171 177 do_div(tmp, st->fpfd); /* Div round closest (n + d/2)/d */
172 178 st->r0_fract = do_div(tmp, st->r1_mod);
... ... @@ -194,7 +200,7 @@
194 200 st->regs[ADF4350_REG0] = ADF4350_REG0_INT(st->r0_int) |
195 201 ADF4350_REG0_FRACT(st->r0_fract);
196 202  
197   - st->regs[ADF4350_REG1] = ADF4350_REG1_PHASE(0) |
  203 + st->regs[ADF4350_REG1] = ADF4350_REG1_PHASE(1) |
198 204 ADF4350_REG1_MOD(st->r1_mod) |
199 205 prescaler;
200 206  
drivers/iio/light/adjd_s311.c
... ... @@ -271,9 +271,10 @@
271 271 const unsigned long *scan_mask)
272 272 {
273 273 struct adjd_s311_data *data = iio_priv(indio_dev);
274   - data->buffer = krealloc(data->buffer, indio_dev->scan_bytes,
275   - GFP_KERNEL);
276   - if (!data->buffer)
  274 +
  275 + kfree(data->buffer);
  276 + data->buffer = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
  277 + if (data->buffer == NULL)
277 278 return -ENOMEM;
278 279  
279 280 return 0;
drivers/iio/light/lm3533-als.c
... ... @@ -404,7 +404,7 @@
404 404 return ret;
405 405 }
406 406  
407   -static int show_thresh_either_en(struct device *dev,
  407 +static ssize_t show_thresh_either_en(struct device *dev,
408 408 struct device_attribute *attr,
409 409 char *buf)
410 410 {
... ... @@ -424,7 +424,7 @@
424 424 return scnprintf(buf, PAGE_SIZE, "%u\n", enable);
425 425 }
426 426  
427   -static int store_thresh_either_en(struct device *dev,
  427 +static ssize_t store_thresh_either_en(struct device *dev,
428 428 struct device_attribute *attr,
429 429 const char *buf, size_t len)
430 430 {
drivers/staging/iio/adc/ad7192.c
... ... @@ -754,7 +754,7 @@
754 754 else
755 755 st->mode &= ~AD7192_MODE_ACX;
756 756  
757   - ad7192_write_reg(st, AD7192_REG_GPOCON, 3, st->mode);
  757 + ad7192_write_reg(st, AD7192_REG_MODE, 3, st->mode);
758 758 break;
759 759 default:
760 760 ret = -EINVAL;
... ... @@ -798,6 +798,11 @@
798 798 .attrs = ad7195_attributes,
799 799 };
800 800  
  801 +static unsigned int ad7192_get_temp_scale(bool unipolar)
  802 +{
  803 + return unipolar ? 2815 * 2 : 2815;
  804 +}
  805 +
801 806 static int ad7192_read_raw(struct iio_dev *indio_dev,
802 807 struct iio_chan_spec const *chan,
803 808 int *val,
... ... @@ -824,19 +829,6 @@
824 829 *val = (smpl >> chan->scan_type.shift) &
825 830 ((1 << (chan->scan_type.realbits)) - 1);
826 831  
827   - switch (chan->type) {
828   - case IIO_VOLTAGE:
829   - if (!unipolar)
830   - *val -= (1 << (chan->scan_type.realbits - 1));
831   - break;
832   - case IIO_TEMP:
833   - *val -= 0x800000;
834   - *val /= 2815; /* temp Kelvin */
835   - *val -= 273; /* temp Celsius */
836   - break;
837   - default:
838   - return -EINVAL;
839   - }
840 832 return IIO_VAL_INT;
841 833  
842 834 case IIO_CHAN_INFO_SCALE:
843 835  
... ... @@ -848,11 +840,21 @@
848 840 mutex_unlock(&indio_dev->mlock);
849 841 return IIO_VAL_INT_PLUS_NANO;
850 842 case IIO_TEMP:
851   - *val = 1000;
852   - return IIO_VAL_INT;
  843 + *val = 0;
  844 + *val2 = 1000000000 / ad7192_get_temp_scale(unipolar);
  845 + return IIO_VAL_INT_PLUS_NANO;
853 846 default:
854 847 return -EINVAL;
855 848 }
  849 + case IIO_CHAN_INFO_OFFSET:
  850 + if (!unipolar)
  851 + *val = -(1 << (chan->scan_type.realbits - 1));
  852 + else
  853 + *val = 0;
  854 + /* Kelvin to Celsius */
  855 + if (chan->type == IIO_TEMP)
  856 + *val -= 273 * ad7192_get_temp_scale(unipolar);
  857 + return IIO_VAL_INT;
856 858 }
857 859  
858 860 return -EINVAL;
... ... @@ -890,7 +892,7 @@
890 892 }
891 893 ret = 0;
892 894 }
893   -
  895 + break;
894 896 default:
895 897 ret = -EINVAL;
896 898 }
897 899  
898 900  
899 901  
... ... @@ -942,20 +944,22 @@
942 944 .channel = _chan, \
943 945 .channel2 = _chan2, \
944 946 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \
945   - IIO_CHAN_INFO_SCALE_SHARED_BIT, \
  947 + IIO_CHAN_INFO_SCALE_SHARED_BIT | \
  948 + IIO_CHAN_INFO_OFFSET_SHARED_BIT, \
946 949 .address = _address, \
947 950 .scan_index = _si, \
948   - .scan_type = IIO_ST('s', 24, 32, 0)}
  951 + .scan_type = IIO_ST('u', 24, 32, 0)}
949 952  
950 953 #define AD7192_CHAN(_chan, _address, _si) \
951 954 { .type = IIO_VOLTAGE, \
952 955 .indexed = 1, \
953 956 .channel = _chan, \
954 957 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \
955   - IIO_CHAN_INFO_SCALE_SHARED_BIT, \
  958 + IIO_CHAN_INFO_SCALE_SHARED_BIT | \
  959 + IIO_CHAN_INFO_OFFSET_SHARED_BIT, \
956 960 .address = _address, \
957 961 .scan_index = _si, \
958   - .scan_type = IIO_ST('s', 24, 32, 0)}
  962 + .scan_type = IIO_ST('u', 24, 32, 0)}
959 963  
960 964 #define AD7192_CHAN_TEMP(_chan, _address, _si) \
961 965 { .type = IIO_TEMP, \
... ... @@ -965,7 +969,7 @@
965 969 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \
966 970 .address = _address, \
967 971 .scan_index = _si, \
968   - .scan_type = IIO_ST('s', 24, 32, 0)}
  972 + .scan_type = IIO_ST('u', 24, 32, 0)}
969 973  
970 974 static struct iio_chan_spec ad7192_channels[] = {
971 975 AD7192_CHAN_DIFF(1, 2, NULL, AD7192_CH_AIN1P_AIN2M, 0),
drivers/staging/iio/adc/ad7298_ring.c
... ... @@ -76,7 +76,7 @@
76 76 struct iio_dev *indio_dev = pf->indio_dev;
77 77 struct ad7298_state *st = iio_priv(indio_dev);
78 78 struct iio_buffer *ring = indio_dev->buffer;
79   - s64 time_ns;
  79 + s64 time_ns = 0;
80 80 __u16 buf[16];
81 81 int b_sent, i;
82 82  
drivers/staging/iio/adc/ad7780.c
... ... @@ -131,9 +131,10 @@
131 131 .indexed = 1,
132 132 .channel = 0,
133 133 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
134   - IIO_CHAN_INFO_SCALE_SHARED_BIT,
  134 + IIO_CHAN_INFO_SCALE_SHARED_BIT |
  135 + IIO_CHAN_INFO_OFFSET_SHARED_BIT,
135 136 .scan_type = {
136   - .sign = 's',
  137 + .sign = 'u',
137 138 .realbits = 24,
138 139 .storagebits = 32,
139 140 .shift = 8,
140 141  
... ... @@ -146,9 +147,10 @@
146 147 .indexed = 1,
147 148 .channel = 0,
148 149 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
149   - IIO_CHAN_INFO_SCALE_SHARED_BIT,
  150 + IIO_CHAN_INFO_SCALE_SHARED_BIT |
  151 + IIO_CHAN_INFO_OFFSET_SHARED_BIT,
150 152 .scan_type = {
151   - .sign = 's',
  153 + .sign = 'u',
152 154 .realbits = 20,
153 155 .storagebits = 32,
154 156 .shift = 12,
drivers/staging/iio/adc/ad7793.c
... ... @@ -563,8 +563,9 @@
563 563 return len;
564 564 }
565 565  
566   -static IIO_DEVICE_ATTR_NAMED(in_m_in_scale_available, in-in_scale_available,
567   - S_IRUGO, ad7793_show_scale_available, NULL, 0);
  566 +static IIO_DEVICE_ATTR_NAMED(in_m_in_scale_available,
  567 + in_voltage-voltage_scale_available, S_IRUGO,
  568 + ad7793_show_scale_available, NULL, 0);
568 569  
569 570 static struct attribute *ad7793_attributes[] = {
570 571 &iio_dev_attr_sampling_frequency.dev_attr.attr,
... ... @@ -604,9 +605,6 @@
604 605 *val = (smpl >> chan->scan_type.shift) &
605 606 ((1 << (chan->scan_type.realbits)) - 1);
606 607  
607   - if (!unipolar)
608   - *val -= (1 << (chan->scan_type.realbits - 1));
609   -
610 608 return IIO_VAL_INT;
611 609  
612 610 case IIO_CHAN_INFO_SCALE:
613 611  
614 612  
615 613  
... ... @@ -620,25 +618,38 @@
620 618 return IIO_VAL_INT_PLUS_NANO;
621 619 } else {
622 620 /* 1170mV / 2^23 * 6 */
623   - scale_uv = (1170ULL * 100000000ULL * 6ULL)
624   - >> (chan->scan_type.realbits -
625   - (unipolar ? 0 : 1));
  621 + scale_uv = (1170ULL * 100000000ULL * 6ULL);
626 622 }
627 623 break;
628 624 case IIO_TEMP:
629   - /* Always uses unity gain and internal ref */
630   - scale_uv = (2500ULL * 100000000ULL)
631   - >> (chan->scan_type.realbits -
632   - (unipolar ? 0 : 1));
  625 + /* 1170mV / 0.81 mV/C / 2^23 */
  626 + scale_uv = 1444444444444ULL;
633 627 break;
634 628 default:
635 629 return -EINVAL;
636 630 }
637 631  
638   - *val2 = do_div(scale_uv, 100000000) * 10;
639   - *val = scale_uv;
640   -
  632 + scale_uv >>= (chan->scan_type.realbits - (unipolar ? 0 : 1));
  633 + *val = 0;
  634 + *val2 = scale_uv;
641 635 return IIO_VAL_INT_PLUS_NANO;
  636 + case IIO_CHAN_INFO_OFFSET:
  637 + if (!unipolar)
  638 + *val = -(1 << (chan->scan_type.realbits - 1));
  639 + else
  640 + *val = 0;
  641 +
  642 + /* Kelvin to Celsius */
  643 + if (chan->type == IIO_TEMP) {
  644 + unsigned long long offset;
  645 + unsigned int shift;
  646 +
  647 + shift = chan->scan_type.realbits - (unipolar ? 0 : 1);
  648 + offset = 273ULL << shift;
  649 + do_div(offset, 1444);
  650 + *val -= offset;
  651 + }
  652 + return IIO_VAL_INT;
642 653 }
643 654 return -EINVAL;
644 655 }
... ... @@ -676,7 +687,7 @@
676 687 }
677 688 ret = 0;
678 689 }
679   -
  690 + break;
680 691 default:
681 692 ret = -EINVAL;
682 693 }
683 694  
... ... @@ -720,9 +731,10 @@
720 731 .channel2 = 0,
721 732 .address = AD7793_CH_AIN1P_AIN1M,
722 733 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
723   - IIO_CHAN_INFO_SCALE_SHARED_BIT,
  734 + IIO_CHAN_INFO_SCALE_SHARED_BIT |
  735 + IIO_CHAN_INFO_OFFSET_SHARED_BIT,
724 736 .scan_index = 0,
725   - .scan_type = IIO_ST('s', 24, 32, 0)
  737 + .scan_type = IIO_ST('u', 24, 32, 0)
726 738 },
727 739 .channel[1] = {
728 740 .type = IIO_VOLTAGE,
729 741  
... ... @@ -732,9 +744,10 @@
732 744 .channel2 = 1,
733 745 .address = AD7793_CH_AIN2P_AIN2M,
734 746 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
735   - IIO_CHAN_INFO_SCALE_SHARED_BIT,
  747 + IIO_CHAN_INFO_SCALE_SHARED_BIT |
  748 + IIO_CHAN_INFO_OFFSET_SHARED_BIT,
736 749 .scan_index = 1,
737   - .scan_type = IIO_ST('s', 24, 32, 0)
  750 + .scan_type = IIO_ST('u', 24, 32, 0)
738 751 },
739 752 .channel[2] = {
740 753 .type = IIO_VOLTAGE,
741 754  
... ... @@ -744,9 +757,10 @@
744 757 .channel2 = 2,
745 758 .address = AD7793_CH_AIN3P_AIN3M,
746 759 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
747   - IIO_CHAN_INFO_SCALE_SHARED_BIT,
  760 + IIO_CHAN_INFO_SCALE_SHARED_BIT |
  761 + IIO_CHAN_INFO_OFFSET_SHARED_BIT,
748 762 .scan_index = 2,
749   - .scan_type = IIO_ST('s', 24, 32, 0)
  763 + .scan_type = IIO_ST('u', 24, 32, 0)
750 764 },
751 765 .channel[3] = {
752 766 .type = IIO_VOLTAGE,
753 767  
... ... @@ -757,9 +771,10 @@
757 771 .channel2 = 2,
758 772 .address = AD7793_CH_AIN1M_AIN1M,
759 773 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
760   - IIO_CHAN_INFO_SCALE_SHARED_BIT,
  774 + IIO_CHAN_INFO_SCALE_SHARED_BIT |
  775 + IIO_CHAN_INFO_OFFSET_SHARED_BIT,
761 776 .scan_index = 3,
762   - .scan_type = IIO_ST('s', 24, 32, 0)
  777 + .scan_type = IIO_ST('u', 24, 32, 0)
763 778 },
764 779 .channel[4] = {
765 780 .type = IIO_TEMP,
... ... @@ -769,7 +784,7 @@
769 784 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
770 785 IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
771 786 .scan_index = 4,
772   - .scan_type = IIO_ST('s', 24, 32, 0),
  787 + .scan_type = IIO_ST('u', 24, 32, 0),
773 788 },
774 789 .channel[5] = {
775 790 .type = IIO_VOLTAGE,
776 791  
... ... @@ -778,9 +793,10 @@
778 793 .channel = 4,
779 794 .address = AD7793_CH_AVDD_MONITOR,
780 795 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
781   - IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
  796 + IIO_CHAN_INFO_SCALE_SEPARATE_BIT |
  797 + IIO_CHAN_INFO_OFFSET_SHARED_BIT,
782 798 .scan_index = 5,
783   - .scan_type = IIO_ST('s', 24, 32, 0),
  799 + .scan_type = IIO_ST('u', 24, 32, 0),
784 800 },
785 801 .channel[6] = IIO_CHAN_SOFT_TIMESTAMP(6),
786 802 },
787 803  
... ... @@ -793,9 +809,10 @@
793 809 .channel2 = 0,
794 810 .address = AD7793_CH_AIN1P_AIN1M,
795 811 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
796   - IIO_CHAN_INFO_SCALE_SHARED_BIT,
  812 + IIO_CHAN_INFO_SCALE_SHARED_BIT |
  813 + IIO_CHAN_INFO_OFFSET_SHARED_BIT,
797 814 .scan_index = 0,
798   - .scan_type = IIO_ST('s', 16, 32, 0)
  815 + .scan_type = IIO_ST('u', 16, 32, 0)
799 816 },
800 817 .channel[1] = {
801 818 .type = IIO_VOLTAGE,
802 819  
... ... @@ -805,9 +822,10 @@
805 822 .channel2 = 1,
806 823 .address = AD7793_CH_AIN2P_AIN2M,
807 824 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
808   - IIO_CHAN_INFO_SCALE_SHARED_BIT,
  825 + IIO_CHAN_INFO_SCALE_SHARED_BIT |
  826 + IIO_CHAN_INFO_OFFSET_SHARED_BIT,
809 827 .scan_index = 1,
810   - .scan_type = IIO_ST('s', 16, 32, 0)
  828 + .scan_type = IIO_ST('u', 16, 32, 0)
811 829 },
812 830 .channel[2] = {
813 831 .type = IIO_VOLTAGE,
814 832  
... ... @@ -817,9 +835,10 @@
817 835 .channel2 = 2,
818 836 .address = AD7793_CH_AIN3P_AIN3M,
819 837 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
820   - IIO_CHAN_INFO_SCALE_SHARED_BIT,
  838 + IIO_CHAN_INFO_SCALE_SHARED_BIT |
  839 + IIO_CHAN_INFO_OFFSET_SHARED_BIT,
821 840 .scan_index = 2,
822   - .scan_type = IIO_ST('s', 16, 32, 0)
  841 + .scan_type = IIO_ST('u', 16, 32, 0)
823 842 },
824 843 .channel[3] = {
825 844 .type = IIO_VOLTAGE,
826 845  
... ... @@ -830,9 +849,10 @@
830 849 .channel2 = 2,
831 850 .address = AD7793_CH_AIN1M_AIN1M,
832 851 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
833   - IIO_CHAN_INFO_SCALE_SHARED_BIT,
  852 + IIO_CHAN_INFO_SCALE_SHARED_BIT |
  853 + IIO_CHAN_INFO_OFFSET_SHARED_BIT,
834 854 .scan_index = 3,
835   - .scan_type = IIO_ST('s', 16, 32, 0)
  855 + .scan_type = IIO_ST('u', 16, 32, 0)
836 856 },
837 857 .channel[4] = {
838 858 .type = IIO_TEMP,
... ... @@ -842,7 +862,7 @@
842 862 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
843 863 IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
844 864 .scan_index = 4,
845   - .scan_type = IIO_ST('s', 16, 32, 0),
  865 + .scan_type = IIO_ST('u', 16, 32, 0),
846 866 },
847 867 .channel[5] = {
848 868 .type = IIO_VOLTAGE,
849 869  
... ... @@ -851,9 +871,10 @@
851 871 .channel = 4,
852 872 .address = AD7793_CH_AVDD_MONITOR,
853 873 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
854   - IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
  874 + IIO_CHAN_INFO_SCALE_SEPARATE_BIT |
  875 + IIO_CHAN_INFO_OFFSET_SHARED_BIT,
855 876 .scan_index = 5,
856   - .scan_type = IIO_ST('s', 16, 32, 0),
  877 + .scan_type = IIO_ST('u', 16, 32, 0),
857 878 },
858 879 .channel[6] = IIO_CHAN_SOFT_TIMESTAMP(6),
859 880 },
... ... @@ -901,7 +922,7 @@
901 922 else if (voltage_uv)
902 923 st->int_vref_mv = voltage_uv / 1000;
903 924 else
904   - st->int_vref_mv = 2500; /* Build-in ref */
  925 + st->int_vref_mv = 1170; /* Build-in ref */
905 926  
906 927 spi_set_drvdata(spi, indio_dev);
907 928 st->spi = spi;
include/linux/iio/frequency/adf4350.h
... ... @@ -87,6 +87,8 @@
87 87 #define ADF4350_MAX_BANDSEL_CLK 125000 /* Hz */
88 88 #define ADF4350_MAX_FREQ_REFIN 250000000 /* Hz */
89 89 #define ADF4350_MAX_MODULUS 4095
  90 +#define ADF4350_MAX_R_CNT 1023
  91 +
90 92  
91 93 /**
92 94 * struct adf4350_platform_data - platform specific information