Re: [PATCH] iio: gyro: bmi055 gyro sensor driver

2014-09-14 Thread Jonathan Cameron
On 02/09/14 11:59, Irina Tirdea wrote:
> Add support for the BMI055 gyroscope sensor. BMI055 is a package
> consisting of an acceleration sensor and a gyroscope. This patch
> adds support for the gyroscope only.
> 
> Spec downloaded from:
> http://ae-bst.resource.bosch.com/media/products/dokumente/bmi055/BST-BMI055-DS000-06.pdf
> 
> The BMI055 gyroscope uses the same register definition as BMG160,
> but does not specify a temp register. However, the temp register
> seems to be working in the same way as for BMG160, so this patch
> does not remove the temp channel for BMI055.
> 
> Signed-off-by: Irina Tirdea 
> Reviewed-by: Srinivas Pandruvada 
I would have slightly preferred this as a two patch series. The first
would do the reworked sections of code, and the second actually add the device.
Still it is pretty simple, so I'll let it go

applied to the togreg branch of iio.git - pushed out initially as testing for 
the
autobuilders to play.

Thanks,

Jonathan
> ---
>  drivers/iio/gyro/Kconfig  |2 +-
>  drivers/iio/gyro/bmg160.c |   39 +++
>  2 files changed, 28 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/iio/gyro/Kconfig b/drivers/iio/gyro/Kconfig
> index d630ae9..b3d0e94 100644
> --- a/drivers/iio/gyro/Kconfig
> +++ b/drivers/iio/gyro/Kconfig
> @@ -56,7 +56,7 @@ config BMG160
>   select IIO_TRIGGERED_BUFFER if IIO_BUFFER
>   help
> Say yes here to build support for Bosch BMG160 Tri-axis Gyro Sensor
> -   driver.
> +   driver. This driver also supports BMI055 gyroscope.
>  
> This driver can also be built as a module.  If so, the module
> will be called bmg160.
> diff --git a/drivers/iio/gyro/bmg160.c b/drivers/iio/gyro/bmg160.c
> index 80f92a6..7524698 100644
> --- a/drivers/iio/gyro/bmg160.c
> +++ b/drivers/iio/gyro/bmg160.c
> @@ -947,10 +947,10 @@ static irqreturn_t bmg160_data_rdy_trig_poll(int irq, 
> void *private)
>  
>  }
>  
> -static int bmg160_acpi_gpio_probe(struct i2c_client *client,
> -   struct bmg160_data *data)
> +static int bmg160_gpio_probe(struct i2c_client *client,
> +  struct bmg160_data *data)
> +
>  {
> - const struct acpi_device_id *id;
>   struct device *dev;
>   struct gpio_desc *gpio;
>   int ret;
> @@ -959,12 +959,6 @@ static int bmg160_acpi_gpio_probe(struct i2c_client 
> *client,
>   return -EINVAL;
>  
>   dev = >dev;
> - if (!ACPI_HANDLE(dev))
> - return -ENODEV;
> -
> - id = acpi_match_device(dev->driver->acpi_match_table, dev);
> - if (!id)
> - return -ENODEV;
>  
>   /* data ready gpio interrupt pin */
>   gpio = devm_gpiod_get_index(dev, BMG160_GPIO_NAME, 0);
> @@ -984,12 +978,24 @@ static int bmg160_acpi_gpio_probe(struct i2c_client 
> *client,
>   return ret;
>  }
>  
> +static const char *bmg160_match_acpi_device(struct device *dev)
> +{
> + const struct acpi_device_id *id;
> +
> + id = acpi_match_device(dev->driver->acpi_match_table, dev);
> + if (!id)
> + return NULL;
> +
> + return dev_name(dev);
> +}
> +
>  static int bmg160_probe(struct i2c_client *client,
>   const struct i2c_device_id *id)
>  {
>   struct bmg160_data *data;
>   struct iio_dev *indio_dev;
>   int ret;
> + const char *name = NULL;
>  
>   indio_dev = devm_iio_device_alloc(>dev, sizeof(*data));
>   if (!indio_dev)
> @@ -1005,15 +1011,21 @@ static int bmg160_probe(struct i2c_client *client,
>  
>   mutex_init(>mutex);
>  
> + if (id)
> + name = id->name;
> +
> + if (ACPI_HANDLE(>dev))
> + name = bmg160_match_acpi_device(>dev);
> +
>   indio_dev->dev.parent = >dev;
>   indio_dev->channels = bmg160_channels;
>   indio_dev->num_channels = ARRAY_SIZE(bmg160_channels);
> - indio_dev->name = BMG160_DRV_NAME;
> + indio_dev->name = name;
>   indio_dev->modes = INDIO_DIRECT_MODE;
>   indio_dev->info = _info;
>  
>   if (client->irq <= 0)
> - client->irq = bmg160_acpi_gpio_probe(client, data);
> + client->irq = bmg160_gpio_probe(client, data);
>  
>   if (client->irq > 0) {
>   ret = devm_request_threaded_irq(>dev,
> @@ -1183,12 +1195,15 @@ static const struct dev_pm_ops bmg160_pm_ops = {
>  
>  static const struct acpi_device_id bmg160_acpi_match[] = {
>   {"BMG0160", 0},
> - { },
> + {"BMI055B", 0},
> + {},
>  };
> +
>  MODULE_DEVICE_TABLE(acpi, bmg160_acpi_match);
>  
>  static const struct i2c_device_id bmg160_id[] = {
>   {"bmg160", 0},
> + {"bmi055_gyro", 0},
>   {}
>  };
>  
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] iio: gyro: bmi055 gyro sensor driver

2014-09-14 Thread Jonathan Cameron
On 02/09/14 11:59, Irina Tirdea wrote:
 Add support for the BMI055 gyroscope sensor. BMI055 is a package
 consisting of an acceleration sensor and a gyroscope. This patch
 adds support for the gyroscope only.
 
 Spec downloaded from:
 http://ae-bst.resource.bosch.com/media/products/dokumente/bmi055/BST-BMI055-DS000-06.pdf
 
 The BMI055 gyroscope uses the same register definition as BMG160,
 but does not specify a temp register. However, the temp register
 seems to be working in the same way as for BMG160, so this patch
 does not remove the temp channel for BMI055.
 
 Signed-off-by: Irina Tirdea irina.tir...@intel.com
 Reviewed-by: Srinivas Pandruvada srinivas.pandruv...@linux.intel.com
I would have slightly preferred this as a two patch series. The first
would do the reworked sections of code, and the second actually add the device.
Still it is pretty simple, so I'll let it go

applied to the togreg branch of iio.git - pushed out initially as testing for 
the
autobuilders to play.

Thanks,

Jonathan
 ---
  drivers/iio/gyro/Kconfig  |2 +-
  drivers/iio/gyro/bmg160.c |   39 +++
  2 files changed, 28 insertions(+), 13 deletions(-)
 
 diff --git a/drivers/iio/gyro/Kconfig b/drivers/iio/gyro/Kconfig
 index d630ae9..b3d0e94 100644
 --- a/drivers/iio/gyro/Kconfig
 +++ b/drivers/iio/gyro/Kconfig
 @@ -56,7 +56,7 @@ config BMG160
   select IIO_TRIGGERED_BUFFER if IIO_BUFFER
   help
 Say yes here to build support for Bosch BMG160 Tri-axis Gyro Sensor
 -   driver.
 +   driver. This driver also supports BMI055 gyroscope.
  
 This driver can also be built as a module.  If so, the module
 will be called bmg160.
 diff --git a/drivers/iio/gyro/bmg160.c b/drivers/iio/gyro/bmg160.c
 index 80f92a6..7524698 100644
 --- a/drivers/iio/gyro/bmg160.c
 +++ b/drivers/iio/gyro/bmg160.c
 @@ -947,10 +947,10 @@ static irqreturn_t bmg160_data_rdy_trig_poll(int irq, 
 void *private)
  
  }
  
 -static int bmg160_acpi_gpio_probe(struct i2c_client *client,
 -   struct bmg160_data *data)
 +static int bmg160_gpio_probe(struct i2c_client *client,
 +  struct bmg160_data *data)
 +
  {
 - const struct acpi_device_id *id;
   struct device *dev;
   struct gpio_desc *gpio;
   int ret;
 @@ -959,12 +959,6 @@ static int bmg160_acpi_gpio_probe(struct i2c_client 
 *client,
   return -EINVAL;
  
   dev = client-dev;
 - if (!ACPI_HANDLE(dev))
 - return -ENODEV;
 -
 - id = acpi_match_device(dev-driver-acpi_match_table, dev);
 - if (!id)
 - return -ENODEV;
  
   /* data ready gpio interrupt pin */
   gpio = devm_gpiod_get_index(dev, BMG160_GPIO_NAME, 0);
 @@ -984,12 +978,24 @@ static int bmg160_acpi_gpio_probe(struct i2c_client 
 *client,
   return ret;
  }
  
 +static const char *bmg160_match_acpi_device(struct device *dev)
 +{
 + const struct acpi_device_id *id;
 +
 + id = acpi_match_device(dev-driver-acpi_match_table, dev);
 + if (!id)
 + return NULL;
 +
 + return dev_name(dev);
 +}
 +
  static int bmg160_probe(struct i2c_client *client,
   const struct i2c_device_id *id)
  {
   struct bmg160_data *data;
   struct iio_dev *indio_dev;
   int ret;
 + const char *name = NULL;
  
   indio_dev = devm_iio_device_alloc(client-dev, sizeof(*data));
   if (!indio_dev)
 @@ -1005,15 +1011,21 @@ static int bmg160_probe(struct i2c_client *client,
  
   mutex_init(data-mutex);
  
 + if (id)
 + name = id-name;
 +
 + if (ACPI_HANDLE(client-dev))
 + name = bmg160_match_acpi_device(client-dev);
 +
   indio_dev-dev.parent = client-dev;
   indio_dev-channels = bmg160_channels;
   indio_dev-num_channels = ARRAY_SIZE(bmg160_channels);
 - indio_dev-name = BMG160_DRV_NAME;
 + indio_dev-name = name;
   indio_dev-modes = INDIO_DIRECT_MODE;
   indio_dev-info = bmg160_info;
  
   if (client-irq = 0)
 - client-irq = bmg160_acpi_gpio_probe(client, data);
 + client-irq = bmg160_gpio_probe(client, data);
  
   if (client-irq  0) {
   ret = devm_request_threaded_irq(client-dev,
 @@ -1183,12 +1195,15 @@ static const struct dev_pm_ops bmg160_pm_ops = {
  
  static const struct acpi_device_id bmg160_acpi_match[] = {
   {BMG0160, 0},
 - { },
 + {BMI055B, 0},
 + {},
  };
 +
  MODULE_DEVICE_TABLE(acpi, bmg160_acpi_match);
  
  static const struct i2c_device_id bmg160_id[] = {
   {bmg160, 0},
 + {bmi055_gyro, 0},
   {}
  };
  
 
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] iio: gyro: bmi055 gyro sensor driver

2014-09-02 Thread Irina Tirdea
Add support for the BMI055 gyroscope sensor. BMI055 is a package
consisting of an acceleration sensor and a gyroscope. This patch
adds support for the gyroscope only.

Spec downloaded from:
http://ae-bst.resource.bosch.com/media/products/dokumente/bmi055/BST-BMI055-DS000-06.pdf

The BMI055 gyroscope uses the same register definition as BMG160,
but does not specify a temp register. However, the temp register
seems to be working in the same way as for BMG160, so this patch
does not remove the temp channel for BMI055.

Signed-off-by: Irina Tirdea 
Reviewed-by: Srinivas Pandruvada 
---
 drivers/iio/gyro/Kconfig  |2 +-
 drivers/iio/gyro/bmg160.c |   39 +++
 2 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/drivers/iio/gyro/Kconfig b/drivers/iio/gyro/Kconfig
index d630ae9..b3d0e94 100644
--- a/drivers/iio/gyro/Kconfig
+++ b/drivers/iio/gyro/Kconfig
@@ -56,7 +56,7 @@ config BMG160
select IIO_TRIGGERED_BUFFER if IIO_BUFFER
help
  Say yes here to build support for Bosch BMG160 Tri-axis Gyro Sensor
- driver.
+ driver. This driver also supports BMI055 gyroscope.
 
  This driver can also be built as a module.  If so, the module
  will be called bmg160.
diff --git a/drivers/iio/gyro/bmg160.c b/drivers/iio/gyro/bmg160.c
index 80f92a6..7524698 100644
--- a/drivers/iio/gyro/bmg160.c
+++ b/drivers/iio/gyro/bmg160.c
@@ -947,10 +947,10 @@ static irqreturn_t bmg160_data_rdy_trig_poll(int irq, 
void *private)
 
 }
 
-static int bmg160_acpi_gpio_probe(struct i2c_client *client,
- struct bmg160_data *data)
+static int bmg160_gpio_probe(struct i2c_client *client,
+struct bmg160_data *data)
+
 {
-   const struct acpi_device_id *id;
struct device *dev;
struct gpio_desc *gpio;
int ret;
@@ -959,12 +959,6 @@ static int bmg160_acpi_gpio_probe(struct i2c_client 
*client,
return -EINVAL;
 
dev = >dev;
-   if (!ACPI_HANDLE(dev))
-   return -ENODEV;
-
-   id = acpi_match_device(dev->driver->acpi_match_table, dev);
-   if (!id)
-   return -ENODEV;
 
/* data ready gpio interrupt pin */
gpio = devm_gpiod_get_index(dev, BMG160_GPIO_NAME, 0);
@@ -984,12 +978,24 @@ static int bmg160_acpi_gpio_probe(struct i2c_client 
*client,
return ret;
 }
 
+static const char *bmg160_match_acpi_device(struct device *dev)
+{
+   const struct acpi_device_id *id;
+
+   id = acpi_match_device(dev->driver->acpi_match_table, dev);
+   if (!id)
+   return NULL;
+
+   return dev_name(dev);
+}
+
 static int bmg160_probe(struct i2c_client *client,
const struct i2c_device_id *id)
 {
struct bmg160_data *data;
struct iio_dev *indio_dev;
int ret;
+   const char *name = NULL;
 
indio_dev = devm_iio_device_alloc(>dev, sizeof(*data));
if (!indio_dev)
@@ -1005,15 +1011,21 @@ static int bmg160_probe(struct i2c_client *client,
 
mutex_init(>mutex);
 
+   if (id)
+   name = id->name;
+
+   if (ACPI_HANDLE(>dev))
+   name = bmg160_match_acpi_device(>dev);
+
indio_dev->dev.parent = >dev;
indio_dev->channels = bmg160_channels;
indio_dev->num_channels = ARRAY_SIZE(bmg160_channels);
-   indio_dev->name = BMG160_DRV_NAME;
+   indio_dev->name = name;
indio_dev->modes = INDIO_DIRECT_MODE;
indio_dev->info = _info;
 
if (client->irq <= 0)
-   client->irq = bmg160_acpi_gpio_probe(client, data);
+   client->irq = bmg160_gpio_probe(client, data);
 
if (client->irq > 0) {
ret = devm_request_threaded_irq(>dev,
@@ -1183,12 +1195,15 @@ static const struct dev_pm_ops bmg160_pm_ops = {
 
 static const struct acpi_device_id bmg160_acpi_match[] = {
{"BMG0160", 0},
-   { },
+   {"BMI055B", 0},
+   {},
 };
+
 MODULE_DEVICE_TABLE(acpi, bmg160_acpi_match);
 
 static const struct i2c_device_id bmg160_id[] = {
{"bmg160", 0},
+   {"bmi055_gyro", 0},
{}
 };
 
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] iio: gyro: bmi055 gyro sensor driver

2014-09-02 Thread Irina Tirdea
Add support for the BMI055 gyroscope sensor. BMI055 is a package
consisting of an acceleration sensor and a gyroscope. This patch
adds support for the gyroscope only.

Spec downloaded from:
http://ae-bst.resource.bosch.com/media/products/dokumente/bmi055/BST-BMI055-DS000-06.pdf

The BMI055 gyroscope uses the same register definition as BMG160,
but does not specify a temp register. However, the temp register
seems to be working in the same way as for BMG160, so this patch
does not remove the temp channel for BMI055.

Signed-off-by: Irina Tirdea irina.tir...@intel.com
Reviewed-by: Srinivas Pandruvada srinivas.pandruv...@linux.intel.com
---
 drivers/iio/gyro/Kconfig  |2 +-
 drivers/iio/gyro/bmg160.c |   39 +++
 2 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/drivers/iio/gyro/Kconfig b/drivers/iio/gyro/Kconfig
index d630ae9..b3d0e94 100644
--- a/drivers/iio/gyro/Kconfig
+++ b/drivers/iio/gyro/Kconfig
@@ -56,7 +56,7 @@ config BMG160
select IIO_TRIGGERED_BUFFER if IIO_BUFFER
help
  Say yes here to build support for Bosch BMG160 Tri-axis Gyro Sensor
- driver.
+ driver. This driver also supports BMI055 gyroscope.
 
  This driver can also be built as a module.  If so, the module
  will be called bmg160.
diff --git a/drivers/iio/gyro/bmg160.c b/drivers/iio/gyro/bmg160.c
index 80f92a6..7524698 100644
--- a/drivers/iio/gyro/bmg160.c
+++ b/drivers/iio/gyro/bmg160.c
@@ -947,10 +947,10 @@ static irqreturn_t bmg160_data_rdy_trig_poll(int irq, 
void *private)
 
 }
 
-static int bmg160_acpi_gpio_probe(struct i2c_client *client,
- struct bmg160_data *data)
+static int bmg160_gpio_probe(struct i2c_client *client,
+struct bmg160_data *data)
+
 {
-   const struct acpi_device_id *id;
struct device *dev;
struct gpio_desc *gpio;
int ret;
@@ -959,12 +959,6 @@ static int bmg160_acpi_gpio_probe(struct i2c_client 
*client,
return -EINVAL;
 
dev = client-dev;
-   if (!ACPI_HANDLE(dev))
-   return -ENODEV;
-
-   id = acpi_match_device(dev-driver-acpi_match_table, dev);
-   if (!id)
-   return -ENODEV;
 
/* data ready gpio interrupt pin */
gpio = devm_gpiod_get_index(dev, BMG160_GPIO_NAME, 0);
@@ -984,12 +978,24 @@ static int bmg160_acpi_gpio_probe(struct i2c_client 
*client,
return ret;
 }
 
+static const char *bmg160_match_acpi_device(struct device *dev)
+{
+   const struct acpi_device_id *id;
+
+   id = acpi_match_device(dev-driver-acpi_match_table, dev);
+   if (!id)
+   return NULL;
+
+   return dev_name(dev);
+}
+
 static int bmg160_probe(struct i2c_client *client,
const struct i2c_device_id *id)
 {
struct bmg160_data *data;
struct iio_dev *indio_dev;
int ret;
+   const char *name = NULL;
 
indio_dev = devm_iio_device_alloc(client-dev, sizeof(*data));
if (!indio_dev)
@@ -1005,15 +1011,21 @@ static int bmg160_probe(struct i2c_client *client,
 
mutex_init(data-mutex);
 
+   if (id)
+   name = id-name;
+
+   if (ACPI_HANDLE(client-dev))
+   name = bmg160_match_acpi_device(client-dev);
+
indio_dev-dev.parent = client-dev;
indio_dev-channels = bmg160_channels;
indio_dev-num_channels = ARRAY_SIZE(bmg160_channels);
-   indio_dev-name = BMG160_DRV_NAME;
+   indio_dev-name = name;
indio_dev-modes = INDIO_DIRECT_MODE;
indio_dev-info = bmg160_info;
 
if (client-irq = 0)
-   client-irq = bmg160_acpi_gpio_probe(client, data);
+   client-irq = bmg160_gpio_probe(client, data);
 
if (client-irq  0) {
ret = devm_request_threaded_irq(client-dev,
@@ -1183,12 +1195,15 @@ static const struct dev_pm_ops bmg160_pm_ops = {
 
 static const struct acpi_device_id bmg160_acpi_match[] = {
{BMG0160, 0},
-   { },
+   {BMI055B, 0},
+   {},
 };
+
 MODULE_DEVICE_TABLE(acpi, bmg160_acpi_match);
 
 static const struct i2c_device_id bmg160_id[] = {
{bmg160, 0},
+   {bmi055_gyro, 0},
{}
 };
 
-- 
1.7.9.5

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/