Commit f4d7f883 authored by Miquel Raynal's avatar Miquel Raynal Committed by Jonathan Cameron
Browse files

iio: magnetometer: rm3100: Stop abusing the ->currentmode



This is an internal variable for the core, here it is set to a "default"
value by the driver in order to later be able to perform checks against
it. None of this is needed because this check actually cares about the
buffers being enabled or not. So it is an unproper side-channel access
to the information "are the buffers enabled?", returned officially by
the iio_buffer_enabled() helper. Use this helper instead.

Cc: Song Qiang <songqiang1304521@gmail.com>
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/r/20220207143840.707510-3-miquel.raynal@bootlin.com


Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent a8b6d670
Loading
Loading
Loading
Loading
+3 −12
Original line number Original line Diff line number Diff line
@@ -141,18 +141,10 @@ static irqreturn_t rm3100_irq_handler(int irq, void *d)
	struct iio_dev *indio_dev = d;
	struct iio_dev *indio_dev = d;
	struct rm3100_data *data = iio_priv(indio_dev);
	struct rm3100_data *data = iio_priv(indio_dev);


	switch (indio_dev->currentmode) {
	if (!iio_buffer_enabled(indio_dev))
	case INDIO_DIRECT_MODE:
		complete(&data->measuring_done);
		complete(&data->measuring_done);
		break;
	else
	case INDIO_BUFFER_TRIGGERED:
		iio_trigger_poll(data->drdy_trig);
		iio_trigger_poll(data->drdy_trig);
		break;
	default:
		dev_err(indio_dev->dev.parent,
			"device mode out of control, current mode: %d",
			indio_dev->currentmode);
	}


	return IRQ_WAKE_THREAD;
	return IRQ_WAKE_THREAD;
}
}
@@ -377,7 +369,7 @@ static int rm3100_set_samp_freq(struct iio_dev *indio_dev, int val, int val2)
			goto unlock_return;
			goto unlock_return;
	}
	}


	if (indio_dev->currentmode == INDIO_BUFFER_TRIGGERED) {
	if (iio_buffer_enabled(indio_dev)) {
		/* Writing TMRC registers requires CMM reset. */
		/* Writing TMRC registers requires CMM reset. */
		ret = regmap_write(regmap, RM3100_REG_CMM, 0);
		ret = regmap_write(regmap, RM3100_REG_CMM, 0);
		if (ret < 0)
		if (ret < 0)
@@ -553,7 +545,6 @@ int rm3100_common_probe(struct device *dev, struct regmap *regmap, int irq)
	indio_dev->channels = rm3100_channels;
	indio_dev->channels = rm3100_channels;
	indio_dev->num_channels = ARRAY_SIZE(rm3100_channels);
	indio_dev->num_channels = ARRAY_SIZE(rm3100_channels);
	indio_dev->modes = INDIO_DIRECT_MODE | INDIO_BUFFER_TRIGGERED;
	indio_dev->modes = INDIO_DIRECT_MODE | INDIO_BUFFER_TRIGGERED;
	indio_dev->currentmode = INDIO_DIRECT_MODE;


	if (!irq)
	if (!irq)
		data->use_interrupt = false;
		data->use_interrupt = false;