Staging/IIO driver fixes for 4.6-rc7
Well, 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. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEABECAAYFAlcuKBgACgkQMUfUDdst+ynALgCgh4QWOZ/vnLQvx/r1ZOIW1xqm QdAAn1eJ1/KzwbM+WmmfXu1dKykfs7YS =tGM3 -----END PGP SIGNATURE----- Merge tag 'staging-4.6-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging 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
This commit is contained in:
commit
630aac5ab6
4 changed files with 34 additions and 7 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue