Ver código fonte

Merge tag 'staging-3.15-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging

Pull staging / iio fixes from Greg KH:
 "Here are some small IIO driver fixes for 3.15-rc4 that resolve some
  reported issues"

* tag 'staging-3.15-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging:
  iio: adc: Nothing in ADC should be a bool CONFIG
  iio: exynos_adc: use indio_dev->dev structure to handle child nodes
  iio:imu:mpu6050: Fixed segfault in Invensens MPU driver due to null dereference
  staging:iio:ad2s1200 fix missing parenthesis in a for statment.
Linus Torvalds 11 anos atrás
pai
commit
a1e74464ff

+ 2 - 2
drivers/iio/adc/Kconfig

@@ -106,7 +106,7 @@ config AT91_ADC
 	  Say yes here to build support for Atmel AT91 ADC.
 	  Say yes here to build support for Atmel AT91 ADC.
 
 
 config EXYNOS_ADC
 config EXYNOS_ADC
-	bool "Exynos ADC driver support"
+	tristate "Exynos ADC driver support"
 	depends on OF
 	depends on OF
 	help
 	help
 	  Core support for the ADC block found in the Samsung EXYNOS series
 	  Core support for the ADC block found in the Samsung EXYNOS series
@@ -114,7 +114,7 @@ config EXYNOS_ADC
 	  this resource.
 	  this resource.
 
 
 config LP8788_ADC
 config LP8788_ADC
-	bool "LP8788 ADC driver"
+	tristate "LP8788 ADC driver"
 	depends on MFD_LP8788
 	depends on MFD_LP8788
 	help
 	help
 	  Say yes here to build support for TI LP8788 ADC.
 	  Say yes here to build support for TI LP8788 ADC.

+ 3 - 3
drivers/iio/adc/exynos_adc.c

@@ -344,7 +344,7 @@ static int exynos_adc_probe(struct platform_device *pdev)
 
 
 	exynos_adc_hw_init(info);
 	exynos_adc_hw_init(info);
 
 
-	ret = of_platform_populate(np, exynos_adc_match, NULL, &pdev->dev);
+	ret = of_platform_populate(np, exynos_adc_match, NULL, &indio_dev->dev);
 	if (ret < 0) {
 	if (ret < 0) {
 		dev_err(&pdev->dev, "failed adding child nodes\n");
 		dev_err(&pdev->dev, "failed adding child nodes\n");
 		goto err_of_populate;
 		goto err_of_populate;
@@ -353,7 +353,7 @@ static int exynos_adc_probe(struct platform_device *pdev)
 	return 0;
 	return 0;
 
 
 err_of_populate:
 err_of_populate:
-	device_for_each_child(&pdev->dev, NULL,
+	device_for_each_child(&indio_dev->dev, NULL,
 				exynos_adc_remove_devices);
 				exynos_adc_remove_devices);
 	regulator_disable(info->vdd);
 	regulator_disable(info->vdd);
 	clk_disable_unprepare(info->clk);
 	clk_disable_unprepare(info->clk);
@@ -369,7 +369,7 @@ static int exynos_adc_remove(struct platform_device *pdev)
 	struct iio_dev *indio_dev = platform_get_drvdata(pdev);
 	struct iio_dev *indio_dev = platform_get_drvdata(pdev);
 	struct exynos_adc *info = iio_priv(indio_dev);
 	struct exynos_adc *info = iio_priv(indio_dev);
 
 
-	device_for_each_child(&pdev->dev, NULL,
+	device_for_each_child(&indio_dev->dev, NULL,
 				exynos_adc_remove_devices);
 				exynos_adc_remove_devices);
 	regulator_disable(info->vdd);
 	regulator_disable(info->vdd);
 	clk_disable_unprepare(info->clk);
 	clk_disable_unprepare(info->clk);

+ 5 - 2
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c

@@ -660,6 +660,7 @@ static int inv_mpu_probe(struct i2c_client *client,
 {
 {
 	struct inv_mpu6050_state *st;
 	struct inv_mpu6050_state *st;
 	struct iio_dev *indio_dev;
 	struct iio_dev *indio_dev;
+	struct inv_mpu6050_platform_data *pdata;
 	int result;
 	int result;
 
 
 	if (!i2c_check_functionality(client->adapter,
 	if (!i2c_check_functionality(client->adapter,
@@ -672,8 +673,10 @@ static int inv_mpu_probe(struct i2c_client *client,
 
 
 	st = iio_priv(indio_dev);
 	st = iio_priv(indio_dev);
 	st->client = client;
 	st->client = client;
-	st->plat_data = *(struct inv_mpu6050_platform_data
-				*)dev_get_platdata(&client->dev);
+	pdata = (struct inv_mpu6050_platform_data
+			*)dev_get_platdata(&client->dev);
+	if (pdata)
+		st->plat_data = *pdata;
 	/* power is turned on inside check chip type*/
 	/* power is turned on inside check chip type*/
 	result = inv_check_and_setup_chip(st, id);
 	result = inv_check_and_setup_chip(st, id);
 	if (result)
 	if (result)

+ 2 - 1
drivers/staging/iio/resolver/ad2s1200.c

@@ -107,7 +107,7 @@ static int ad2s1200_probe(struct spi_device *spi)
 	int pn, ret = 0;
 	int pn, ret = 0;
 	unsigned short *pins = spi->dev.platform_data;
 	unsigned short *pins = spi->dev.platform_data;
 
 
-	for (pn = 0; pn < AD2S1200_PN; pn++)
+	for (pn = 0; pn < AD2S1200_PN; pn++) {
 		ret = devm_gpio_request_one(&spi->dev, pins[pn], GPIOF_DIR_OUT,
 		ret = devm_gpio_request_one(&spi->dev, pins[pn], GPIOF_DIR_OUT,
 					    DRV_NAME);
 					    DRV_NAME);
 		if (ret) {
 		if (ret) {
@@ -115,6 +115,7 @@ static int ad2s1200_probe(struct spi_device *spi)
 							pins[pn]);
 							pins[pn]);
 			return ret;
 			return ret;
 		}
 		}
+	}
 	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
 	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
 	if (!indio_dev)
 	if (!indio_dev)
 		return -ENOMEM;
 		return -ENOMEM;