Commit 8d245acc authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull char/misc/iio fixes from Greg KH:
 "Here are a small number of char/misc/iio and other driver fixes for
  6.17-rc3.  Included in here are:

   - IIO driver bugfixes for reported issues

   - bunch of comedi driver fixes

   - most core bugfix

   - fpga driver bugfix

   - cdx driver bugfix

  All of these have been in linux-next this week with no reported
  issues"

* tag 'char-misc-6.17-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc:
  most: core: Drop device reference after usage in get_channel()
  comedi: Make insn_rw_emulate_bits() do insn->n samples
  comedi: Fix use of uninitialized memory in do_insn_ioctl() and do_insnlist_ioctl()
  comedi: pcl726: Prevent invalid irq number
  cdx: Fix off-by-one error in cdx_rpmsg_probe()
  fpga: zynq_fpga: Fix the wrong usage of dma_map_sgtable()
  iio: pressure: bmp280: Use IS_ERR() in bmp280_common_probe()
  iio: light: as73211: Ensure buffer holes are zeroed
  iio: adc: rzg2l_adc: Set driver data before enabling runtime PM
  iio: adc: rzg2l: Cleanup suspend/resume path
  iio: adc: ad7380: fix missing max_conversion_rate_hz on adaq4381-4
  iio: adc: bd79124: Add GPIOLIB dependency
  iio: imu: inv_icm42600: change invalid data error to -EBUSY
  iio: adc: ad7124: fix channel lookup in syscalib functions
  iio: temperature: maxim_thermocouple: use DMA-safe buffer for spi_read()
  iio: adc: ad7173: prevent scan if too many setups requested
  iio: proximity: isl29501: fix buffered read on big-endian systems
  iio: accel: sca3300: fix uninitialized iio scan data
parents 8004d083 fe85261d
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -129,8 +129,7 @@ static int cdx_rpmsg_probe(struct rpmsg_device *rpdev)

	chinfo.src = RPMSG_ADDR_ANY;
	chinfo.dst = rpdev->dst;
	strscpy(chinfo.name, cdx_rpmsg_id_table[0].name,
		strlen(cdx_rpmsg_id_table[0].name));
	strscpy(chinfo.name, cdx_rpmsg_id_table[0].name, sizeof(chinfo.name));

	cdx_mcdi->ept = rpmsg_create_ept(rpdev, cdx_rpmsg_cb, NULL, chinfo);
	if (!cdx_mcdi->ept) {
+5 −0
Original line number Diff line number Diff line
@@ -1587,6 +1587,9 @@ static int do_insnlist_ioctl(struct comedi_device *dev,
				memset(&data[n], 0, (MIN_SAMPLES - n) *
						    sizeof(unsigned int));
			}
		} else {
			memset(data, 0, max_t(unsigned int, n, MIN_SAMPLES) *
					sizeof(unsigned int));
		}
		ret = parse_insn(dev, insns + i, data, file);
		if (ret < 0)
@@ -1670,6 +1673,8 @@ static int do_insn_ioctl(struct comedi_device *dev,
			memset(&data[insn->n], 0,
			       (MIN_SAMPLES - insn->n) * sizeof(unsigned int));
		}
	} else {
		memset(data, 0, n_data * sizeof(unsigned int));
	}
	ret = parse_insn(dev, insn, data, file);
	if (ret < 0)
+12 −11
Original line number Diff line number Diff line
@@ -620,11 +620,9 @@ static int insn_rw_emulate_bits(struct comedi_device *dev,
	unsigned int chan = CR_CHAN(insn->chanspec);
	unsigned int base_chan = (chan < 32) ? 0 : chan;
	unsigned int _data[2];
	unsigned int i;
	int ret;

	if (insn->n == 0)
		return 0;

	memset(_data, 0, sizeof(_data));
	memset(&_insn, 0, sizeof(_insn));
	_insn.insn = INSN_BITS;
@@ -636,17 +634,20 @@ static int insn_rw_emulate_bits(struct comedi_device *dev,
		if (!(s->subdev_flags & SDF_WRITABLE))
			return -EINVAL;
		_data[0] = 1U << (chan - base_chan);		/* mask */
		_data[1] = data[0] ? (1U << (chan - base_chan)) : 0; /* bits */
	}
	for (i = 0; i < insn->n; i++) {
		if (insn->insn == INSN_WRITE)
			_data[1] = data[i] ? _data[0] : 0;	/* bits */

		ret = s->insn_bits(dev, s, &_insn, _data);
		if (ret < 0)
			return ret;

		if (insn->insn == INSN_READ)
		data[0] = (_data[1] >> (chan - base_chan)) & 1;
			data[i] = (_data[1] >> (chan - base_chan)) & 1;
	}

	return 1;
	return insn->n;
}

static int __comedi_device_postconfig_async(struct comedi_device *dev,
+2 −1
Original line number Diff line number Diff line
@@ -328,7 +328,8 @@ static int pcl726_attach(struct comedi_device *dev,
	 * Hook up the external trigger source interrupt only if the
	 * user config option is valid and the board supports interrupts.
	 */
	if (it->options[1] && (board->irq_mask & (1 << it->options[1]))) {
	if (it->options[1] > 0 && it->options[1] < 16 &&
	    (board->irq_mask & (1U << it->options[1]))) {
		ret = request_irq(it->options[1], pcl726_interrupt, 0,
				  dev->board_name, dev);
		if (ret == 0) {
+4 −4
Original line number Diff line number Diff line
@@ -405,12 +405,12 @@ static int zynq_fpga_ops_write(struct fpga_manager *mgr, struct sg_table *sgt)
		}
	}

	priv->dma_nelms =
	    dma_map_sgtable(mgr->dev.parent, sgt, DMA_TO_DEVICE, 0);
	if (priv->dma_nelms == 0) {
	err = dma_map_sgtable(mgr->dev.parent, sgt, DMA_TO_DEVICE, 0);
	if (err) {
		dev_err(&mgr->dev, "Unable to DMA map (TO_DEVICE)\n");
		return -ENOMEM;
		return err;
	}
	priv->dma_nelms = sgt->nents;

	/* enable clock */
	err = clk_enable(priv->clk);
Loading