From: Crestez Dan Leonard <leonard.crestez@intel.com>
To: Jonathan Cameron <jic23@kernel.org>, linux-iio@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Hartmut Knaack <knaack.h@gmx.de>,
Lars-Peter Clausen <lars@metafoo.de>,
Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
Daniel Baluta <daniel.baluta@intel.com>,
Crestez Dan Leonard <leonard.crestez@intel.com>
Subject: [PATCH 3/5] iio: inv_mpu6050: Check WHO_AM_I register on probe
Date: Wed, 20 Apr 2016 16:15:11 +0300 [thread overview]
Message-ID: <de4fc83c1c049176bbea7eeb4617166df593dcee.1461156671.git.leonard.crestez@intel.com> (raw)
In-Reply-To: <cover.1461156671.git.leonard.crestez@intel.com>
In-Reply-To: <cover.1461156671.git.leonard.crestez@intel.com>
This can be used to distinguish mpu6500. This is a warning rather than
an error because the differences are mostly irrelevant and it's nice to
avoid breaking users with slightly incorrect ACPI/DT.
Signed-off-by: Crestez Dan Leonard <leonard.crestez@intel.com>
---
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c | 15 +++++++++++++++
drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h | 8 ++++++++
2 files changed, 23 insertions(+)
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
index faccabafc..273b7fa7 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
@@ -91,16 +91,19 @@ static const struct inv_mpu6050_chip_config chip_config_6050 = {
/* Indexed by enum inv_devices */
static const struct inv_mpu6050_hw hw_info[] = {
{
+ .whoami = INV_MPU6050_WHOAMI_VALUE,
.name = "MPU6050",
.reg = ®_set_6050,
.config = &chip_config_6050,
},
{
+ .whoami = INV_MPU6500_WHOAMI_VALUE,
.name = "MPU6500",
.reg = ®_set_6500,
.config = &chip_config_6050,
},
{
+ .whoami = INV_MPU6000_WHOAMI_VALUE,
.name = "MPU6000",
.reg = ®_set_6050,
.config = &chip_config_6050,
@@ -730,6 +733,7 @@ static const struct iio_info mpu_info = {
static int inv_check_and_setup_chip(struct inv_mpu6050_state *st)
{
int result;
+ unsigned int regval;
st->hw = &hw_info[st->chip_type];
st->reg = hw_info[st->chip_type].reg;
@@ -740,6 +744,17 @@ static int inv_check_and_setup_chip(struct inv_mpu6050_state *st)
if (result)
return result;
msleep(INV_MPU6050_POWER_UP_TIME);
+
+ /* check chip self-identification */
+ result = regmap_read(st->map, INV_MPU6050_REG_WHOAMI, ®val);
+ if (result)
+ return result;
+ if (regval != st->hw->whoami) {
+ dev_warn(regmap_get_device(st->map),
+ "whoami mismatch got %#02x expected %#02hhx for %s\n",
+ regval, st->hw->whoami, st->hw->name);
+ }
+
/*
* toggle power state. After reset, the sleep bit could be on
* or off depending on the OTP settings. Toggling power would
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
index c66dbfc..564cabd 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
@@ -93,11 +93,13 @@ struct inv_mpu6050_chip_config {
/**
* struct inv_mpu6050_hw - Other important hardware information.
+ * @whoami: Self identification byte from WHO_AM_I register
* @name: name of the chip.
* @reg: register map of the chip.
* @config: configuration of the chip.
*/
struct inv_mpu6050_hw {
+ u8 whoami;
u8 *name;
const struct inv_mpu6050_reg_map *reg;
const struct inv_mpu6050_chip_config *config;
@@ -213,6 +215,12 @@ struct inv_mpu6050_state {
#define INV_MPU6050_MIN_FIFO_RATE 4
#define INV_MPU6050_ONE_K_HZ 1000
+#define INV_MPU6050_REG_WHOAMI 117
+
+#define INV_MPU6000_WHOAMI_VALUE 0x68
+#define INV_MPU6050_WHOAMI_VALUE 0x68
+#define INV_MPU6500_WHOAMI_VALUE 0x70
+
/* scan element definition */
enum inv_mpu6050_scan {
INV_MPU6050_SCAN_ACCL_X,
--
2.5.5
next prev parent reply other threads:[~2016-04-20 13:15 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-20 13:15 [PATCH 0/5] iio: inv_mpu6050: Cleanup chip types and add mpu9150 Crestez Dan Leonard
2016-04-20 13:15 ` [PATCH 1/5] iio: inv_mpu6050: Cleanup hw_info mapping Crestez Dan Leonard
2016-04-24 11:10 ` Jonathan Cameron
2016-04-25 18:41 ` Jonathan Cameron
2016-04-20 13:15 ` [PATCH 2/5] iio: inv_mpu6050: Remove inv_mpu6050_hw.num_reg Crestez Dan Leonard
2016-04-24 11:12 ` Jonathan Cameron
2016-04-25 18:43 ` Jonathan Cameron
2016-04-20 13:15 ` Crestez Dan Leonard [this message]
2016-04-24 11:14 ` [PATCH 3/5] iio: inv_mpu6050: Check WHO_AM_I register on probe Jonathan Cameron
2016-04-25 11:17 ` Crestez Dan Leonard
2016-04-25 18:09 ` Jonathan Cameron
2016-04-20 13:15 ` [PATCH 4/5] iio: inv_mpu6050: Add spi_device_id for INV_MPU6500 Crestez Dan Leonard
2016-04-20 13:15 ` [PATCH 5/5] iio: inv_mpu6050: Add explicit support for MPU9150 Crestez Dan Leonard
2016-04-24 11:16 ` Jonathan Cameron
2016-04-25 17:56 ` Ge Gao
2016-04-25 19:20 ` Jonathan Cameron
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=de4fc83c1c049176bbea7eeb4617166df593dcee.1461156671.git.leonard.crestez@intel.com \
--to=leonard.crestez@intel.com \
--cc=daniel.baluta@intel.com \
--cc=jic23@kernel.org \
--cc=knaack.h@gmx.de \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pmeerw@pmeerw.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®