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

Commit 630aac5a authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull IIO driver fixes from Grek KH:
 "It's really just IIO drivers here, some small fixes that resolve some
  'crash on boot' errors that have shown up in the -rc series, and other
  bugfixes that are required.

  All have been in linux-next with no reported problems"

* tag 'staging-4.6-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging:
  iio: imu: mpu6050: Fix name/chip_id when using ACPI
  iio: imu: mpu6050: fix possible NULL dereferences
  iio:adc:at91-sama5d2: Repair crash on module removal
  iio: ak8975: fix maybe-uninitialized warning
  iio: ak8975: Fix NULL pointer exception on early interrupt
parents 3f8f0cf2 2b86c4a8
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -451,6 +451,8 @@ static int at91_adc_probe(struct platform_device *pdev)
	if (ret)
		goto vref_disable;

	platform_set_drvdata(pdev, indio_dev);

	ret = iio_device_register(indio_dev);
	if (ret < 0)
		goto per_clk_disable_unprepare;
+27 −3
Original line number Diff line number Diff line
@@ -104,6 +104,19 @@ static int inv_mpu6050_deselect_bypass(struct i2c_adapter *adap,
	return 0;
}

static const char *inv_mpu_match_acpi_device(struct device *dev, int *chip_id)
{
	const struct acpi_device_id *id;

	id = acpi_match_device(dev->driver->acpi_match_table, dev);
	if (!id)
		return NULL;

	*chip_id = (int)id->driver_data;

	return dev_name(dev);
}

/**
 *  inv_mpu_probe() - probe function.
 *  @client:          i2c client.
@@ -115,14 +128,25 @@ static int inv_mpu_probe(struct i2c_client *client,
			 const struct i2c_device_id *id)
{
	struct inv_mpu6050_state *st;
	int result;
	const char *name = id ? id->name : NULL;
	int result, chip_type;
	struct regmap *regmap;
	const char *name;

	if (!i2c_check_functionality(client->adapter,
				     I2C_FUNC_SMBUS_I2C_BLOCK))
		return -EOPNOTSUPP;

	if (id) {
		chip_type = (int)id->driver_data;
		name = id->name;
	} else if (ACPI_HANDLE(&client->dev)) {
		name = inv_mpu_match_acpi_device(&client->dev, &chip_type);
		if (!name)
			return -ENODEV;
	} else {
		return -ENOSYS;
	}

	regmap = devm_regmap_init_i2c(client, &inv_mpu_regmap_config);
	if (IS_ERR(regmap)) {
		dev_err(&client->dev, "Failed to register i2c regmap %d\n",
@@ -131,7 +155,7 @@ static int inv_mpu_probe(struct i2c_client *client,
	}

	result = inv_mpu_core_probe(regmap, client->irq, name,
				    NULL, id->driver_data);
				    NULL, chip_type);
	if (result < 0)
		return result;

+2 −1
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ static int inv_mpu_probe(struct spi_device *spi)
	struct regmap *regmap;
	const struct spi_device_id *id = spi_get_device_id(spi);
	const char *name = id ? id->name : NULL;
	const int chip_type = id ? id->driver_data : 0;

	regmap = devm_regmap_init_spi(spi, &inv_mpu_regmap_config);
	if (IS_ERR(regmap)) {
@@ -55,7 +56,7 @@ static int inv_mpu_probe(struct spi_device *spi)
	}

	return inv_mpu_core_probe(regmap, spi->irq, name,
				  inv_mpu_i2c_disable, id->driver_data);
				  inv_mpu_i2c_disable, chip_type);
}

static int inv_mpu_remove(struct spi_device *spi)
+3 −3
Original line number Diff line number Diff line
@@ -462,6 +462,8 @@ static int ak8975_setup_irq(struct ak8975_data *data)
	int rc;
	int irq;

	init_waitqueue_head(&data->data_ready_queue);
	clear_bit(0, &data->flags);
	if (client->irq)
		irq = client->irq;
	else
@@ -477,8 +479,6 @@ static int ak8975_setup_irq(struct ak8975_data *data)
		return rc;
	}

	init_waitqueue_head(&data->data_ready_queue);
	clear_bit(0, &data->flags);
	data->eoc_irq = irq;

	return rc;
@@ -732,7 +732,7 @@ static int ak8975_probe(struct i2c_client *client,
	int eoc_gpio;
	int err;
	const char *name = NULL;
	enum asahi_compass_chipset chipset;
	enum asahi_compass_chipset chipset = AK_MAX_TYPE;

	/* Grab and set up the supplied GPIO. */
	if (client->dev.platform_data)