Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 00243b1d authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge tag 'iio-fixes-for-4.2c' of...

Merge tag 'iio-fixes-for-4.2c' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-linus

Jonathan writes:

3rd round of IIO fixes for the 4.2 cycle.

* bmc150_magn - add missing regmap dependency and ensure on a wrong chip
  case report hte chip id rather than a previous return value.
* mmc35240 - Fill a null pointer derefrence and wrong SET / RESET logic
  that results in North and South being swapped.
* mlx96014 - correct the offset value reported to userspace (wrong sign)
* vf610 - Prevent non aligned register reading.
* mcp320x - Another null pointer deference bug.
* mma8452 - change threshold type from THRESH to MAG to reflect the fact
  that the sign of the signal is not known when the event is signaled.
* stk3310 - move device registert to end of probe to avoid race conditions
  when coming up, check for invalid client->irq values and make it work
  for both endian types of host.
parents 52721d9d 423ad0c4
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -557,21 +557,21 @@ static void mma8452_transient_interrupt(struct iio_dev *indio_dev)
	if (src & MMA8452_TRANSIENT_SRC_XTRANSE)
	if (src & MMA8452_TRANSIENT_SRC_XTRANSE)
		iio_push_event(indio_dev,
		iio_push_event(indio_dev,
			       IIO_MOD_EVENT_CODE(IIO_ACCEL, 0, IIO_MOD_X,
			       IIO_MOD_EVENT_CODE(IIO_ACCEL, 0, IIO_MOD_X,
						  IIO_EV_TYPE_THRESH,
						  IIO_EV_TYPE_MAG,
						  IIO_EV_DIR_RISING),
						  IIO_EV_DIR_RISING),
			       ts);
			       ts);


	if (src & MMA8452_TRANSIENT_SRC_YTRANSE)
	if (src & MMA8452_TRANSIENT_SRC_YTRANSE)
		iio_push_event(indio_dev,
		iio_push_event(indio_dev,
			       IIO_MOD_EVENT_CODE(IIO_ACCEL, 0, IIO_MOD_Y,
			       IIO_MOD_EVENT_CODE(IIO_ACCEL, 0, IIO_MOD_Y,
						  IIO_EV_TYPE_THRESH,
						  IIO_EV_TYPE_MAG,
						  IIO_EV_DIR_RISING),
						  IIO_EV_DIR_RISING),
			       ts);
			       ts);


	if (src & MMA8452_TRANSIENT_SRC_ZTRANSE)
	if (src & MMA8452_TRANSIENT_SRC_ZTRANSE)
		iio_push_event(indio_dev,
		iio_push_event(indio_dev,
			       IIO_MOD_EVENT_CODE(IIO_ACCEL, 0, IIO_MOD_Z,
			       IIO_MOD_EVENT_CODE(IIO_ACCEL, 0, IIO_MOD_Z,
						  IIO_EV_TYPE_THRESH,
						  IIO_EV_TYPE_MAG,
						  IIO_EV_DIR_RISING),
						  IIO_EV_DIR_RISING),
			       ts);
			       ts);
}
}
@@ -644,7 +644,7 @@ static int mma8452_reg_access_dbg(struct iio_dev *indio_dev,


static const struct iio_event_spec mma8452_transient_event[] = {
static const struct iio_event_spec mma8452_transient_event[] = {
	{
	{
		.type = IIO_EV_TYPE_THRESH,
		.type = IIO_EV_TYPE_MAG,
		.dir = IIO_EV_DIR_RISING,
		.dir = IIO_EV_DIR_RISING,
		.mask_separate = BIT(IIO_EV_INFO_ENABLE),
		.mask_separate = BIT(IIO_EV_INFO_ENABLE),
		.mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) |
		.mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) |
+2 −0
Original line number Original line Diff line number Diff line
@@ -299,6 +299,8 @@ static int mcp320x_probe(struct spi_device *spi)
	indio_dev->channels = chip_info->channels;
	indio_dev->channels = chip_info->channels;
	indio_dev->num_channels = chip_info->num_channels;
	indio_dev->num_channels = chip_info->num_channels;


	adc->chip_info = chip_info;

	adc->transfer[0].tx_buf = &adc->tx_buf;
	adc->transfer[0].tx_buf = &adc->tx_buf;
	adc->transfer[0].len = sizeof(adc->tx_buf);
	adc->transfer[0].len = sizeof(adc->tx_buf);
	adc->transfer[1].rx_buf = adc->rx_buf;
	adc->transfer[1].rx_buf = adc->rx_buf;
+1 −1
Original line number Original line Diff line number Diff line
@@ -635,7 +635,7 @@ static int vf610_adc_reg_access(struct iio_dev *indio_dev,
	struct vf610_adc *info = iio_priv(indio_dev);
	struct vf610_adc *info = iio_priv(indio_dev);


	if ((readval == NULL) ||
	if ((readval == NULL) ||
		(!(reg % 4) || (reg > VF610_REG_ADC_PCTL)))
		((reg % 4) || (reg > VF610_REG_ADC_PCTL)))
		return -EINVAL;
		return -EINVAL;


	*readval = readl(info->regs + reg);
	*readval = readl(info->regs + reg);
+13 −13
Original line number Original line Diff line number Diff line
@@ -200,7 +200,7 @@ static int stk3310_read_event(struct iio_dev *indio_dev,
			      int *val, int *val2)
			      int *val, int *val2)
{
{
	u8 reg;
	u8 reg;
	u16 buf;
	__be16 buf;
	int ret;
	int ret;
	struct stk3310_data *data = iio_priv(indio_dev);
	struct stk3310_data *data = iio_priv(indio_dev);


@@ -222,7 +222,7 @@ static int stk3310_read_event(struct iio_dev *indio_dev,
		dev_err(&data->client->dev, "register read failed\n");
		dev_err(&data->client->dev, "register read failed\n");
		return ret;
		return ret;
	}
	}
	*val = swab16(buf);
	*val = be16_to_cpu(buf);


	return IIO_VAL_INT;
	return IIO_VAL_INT;
}
}
@@ -235,7 +235,7 @@ static int stk3310_write_event(struct iio_dev *indio_dev,
			       int val, int val2)
			       int val, int val2)
{
{
	u8 reg;
	u8 reg;
	u16 buf;
	__be16 buf;
	int ret;
	int ret;
	unsigned int index;
	unsigned int index;
	struct stk3310_data *data = iio_priv(indio_dev);
	struct stk3310_data *data = iio_priv(indio_dev);
@@ -252,7 +252,7 @@ static int stk3310_write_event(struct iio_dev *indio_dev,
	else
	else
		return -EINVAL;
		return -EINVAL;


	buf = swab16(val);
	buf = cpu_to_be16(val);
	ret = regmap_bulk_write(data->regmap, reg, &buf, 2);
	ret = regmap_bulk_write(data->regmap, reg, &buf, 2);
	if (ret < 0)
	if (ret < 0)
		dev_err(&client->dev, "failed to set PS threshold!\n");
		dev_err(&client->dev, "failed to set PS threshold!\n");
@@ -301,7 +301,7 @@ static int stk3310_read_raw(struct iio_dev *indio_dev,
			    int *val, int *val2, long mask)
			    int *val, int *val2, long mask)
{
{
	u8 reg;
	u8 reg;
	u16 buf;
	__be16 buf;
	int ret;
	int ret;
	unsigned int index;
	unsigned int index;
	struct stk3310_data *data = iio_priv(indio_dev);
	struct stk3310_data *data = iio_priv(indio_dev);
@@ -322,7 +322,7 @@ static int stk3310_read_raw(struct iio_dev *indio_dev,
			mutex_unlock(&data->lock);
			mutex_unlock(&data->lock);
			return ret;
			return ret;
		}
		}
		*val = swab16(buf);
		*val = be16_to_cpu(buf);
		mutex_unlock(&data->lock);
		mutex_unlock(&data->lock);
		return IIO_VAL_INT;
		return IIO_VAL_INT;
	case IIO_CHAN_INFO_INT_TIME:
	case IIO_CHAN_INFO_INT_TIME:
@@ -608,13 +608,7 @@ static int stk3310_probe(struct i2c_client *client,
	if (ret < 0)
	if (ret < 0)
		return ret;
		return ret;


	ret = iio_device_register(indio_dev);
	if (client->irq < 0)
	if (ret < 0) {
		dev_err(&client->dev, "device_register failed\n");
		stk3310_set_state(data, STK3310_STATE_STANDBY);
	}

	if (client->irq <= 0)
		client->irq = stk3310_gpio_probe(client);
		client->irq = stk3310_gpio_probe(client);


	if (client->irq >= 0) {
	if (client->irq >= 0) {
@@ -629,6 +623,12 @@ static int stk3310_probe(struct i2c_client *client,
					client->irq);
					client->irq);
	}
	}


	ret = iio_device_register(indio_dev);
	if (ret < 0) {
		dev_err(&client->dev, "device_register failed\n");
		stk3310_set_state(data, STK3310_STATE_STANDBY);
	}

	return ret;
	return ret;
}
}


+1 −0
Original line number Original line Diff line number Diff line
@@ -90,6 +90,7 @@ config IIO_ST_MAGN_SPI_3AXIS
config BMC150_MAGN
config BMC150_MAGN
	tristate "Bosch BMC150 Magnetometer Driver"
	tristate "Bosch BMC150 Magnetometer Driver"
	depends on I2C
	depends on I2C
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	help
Loading