Commit 6e6df270 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge tag 'iio-fixes-for-6.1d' of...

Merge tag 'iio-fixes-for-6.1d' of https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into char-misc-next

Jonathan writes:

4th set of IIO fixes for 6.1

Single patch fixing a memory leak in an error path.
Fine to queue either for 6.2 if too late for 6.1

* tag 'iio-fixes-for-6.1d' of https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio:
  iio: fix memory leak in iio_device_register_eventset()
  dt-bindings: iio: adc: Remove the property "aspeed,trim-data-valid"
  iio: adc: aspeed: Remove the trim valid dts property.
  iio: core: Fix entry not deleted when iio_register_sw_trigger_type() fails
  iio: accel: bma400: Fix memory leak in bma400_get_steps_reg()
  iio: light: rpr0521: add missing Kconfig dependencies
  iio: health: afe4404: Fix oob read in afe4404_[read|write]_raw
  iio: health: afe4403: Fix oob read in afe4403_read_raw
  iio: light: apds9960: fix wrong register for gesture gain
parents 75621ae3 86fdd15e
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -62,13 +62,6 @@ properties:
    description:
      Inform the driver that last channel will be used to sensor battery.

  aspeed,trim-data-valid:
    type: boolean
    description: |
      The ADC reference voltage can be calibrated to obtain the trimming
      data which will be stored in otp. This property informs the driver that
      the data store in the otp is valid.

required:
  - compatible
  - reg
+3 −1
Original line number Diff line number Diff line
@@ -805,8 +805,10 @@ static int bma400_get_steps_reg(struct bma400_data *data, int *val)

	ret = regmap_bulk_read(data->regmap, BMA400_STEP_CNT0_REG,
			       steps_raw, BMA400_STEP_RAW_LEN);
	if (ret)
	if (ret) {
		kfree(steps_raw);
		return ret;
	}
	*val = get_unaligned_le24(steps_raw);
	kfree(steps_raw);
	return IIO_VAL_INT;
+5 −6
Original line number Diff line number Diff line
@@ -202,6 +202,8 @@ static int aspeed_adc_set_trim_data(struct iio_dev *indio_dev)
				((scu_otp) &
				 (data->model_data->trim_locate->field)) >>
				__ffs(data->model_data->trim_locate->field);
			if (!trimming_val)
				trimming_val = 0x8;
		}
		dev_dbg(data->dev,
			"trimming val = %d, offset = %08x, fields = %08x\n",
@@ -563,12 +565,9 @@ static int aspeed_adc_probe(struct platform_device *pdev)
	if (ret)
		return ret;

	if (of_find_property(data->dev->of_node, "aspeed,trim-data-valid",
			     NULL)) {
	ret = aspeed_adc_set_trim_data(indio_dev);
	if (ret)
		return ret;
	}

	if (of_find_property(data->dev->of_node, "aspeed,battery-sensing",
			     NULL)) {
+3 −2
Original line number Diff line number Diff line
@@ -245,14 +245,14 @@ static int afe4403_read_raw(struct iio_dev *indio_dev,
			    int *val, int *val2, long mask)
{
	struct afe4403_data *afe = iio_priv(indio_dev);
	unsigned int reg = afe4403_channel_values[chan->address];
	unsigned int field = afe4403_channel_leds[chan->address];
	unsigned int reg, field;
	int ret;

	switch (chan->type) {
	case IIO_INTENSITY:
		switch (mask) {
		case IIO_CHAN_INFO_RAW:
			reg = afe4403_channel_values[chan->address];
			ret = afe4403_read(afe, reg, val);
			if (ret)
				return ret;
@@ -262,6 +262,7 @@ static int afe4403_read_raw(struct iio_dev *indio_dev,
	case IIO_CURRENT:
		switch (mask) {
		case IIO_CHAN_INFO_RAW:
			field = afe4403_channel_leds[chan->address];
			ret = regmap_field_read(afe->fields[field], val);
			if (ret)
				return ret;
+7 −5
Original line number Diff line number Diff line
@@ -250,20 +250,20 @@ static int afe4404_read_raw(struct iio_dev *indio_dev,
			    int *val, int *val2, long mask)
{
	struct afe4404_data *afe = iio_priv(indio_dev);
	unsigned int value_reg = afe4404_channel_values[chan->address];
	unsigned int led_field = afe4404_channel_leds[chan->address];
	unsigned int offdac_field = afe4404_channel_offdacs[chan->address];
	unsigned int value_reg, led_field, offdac_field;
	int ret;

	switch (chan->type) {
	case IIO_INTENSITY:
		switch (mask) {
		case IIO_CHAN_INFO_RAW:
			value_reg = afe4404_channel_values[chan->address];
			ret = regmap_read(afe->regmap, value_reg, val);
			if (ret)
				return ret;
			return IIO_VAL_INT;
		case IIO_CHAN_INFO_OFFSET:
			offdac_field = afe4404_channel_offdacs[chan->address];
			ret = regmap_field_read(afe->fields[offdac_field], val);
			if (ret)
				return ret;
@@ -273,6 +273,7 @@ static int afe4404_read_raw(struct iio_dev *indio_dev,
	case IIO_CURRENT:
		switch (mask) {
		case IIO_CHAN_INFO_RAW:
			led_field = afe4404_channel_leds[chan->address];
			ret = regmap_field_read(afe->fields[led_field], val);
			if (ret)
				return ret;
@@ -295,19 +296,20 @@ static int afe4404_write_raw(struct iio_dev *indio_dev,
			     int val, int val2, long mask)
{
	struct afe4404_data *afe = iio_priv(indio_dev);
	unsigned int led_field = afe4404_channel_leds[chan->address];
	unsigned int offdac_field = afe4404_channel_offdacs[chan->address];
	unsigned int led_field, offdac_field;

	switch (chan->type) {
	case IIO_INTENSITY:
		switch (mask) {
		case IIO_CHAN_INFO_OFFSET:
			offdac_field = afe4404_channel_offdacs[chan->address];
			return regmap_field_write(afe->fields[offdac_field], val);
		}
		break;
	case IIO_CURRENT:
		switch (mask) {
		case IIO_CHAN_INFO_RAW:
			led_field = afe4404_channel_leds[chan->address];
			return regmap_field_write(afe->fields[led_field], val);
		}
		break;
Loading