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