NAK: [PATCH 2/3][Xenial SRU]UBUNTU: SAUCE: iio: st_accel: Support sensor i2c probe using acpi

Luis Henriques luis.henriques at canonical.com
Mon Dec 19 18:41:03 UTC 2016


On Thu, Dec 15, 2016 at 06:18:33PM +0800, Shrirang Bagul wrote:
> BugLink: http://bugs.launchpad.net/bugs/1650123
> 
> Add support to probe st_accel sensors on i2c bus using ACPI. Compatible
> strings are not avaialable on ACPI based systems.
>

This patch does not apply.  Please re-submit.  And note that SRU cycle
*has* already started, so please make sure you submit it quickly!

Cheers,
--
Luís


> Signed-off-by: Shrirang Bagul <shrirang.bagul at canonical.com>
> Signed-off-by: Jonathan Cameron <jic23 at kernel.org>
> (cherry picked from commit 89a2a93f3bf1e0d3168d454fe7fa207be981cb83)
> (source: git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git)
> Signed-off-by: Shrirang Bagul <shrirang.bagul at canonical.com>
> ---
>  drivers/iio/accel/st_accel.h     | 19 +++++++++++
>  drivers/iio/accel/st_accel_i2c.c | 73 +++++++++++++++++++++++++++-------------
>  2 files changed, 68 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/iio/accel/st_accel.h b/drivers/iio/accel/st_accel.h
> index 25ea008..3ad44ce 100644
> --- a/drivers/iio/accel/st_accel.h
> +++ b/drivers/iio/accel/st_accel.h
> @@ -14,6 +14,25 @@
>  #include <linux/types.h>
>  #include <linux/iio/common/st_sensors.h>
>  
> +enum st_accel_type {
> +	LSM303DLH,
> +	LSM303DLHC,
> +	LIS3DH,
> +	LSM330D,
> +	LSM330DL,
> +	LSM330DLC,
> +	LIS331DLH,
> +	LSM303DL,
> +	LSM303DLM,
> +	LSM330,
> +	LSM303AGR,
> +	LIS2DH12,
> +	LIS3L02DQ,
> +	LNG2DM,
> +	ST_ACCEL_MAX,
> +};
> +
> +#define H3LIS331DL_DRIVER_NAME		"h3lis331dl_accel"
>  #define LIS3LV02DL_ACCEL_DEV_NAME	"lis3lv02dl_accel"
>  #define LSM303DLHC_ACCEL_DEV_NAME	"lsm303dlhc_accel"
>  #define LIS3DH_ACCEL_DEV_NAME		"lis3dh"
> diff --git a/drivers/iio/accel/st_accel_i2c.c b/drivers/iio/accel/st_accel_i2c.c
> index c0f8867..2840649 100644
> --- a/drivers/iio/accel/st_accel_i2c.c
> +++ b/drivers/iio/accel/st_accel_i2c.c
> @@ -11,6 +11,7 @@
>  #include <linux/kernel.h>
>  #include <linux/module.h>
>  #include <linux/slab.h>
> +#include <linux/acpi.h>
>  #include <linux/i2c.h>
>  #include <linux/iio/iio.h>
>  
> @@ -95,25 +96,67 @@ MODULE_DEVICE_TABLE(of, st_accel_of_match);
>  #define st_accel_of_match NULL
>  #endif
>  
> +#ifdef CONFIG_ACPI
> +static const struct acpi_device_id st_accel_acpi_match[] = {
> +	{"SMO8A90", LNG2DM},
> +	{ },
> +};
> +MODULE_DEVICE_TABLE(acpi, st_accel_acpi_match);
> +#else
> +#define st_accel_acpi_match NULL
> +#endif
> +
> +static const struct i2c_device_id st_accel_id_table[] = {
> +	{ LSM303DLH_ACCEL_DEV_NAME, LSM303DLH },
> +	{ LSM303DLHC_ACCEL_DEV_NAME, LSM303DLHC },
> +	{ LIS3DH_ACCEL_DEV_NAME, LIS3DH },
> +	{ LSM330D_ACCEL_DEV_NAME, LSM330D },
> +	{ LSM330DL_ACCEL_DEV_NAME, LSM330DL },
> +	{ LSM330DLC_ACCEL_DEV_NAME, LSM330DLC },
> +	{ LIS331DLH_ACCEL_DEV_NAME, LIS331DLH },
> +	{ LSM303DL_ACCEL_DEV_NAME, LSM303DL },
> +	{ LSM303DLM_ACCEL_DEV_NAME, LSM303DLM },
> +	{ LSM330_ACCEL_DEV_NAME, LSM330 },
> +	{ LSM303AGR_ACCEL_DEV_NAME, LSM303AGR },
> +	{ LIS2DH12_ACCEL_DEV_NAME, LIS2DH12 },
> +	{ LIS3L02DQ_ACCEL_DEV_NAME, LIS3L02DQ },
> +	{ LNG2DM_ACCEL_DEV_NAME, LNG2DM },
> +	{},
> +};
> +MODULE_DEVICE_TABLE(i2c, st_accel_id_table);
> +
>  static int st_accel_i2c_probe(struct i2c_client *client,
>  						const struct i2c_device_id *id)
>  {
>  	struct iio_dev *indio_dev;
>  	struct st_sensor_data *adata;
> -	int err;
> +	int ret;
>  
>  	indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*adata));
>  	if (!indio_dev)
>  		return -ENOMEM;
>  
>  	adata = iio_priv(indio_dev);
> -	st_sensors_of_i2c_probe(client, st_accel_of_match);
> +
> +	if (client->dev.of_node) {
> +		st_sensors_of_i2c_probe(client, st_accel_of_match);
> +	} else if (ACPI_HANDLE(&client->dev)) {
> +		ret = st_sensors_match_acpi_device(&client->dev);
> +		if ((ret < 0) || (ret >= ST_ACCEL_MAX))
> +			return -ENODEV;
> +
> +		strncpy(client->name, st_accel_id_table[ret].name,
> +				sizeof(client->name));
> +		client->name[sizeof(client->name) - 1] = '\0';
> +	} else if (!id)
> +		return -ENODEV;
> +
>  
>  	st_sensors_i2c_configure(indio_dev, client, adata);
>  
> -	err = st_accel_common_probe(indio_dev);
> -	if (err < 0)
> -		return err;
> +	ret = st_accel_common_probe(indio_dev);
> +	if (ret < 0)
> +		return ret;
>  
>  	return 0;
>  }
> @@ -125,29 +168,11 @@ static int st_accel_i2c_remove(struct i2c_client *client)
>  	return 0;
>  }
>  
> -static const struct i2c_device_id st_accel_id_table[] = {
> -	{ LSM303DLH_ACCEL_DEV_NAME },
> -	{ LSM303DLHC_ACCEL_DEV_NAME },
> -	{ LIS3DH_ACCEL_DEV_NAME },
> -	{ LSM330D_ACCEL_DEV_NAME },
> -	{ LSM330DL_ACCEL_DEV_NAME },
> -	{ LSM330DLC_ACCEL_DEV_NAME },
> -	{ LIS331DLH_ACCEL_DEV_NAME },
> -	{ LSM303DL_ACCEL_DEV_NAME },
> -	{ LSM303DLM_ACCEL_DEV_NAME },
> -	{ LSM330_ACCEL_DEV_NAME },
> -	{ LSM303AGR_ACCEL_DEV_NAME },
> -	{ LIS2DH12_ACCEL_DEV_NAME },
> -	{ LIS3L02DQ_ACCEL_DEV_NAME },
> -	{ LNG2DM_ACCEL_DEV_NAME },
> -	{},
> -};
> -MODULE_DEVICE_TABLE(i2c, st_accel_id_table);
> -
>  static struct i2c_driver st_accel_driver = {
>  	.driver = {
>  		.name = "st-accel-i2c",
>  		.of_match_table = of_match_ptr(st_accel_of_match),
> +		.acpi_match_table = ACPI_PTR(st_accel_acpi_match),
>  	},
>  	.probe = st_accel_i2c_probe,
>  	.remove = st_accel_i2c_remove,
> -- 
> 2.9.3
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team




More information about the kernel-team mailing list