Pull staging fixes from Greg Kroah-Hartman: "Here are some staging driver fixes (and iio driver fixes, they get lumped in with the staging stuff due to dependancies) for your 3.6-rc3 tree. Nothing major, just a bunch of fixes that people have reported. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>" * tag 'staging-3.6-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (26 commits) iio: lm3533-als: Fix build warnings staging:iio:ad7780: Mark channels as unsigned staging:iio:ad7192: Report offset and scale for temperature channel staging:iio:ad7192: Report channel offset staging:iio:ad7192: Mark channels as unsigned staging:iio:ad7192: Fix setting ACX staging:iio:ad7192: Add missing break in switch statement staging:iio:ad7793: Fix internal reference value staging:iio:ad7793: Follow new IIO naming spec staging:iio:ad7793: Fix temperature scale and offset staging:iio:ad7793: Report channel offset staging:iio:ad7793: Mark channels as unsigned staging:iio:ad7793: Add missing break in switch statement iio/adjd_s311: Fix potential memory leak in adjd_s311_update_scan_mode() iio: frequency: ADF4350: Fix potential reference div factor overflow. iio: staging: ad7298_ring: Fix maybe-uninitialized warning staging: comedi: usbduxfast: Declare MODULE_FIRMWARE usage staging: comedi: usbdux: Declare MODULE_FIRMWARE usage staging: comedi: usbduxsigma: Declare MODULE_FIRMWARE usage staging: csr: add INET dependancy ...
Unified · Split
| @@ -129,7 +129,7 @@ static int adf4350_set_freq(struct adf4350_state *st, unsigned long long freq) · 128 unmodified lines | ||
| 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 | |
| @@ -158,14 +158,20 @@ static int adf4350_set_freq(struct adf4350_state *st, unsigned long long freq) · 22 unmodified lines | ||
| 158 | 158 | if (pdata->ref_div_factor) |
| 159 | 159 | r_cnt = pdata->ref_div_factor - 1; |
| 160 | 160 | |
| 161 | − do { | |
| 162 | − r_cnt = adf4350_tune_r_cnt(st, r_cnt); | |
| 161 | + chspc = st->chspc; | |
| 163 | 162 | |
| 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 | − } | |
| 163 | + do { | |
| 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); | |
| 169 | 175 | |
| 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 */ |
| @@ -194,7 +200,7 @@ static int adf4350_set_freq(struct adf4350_state *st, unsigned long long freq) · 22 unmodified lines | ||
| 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 | |
| @@ -271,9 +271,10 @@ static int adjd_s311_update_scan_mode(struct iio_dev *indio_dev, · 270 unmodified lines | ||
| 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; |
| @@ -404,7 +404,7 @@ out: · 403 unmodified lines | ||
| 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 @@ static int show_thresh_either_en(struct device *dev, · 13 unmodified lines | ||
| 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 | { |
| @@ -168,7 +168,7 @@ int comedi_device_attach(struct comedi_device *dev, struct comedi_devconfig *it) · 167 unmodified lines | ||
| 168 | 168 | dev->board_ptr = comedi_recognize(driv, it->board_name); |
| 169 | 169 | if (dev->board_ptr) |
| 170 | 170 | break; |
| 171 | − } else if (strcmp(driv->driver_name, it->board_name)) | |
| 171 | + } else if (strcmp(driv->driver_name, it->board_name) == 0) | |
| 172 | 172 | break; |
| 173 | 173 | module_put(driv->module); |
| 174 | 174 | } |
| @@ -1349,9 +1349,6 @@ static struct pci_dev *pci1710_find_pci_dev(struct comedi_device *dev, · 1348 unmodified lines | ||
| 1349 | 1349 | } |
| 1350 | 1350 | if (pcidev->vendor != PCI_VENDOR_ID_ADVANTECH) |
| 1351 | 1351 | continue; |
| 1352 | − if (pci_is_enabled(pcidev)) | |
| 1353 | − continue; | |
| 1354 | − | |
| 1355 | 1352 | if (strcmp(this_board->name, DRV_NAME) == 0) { |
| 1356 | 1353 | for (i = 0; i < ARRAY_SIZE(boardtypes); ++i) { |
| 1357 | 1354 | if (pcidev->device == boardtypes[i].device_id) { |
| @@ -301,8 +301,6 @@ static struct pci_dev *pci1723_find_pci_dev(struct comedi_device *dev, · 300 unmodified lines | ||
| 301 | 301 | } |
| 302 | 302 | if (pcidev->vendor != PCI_VENDOR_ID_ADVANTECH) |
| 303 | 303 | continue; |
| 304 | − if (pci_is_enabled(pcidev)) | |
| 305 | − continue; | |
| 306 | 304 | return pcidev; |
| 307 | 305 | } |
| 308 | 306 | dev_err(dev->class_dev, |
| @@ -1064,8 +1064,6 @@ static struct pci_dev *pci_dio_find_pci_dev(struct comedi_device *dev, · 1063 unmodified lines | ||
| 1064 | 1064 | slot != PCI_SLOT(pcidev->devfn)) |
| 1065 | 1065 | continue; |
| 1066 | 1066 | } |
| 1067 | − if (pci_is_enabled(pcidev)) | |
| 1068 | − continue; | |
| 1069 | 1067 | for (i = 0; i < ARRAY_SIZE(boardtypes); ++i) { |
| 1070 | 1068 | if (boardtypes[i].vendor_id != pcidev->vendor) |
| 1071 | 1069 | continue; |
| @@ -718,7 +718,8 @@ static struct pci_dev *daqboard2000_find_pci_dev(struct comedi_device *dev, · 717 unmodified lines | ||
| 718 | 718 | continue; |
| 719 | 719 | } |
| 720 | 720 | if (pcidev->vendor != PCI_VENDOR_ID_IOTECH || |
| 721 | − pcidev->device != 0x0409) | |
| 721 | + pcidev->device != 0x0409 || | |
| 722 | + pcidev->subsystem_device != PCI_VENDOR_ID_IOTECH) | |
| 722 | 723 | continue; |
| 723 | 724 | |
| 724 | 725 | for (i = 0; i < ARRAY_SIZE(boardtypes); i++) { |
| @@ -739,6 +740,7 @@ static int daqboard2000_attach(struct comedi_device *dev, · 14 unmodified lines | ||
| 739 | 740 | { |
| 740 | 741 | struct pci_dev *pcidev; |
| 741 | 742 | struct comedi_subdevice *s; |
| 743 | + resource_size_t pci_base; | |
| 742 | 744 | void *aux_data; |
| 743 | 745 | unsigned int aux_len; |
| 744 | 746 | int result; |
| @@ -758,11 +760,12 @@ static int daqboard2000_attach(struct comedi_device *dev, · 13 unmodified lines | ||
| 758 | 760 | "failed to enable PCI device and request regions\n"); |
| 759 | 761 | return -EIO; |
| 760 | 762 | } |
| 761 | − dev->iobase = pci_resource_start(pcidev, 2); | |
| 763 | + dev->iobase = 1; /* the "detach" needs this */ | |
| 762 | 764 | |
| 763 | − devpriv->plx = | |
| 764 | − ioremap(pci_resource_start(pcidev, 0), DAQBOARD2000_PLX_SIZE); | |
| 765 | − devpriv->daq = ioremap(dev->iobase, DAQBOARD2000_DAQ_SIZE); | |
| 765 | + pci_base = pci_resource_start(pcidev, 0); | |
| 766 | + devpriv->plx = ioremap(pci_base, DAQBOARD2000_PLX_SIZE); | |
| 767 | + pci_base = pci_resource_start(pcidev, 2); | |
| 768 | + devpriv->daq = ioremap(pci_base, DAQBOARD2000_DAQ_SIZE); | |
| 766 | 769 | if (!devpriv->plx || !devpriv->daq) |
| 767 | 770 | return -ENOMEM; |
| 768 | 771 | |
| @@ -799,8 +802,6 @@ static int daqboard2000_attach(struct comedi_device *dev, · 30 unmodified lines | ||
| 799 | 802 | printk("Interrupt after is: %x\n", interrupt); |
| 800 | 803 | */ |
| 801 | 804 | |
| 802 | − dev->iobase = (unsigned long)devpriv->daq; | |
| 803 | − | |
| 804 | 805 | dev->board_name = this_board->name; |
| 805 | 806 | |
| 806 | 807 | s = dev->subdevices + 0; |
| @@ -824,7 +825,7 @@ static int daqboard2000_attach(struct comedi_device *dev, · 17 unmodified lines | ||
| 824 | 825 | |
| 825 | 826 | s = dev->subdevices + 2; |
| 826 | 827 | result = subdev_8255_init(dev, s, daqboard2000_8255_cb, |
| 827 | − (unsigned long)(dev->iobase + 0x40)); | |
| 828 | + (unsigned long)(devpriv->daq + 0x40)); | |
| 828 | 829 | |
| 829 | 830 | out: |
| 830 | 831 | return result; |
| @@ -804,6 +804,7 @@ static int dt3000_attach(struct comedi_device *dev, struct comedi_devconfig *it) · 803 unmodified lines | ||
| 804 | 804 | { |
| 805 | 805 | struct pci_dev *pcidev; |
| 806 | 806 | struct comedi_subdevice *s; |
| 807 | + resource_size_t pci_base; | |
| 807 | 808 | int ret = 0; |
| 808 | 809 | |
| 809 | 810 | dev_dbg(dev->class_dev, "dt3000:\n"); |
| @@ -820,9 +821,10 @@ static int dt3000_attach(struct comedi_device *dev, struct comedi_devconfig *it) · 10 unmodified lines | ||
| 820 | 821 | ret = comedi_pci_enable(pcidev, "dt3000"); |
| 821 | 822 | if (ret < 0) |
| 822 | 823 | return ret; |
| 824 | + dev->iobase = 1; /* the "detach" needs this */ | |
| 823 | 825 | |
| 824 | − dev->iobase = pci_resource_start(pcidev, 0); | |
| 825 | − devpriv->io_addr = ioremap(dev->iobase, DT3000_SIZE); | |
| 826 | + pci_base = pci_resource_start(pcidev, 0); | |
| 827 | + devpriv->io_addr = ioremap(pci_base, DT3000_SIZE); | |
| 826 | 828 | if (!devpriv->io_addr) |
| 827 | 829 | return -ENOMEM; |
| 828 | 830 | |
| @@ -1619,9 +1619,8 @@ static int rtd_attach(struct comedi_device *dev, struct comedi_devconfig *it) · 1618 unmodified lines | ||
| 1619 | 1619 | struct rtdPrivate *devpriv; |
| 1620 | 1620 | struct pci_dev *pcidev; |
| 1621 | 1621 | struct comedi_subdevice *s; |
| 1622 | + resource_size_t pci_base; | |
| 1622 | 1623 | int ret; |
| 1623 | − resource_size_t physLas1; /* data area */ | |
| 1624 | − resource_size_t physLcfg; /* PLX9080 */ | |
| 1625 | 1624 | #ifdef USE_DMA |
| 1626 | 1625 | int index; |
| 1627 | 1626 | #endif |
| @@ -1655,20 +1654,15 @@ static int rtd_attach(struct comedi_device *dev, struct comedi_devconfig *it) · 27 unmodified lines | ||
| 1655 | 1654 | printk(KERN_INFO "Failed to enable PCI device and request regions.\n"); |
| 1656 | 1655 | return ret; |
| 1657 | 1656 | } |
| 1658 | − | |
| 1659 | − /* | |
| 1660 | − * Initialize base addresses | |
| 1661 | − */ | |
| 1662 | − /* Get the physical address from PCI config */ | |
| 1663 | − dev->iobase = pci_resource_start(pcidev, LAS0_PCIINDEX); | |
| 1664 | − physLas1 = pci_resource_start(pcidev, LAS1_PCIINDEX); | |
| 1665 | − physLcfg = pci_resource_start(pcidev, LCFG_PCIINDEX); | |
| 1666 | − /* Now have the kernel map this into memory */ | |
| 1667 | − /* ASSUME page aligned */ | |
| 1668 | − devpriv->las0 = ioremap_nocache(dev->iobase, LAS0_PCISIZE); | |
| 1669 | − devpriv->las1 = ioremap_nocache(physLas1, LAS1_PCISIZE); | |
| 1670 | − devpriv->lcfg = ioremap_nocache(physLcfg, LCFG_PCISIZE); | |
| 1671 | − | |
| 1657 | + dev->iobase = 1; /* the "detach" needs this */ | |
| 1658 | + | |
| 1659 | + /* Initialize the base addresses */ | |
| 1660 | + pci_base = pci_resource_start(pcidev, LAS0_PCIINDEX); | |
| 1661 | + devpriv->las0 = ioremap_nocache(pci_base, LAS0_PCISIZE); | |
| 1662 | + pci_base = pci_resource_start(pcidev, LAS1_PCIINDEX); | |
| 1663 | + devpriv->las1 = ioremap_nocache(pci_base, LAS1_PCISIZE); | |
| 1664 | + pci_base = pci_resource_start(pcidev, LCFG_PCIINDEX); | |
| 1665 | + devpriv->lcfg = ioremap_nocache(pci_base, LCFG_PCISIZE); | |
| 1672 | 1666 | if (!devpriv->las0 || !devpriv->las1 || !devpriv->lcfg) |
| 1673 | 1667 | return -ENOMEM; |
| 1674 | 1668 | |
| @@ -102,6 +102,7 @@ sampling rate. If you sample two channels you get 4kHz and so on. · 101 unmodified lines | ||
| 102 | 102 | #define BULK_TIMEOUT 1000 |
| 103 | 103 | |
| 104 | 104 | /* constants for "firmware" upload and download */ |
| 105 | +#define FIRMWARE "usbdux_firmware.bin" | |
| 105 | 106 | #define USBDUXSUB_FIRMWARE 0xA0 |
| 106 | 107 | #define VENDOR_DIR_IN 0xC0 |
| 107 | 108 | #define VENDOR_DIR_OUT 0x40 |
| @@ -2791,7 +2792,7 @@ static int usbdux_usb_probe(struct usb_interface *uinterf, · 2683 unmodified lines | ||
| 2791 | 2792 | |
| 2792 | 2793 | ret = request_firmware_nowait(THIS_MODULE, |
| 2793 | 2794 | FW_ACTION_HOTPLUG, |
| 2794 | − "usbdux_firmware.bin", | |
| 2795 | + FIRMWARE, | |
| 2795 | 2796 | &udev->dev, |
| 2796 | 2797 | GFP_KERNEL, |
| 2797 | 2798 | usbduxsub + index, |
| @@ -2850,3 +2851,4 @@ module_comedi_usb_driver(usbdux_driver, usbdux_usb_driver); · 52 unmodified lines | ||
| 2850 | 2851 | MODULE_AUTHOR("Bernd Porr, BerndPorr@f2s.com"); |
| 2851 | 2852 | MODULE_DESCRIPTION("Stirling/ITL USB-DUX -- Bernd.Porr@f2s.com"); |
| 2852 | 2853 | MODULE_LICENSE("GPL"); |
| 2854 | +MODULE_FIRMWARE(FIRMWARE); | |
| @@ -57,6 +57,7 @@ · 56 unmodified lines | ||
| 57 | 57 | /* |
| 58 | 58 | * constants for "firmware" upload and download |
| 59 | 59 | */ |
| 60 | +#define FIRMWARE "usbduxfast_firmware.bin" | |
| 60 | 61 | #define USBDUXFASTSUB_FIRMWARE 0xA0 |
| 61 | 62 | #define VENDOR_DIR_IN 0xC0 |
| 62 | 63 | #define VENDOR_DIR_OUT 0x40 |
| @@ -1706,7 +1707,7 @@ static int usbduxfast_usb_probe(struct usb_interface *uinterf, · 1643 unmodified lines | ||
| 1706 | 1707 | |
| 1707 | 1708 | ret = request_firmware_nowait(THIS_MODULE, |
| 1708 | 1709 | FW_ACTION_HOTPLUG, |
| 1709 | − "usbduxfast_firmware.bin", | |
| 1710 | + FIRMWARE, | |
| 1710 | 1711 | &udev->dev, |
| 1711 | 1712 | GFP_KERNEL, |
| 1712 | 1713 | usbduxfastsub + index, |
| @@ -1774,3 +1775,4 @@ module_comedi_usb_driver(usbduxfast_driver, usbduxfast_usb_driver); · 61 unmodified lines | ||
| 1774 | 1775 | MODULE_AUTHOR("Bernd Porr, BerndPorr@f2s.com"); |
| 1775 | 1776 | MODULE_DESCRIPTION("USB-DUXfast, BerndPorr@f2s.com"); |
| 1776 | 1777 | MODULE_LICENSE("GPL"); |
| 1778 | +MODULE_FIRMWARE(FIRMWARE); | |
| @@ -63,6 +63,7 @@ Status: testing · 62 unmodified lines | ||
| 63 | 63 | #define BULK_TIMEOUT 1000 |
| 64 | 64 | |
| 65 | 65 | /* constants for "firmware" upload and download */ |
| 66 | +#define FIRMWARE "usbduxsigma_firmware.bin" | |
| 66 | 67 | #define USBDUXSUB_FIRMWARE 0xA0 |
| 67 | 68 | #define VENDOR_DIR_IN 0xC0 |
| 68 | 69 | #define VENDOR_DIR_OUT 0x40 |
| @@ -2780,7 +2781,7 @@ static int usbduxsigma_usb_probe(struct usb_interface *uinterf, · 2711 unmodified lines | ||
| 2780 | 2781 | |
| 2781 | 2782 | ret = request_firmware_nowait(THIS_MODULE, |
| 2782 | 2783 | FW_ACTION_HOTPLUG, |
| 2783 | − "usbduxsigma_firmware.bin", | |
| 2784 | + FIRMWARE, | |
| 2784 | 2785 | &udev->dev, |
| 2785 | 2786 | GFP_KERNEL, |
| 2786 | 2787 | usbduxsub + index, |
| @@ -2845,3 +2846,4 @@ module_comedi_usb_driver(usbduxsigma_driver, usbduxsigma_usb_driver); · 58 unmodified lines | ||
| 2845 | 2846 | MODULE_AUTHOR("Bernd Porr, BerndPorr@f2s.com"); |
| 2846 | 2847 | MODULE_DESCRIPTION("Stirling/ITL USB-DUX SIGMA -- Bernd.Porr@f2s.com"); |
| 2847 | 2848 | MODULE_LICENSE("GPL"); |
| 2849 | +MODULE_FIRMWARE(FIRMWARE); | |
| @@ -1,6 +1,6 @@ | ||
| 1 | 1 | config CSR_WIFI |
| 2 | 2 | tristate "CSR wireless driver" |
| 3 | − depends on MMC && CFG80211_WEXT | |
| 3 | + depends on MMC && CFG80211_WEXT && INET | |
| 4 | 4 | select WIRELESS_EXT |
| 5 | 5 | select WEXT_PRIV |
| 6 | 6 | help |
| @@ -754,7 +754,7 @@ static ssize_t ad7192_set(struct device *dev, · 753 unmodified lines | ||
| 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 @@ static const struct attribute_group ad7195_attribute_group = { · 37 unmodified lines | ||
| 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 @@ static int ad7192_read_raw(struct iio_dev *indio_dev, · 20 unmodified lines | ||
| 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: |
| @@ -848,11 +840,21 @@ static int ad7192_read_raw(struct iio_dev *indio_dev, · 5 unmodified lines | ||
| 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 @@ static int ad7192_write_raw(struct iio_dev *indio_dev, · 31 unmodified lines | ||
| 890 | 892 | } |
| 891 | 893 | ret = 0; |
| 892 | 894 | } |
| 893 | − | |
| 895 | + break; | |
| 894 | 896 | default: |
| 895 | 897 | ret = -EINVAL; |
| 896 | 898 | } |
| @@ -942,20 +944,22 @@ static const struct iio_info ad7195_info = { · 45 unmodified lines | ||
| 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 @@ static const struct iio_info ad7195_info = { · 3 unmodified lines | ||
| 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), |
| @@ -76,7 +76,7 @@ static irqreturn_t ad7298_trigger_handler(int irq, void *p) · 75 unmodified lines | ||
| 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 | |
| @@ -131,9 +131,10 @@ static const struct ad7780_chip_info ad7780_chip_info_tbl[] = { · 130 unmodified lines | ||
| 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, |
| @@ -146,9 +147,10 @@ static const struct ad7780_chip_info ad7780_chip_info_tbl[] = { · 6 unmodified lines | ||
| 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, |
| @@ -563,8 +563,9 @@ static ssize_t ad7793_show_scale_available(struct device *dev, · 562 unmodified lines | ||
| 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 @@ static int ad7793_read_raw(struct iio_dev *indio_dev, · 33 unmodified lines | ||
| 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: |
| @@ -620,25 +618,38 @@ static int ad7793_read_raw(struct iio_dev *indio_dev, · 7 unmodified lines | ||
| 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 @@ static int ad7793_write_raw(struct iio_dev *indio_dev, · 31 unmodified lines | ||
| 676 | 687 | } |
| 677 | 688 | ret = 0; |
| 678 | 689 | } |
| 679 | − | |
| 690 | + break; | |
| 680 | 691 | default: |
| 681 | 692 | ret = -EINVAL; |
| 682 | 693 | } |
| @@ -720,9 +731,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { · 37 unmodified lines | ||
| 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, |
| @@ -732,9 +744,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { · 3 unmodified lines | ||
| 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, |
| @@ -744,9 +757,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { · 3 unmodified lines | ||
| 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, |
| @@ -757,9 +771,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { · 4 unmodified lines | ||
| 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 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { · 3 unmodified lines | ||
| 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, |
| @@ -778,9 +793,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { · 2 unmodified lines | ||
| 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 | }, |
| @@ -793,9 +809,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { · 6 unmodified lines | ||
| 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, |
| @@ -805,9 +822,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { · 3 unmodified lines | ||
| 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, |
| @@ -817,9 +835,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { · 3 unmodified lines | ||
| 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, |
| @@ -830,9 +849,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { · 4 unmodified lines | ||
| 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 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { · 3 unmodified lines | ||
| 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, |
| @@ -851,9 +871,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = { · 2 unmodified lines | ||
| 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 @@ static int __devinit ad7793_probe(struct spi_device *spi) · 41 unmodified lines | ||
| 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; |
| @@ -87,6 +87,8 @@ · 86 unmodified lines | ||
| 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 |