diff mbox

[v1] iio: magnetometer: ak8975: Remove wrong ACPI ID

Message ID 20171103175640.33403-1-andriy.shevchenko@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Andy Shevchenko Nov. 3, 2017, 5:56 p.m. UTC
The ID is added to proper sensor by the commit 6ed5ac50a3e0
("iio: imu: inv_mpu6050: ACPI enumeration").

Remove it from wrong place, otherwise user will get:

 ak8975 i2c-INVN6500:00: mounting matrix not found: using identity...
 ak8975 i2c-INVN6500:00: Unexpected device

Fixes: 6ed5ac50a3e0 ("iio: imu: inv_mpu6050: ACPI enumeration").
Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/iio/magnetometer/ak8975.c | 1 -
 1 file changed, 1 deletion(-)

Comments

Andy Shevchenko Nov. 3, 2017, 6:08 p.m. UTC | #1
On Fri, 2017-11-03 at 19:56 +0200, Andy Shevchenko wrote:
> The ID is added to proper sensor by the commit 6ed5ac50a3e0
> ("iio: imu: inv_mpu6050: ACPI enumeration").
> 
> Remove it from wrong place, otherwise user will get:
> 
>  ak8975 i2c-INVN6500:00: mounting matrix not found: using identity...
>  ak8975 i2c-INVN6500:00: Unexpected device
> 

After applying I have got

 inv-mpu6050-i2c i2c-INVN6500:00: mounting matrix not found: using
identity...

...

 i2c i2c-4: Added multiplexed i2c bus 14
 ak8975 14-000c: mounting matrix not found: using identity...


Nevertheless, I didn't try before with both drivers enabled. It might be
that my fix is not needed.

Shrinivas, can you comment on this?


> Fixes: 6ed5ac50a3e0 ("iio: imu: inv_mpu6050: ACPI enumeration").
> Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>  drivers/iio/magnetometer/ak8975.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/drivers/iio/magnetometer/ak8975.c
> b/drivers/iio/magnetometer/ak8975.c
> index 42a827a66512..f29a00729fa0 100644
> --- a/drivers/iio/magnetometer/ak8975.c
> +++ b/drivers/iio/magnetometer/ak8975.c
> @@ -787,7 +787,6 @@ static const struct iio_info ak8975_info = {
>  static const struct acpi_device_id ak_acpi_match[] = {
>  	{"AK8975", AK8975},
>  	{"AK8963", AK8963},
> -	{"INVN6500", AK8963},
>  	{"AK009911", AK09911},
>  	{"AK09911", AK09911},
>  	{"AK09912", AK09912},
Andy Shevchenko Nov. 3, 2017, 6:14 p.m. UTC | #2
On Fri, 2017-11-03 at 20:08 +0200, Andy Shevchenko wrote:
> On Fri, 2017-11-03 at 19:56 +0200, Andy Shevchenko wrote:
> > The ID is added to proper sensor by the commit 6ed5ac50a3e0
> > ("iio: imu: inv_mpu6050: ACPI enumeration").
> > 
> > Remove it from wrong place, otherwise user will get:
> > 
> >  ak8975 i2c-INVN6500:00: mounting matrix not found: using
> > identity...
> >  ak8975 i2c-INVN6500:00: Unexpected device
> > 
> 
> After applying I have got
> 
>  inv-mpu6050-i2c i2c-INVN6500:00: mounting matrix not found: using
> identity...
> 
> ...
> 
>  i2c i2c-4: Added multiplexed i2c bus 14
>  ak8975 14-000c: mounting matrix not found: using identity...
> 
> 
> Nevertheless, I didn't try before with both drivers enabled. It might
> be
> that my fix is not needed.
> 
> Shrinivas, can you comment on this?

DSDT looks promising:

Device (SENS) {
    Name (_HID, "INVN6500" /* InvenSense MPU-6500 Six Axis Gyroscope and
Accelerometer */)
...

    Name (CNF0, Package (0x04) {        
        Package (0x04) { "MPU6500", ... },   
        Package (0x04) { "MPU6500", ... },
        Package (0x04) { "AK8963", ... },

Thus it is properly enumerated IIUC.

I think the patch at the end is correct.

> 
> 
> > Fixes: 6ed5ac50a3e0 ("iio: imu: inv_mpu6050: ACPI enumeration").
> > Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > ---
> >  drivers/iio/magnetometer/ak8975.c | 1 -
> >  1 file changed, 1 deletion(-)
> > 
> > diff --git a/drivers/iio/magnetometer/ak8975.c
> > b/drivers/iio/magnetometer/ak8975.c
> > index 42a827a66512..f29a00729fa0 100644
> > --- a/drivers/iio/magnetometer/ak8975.c
> > +++ b/drivers/iio/magnetometer/ak8975.c
> > @@ -787,7 +787,6 @@ static const struct iio_info ak8975_info = {
> >  static const struct acpi_device_id ak_acpi_match[] = {
> >  	{"AK8975", AK8975},
> >  	{"AK8963", AK8963},
> > -	{"INVN6500", AK8963},
> >  	{"AK009911", AK09911},
> >  	{"AK09911", AK09911},
> >  	{"AK09912", AK09912},
> 
>
Srinivas Pandruvada Nov. 3, 2017, 6:46 p.m. UTC | #3
On Fri, 2017-11-03 at 20:14 +0200, Andy Shevchenko wrote:
> On Fri, 2017-11-03 at 20:08 +0200, Andy Shevchenko wrote:
> > On Fri, 2017-11-03 at 19:56 +0200, Andy Shevchenko wrote:
> > > The ID is added to proper sensor by the commit 6ed5ac50a3e0
> > > ("iio: imu: inv_mpu6050: ACPI enumeration").
> > > 
> > > Remove it from wrong place, otherwise user will get:
> > > 
> > >  ak8975 i2c-INVN6500:00: mounting matrix not found: using
> > > identity...
> > >  ak8975 i2c-INVN6500:00: Unexpected device
> > > 
> > 
> > After applying I have got
> > 
> >  inv-mpu6050-i2c i2c-INVN6500:00: mounting matrix not found: using
> > identity...
> > 
> > ...
> > 
> >  i2c i2c-4: Added multiplexed i2c bus 14
> >  ak8975 14-000c: mounting matrix not found: using identity...
> > 
> > 
> > Nevertheless, I didn't try before with both drivers enabled. It
> > might
> > be
> > that my fix is not needed.
> > 
> > Shrinivas, can you comment on this?
> 
> DSDT looks promising:
> 
> Device (SENS) {
>     Name (_HID, "INVN6500" /* InvenSense MPU-6500 Six Axis Gyroscope
> and
> Accelerometer */)
> ...
> 
>     Name (CNF0, Package (0x04) {        
>         Package (0x04) { "MPU6500", ... },   
>         Package (0x04) { "MPU6500", ... },
>         Package (0x04) { "AK8963", ... },
> 
> Thus it is properly enumerated IIUC.
> 
> I think the patch at the end is correct.
The AK8963 is using INVN6500. The reason is that this INVN 6500 has
another master mode where a secondary sensor can be connected to it as
an i2c slave.
So Windows config uses this mode and hence added in the same package.

But Linux INVN driver is not capable of this master mode. We use
something called "bypass" mode. In this the second sensor will also be
directly connected to host i2c. We have another driver handling this
sensor (ak8975), so we have to add this id.

Thanks,
Srinivas 

> 
> > 
> > 
> > > Fixes: 6ed5ac50a3e0 ("iio: imu: inv_mpu6050: ACPI enumeration").
> > > Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com
> > > >
> > > ---
> > >  drivers/iio/magnetometer/ak8975.c | 1 -
> > >  1 file changed, 1 deletion(-)
> > > 
> > > diff --git a/drivers/iio/magnetometer/ak8975.c
> > > b/drivers/iio/magnetometer/ak8975.c
> > > index 42a827a66512..f29a00729fa0 100644
> > > --- a/drivers/iio/magnetometer/ak8975.c
> > > +++ b/drivers/iio/magnetometer/ak8975.c
> > > @@ -787,7 +787,6 @@ static const struct iio_info ak8975_info = {
> > >  static const struct acpi_device_id ak_acpi_match[] = {
> > >  	{"AK8975", AK8975},
> > >  	{"AK8963", AK8963},
> > > -	{"INVN6500", AK8963},
> > >  	{"AK009911", AK09911},
> > >  	{"AK09911", AK09911},
> > >  	{"AK09912", AK09912},
> > 
> > 
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Andy Shevchenko Nov. 5, 2017, 12:42 p.m. UTC | #4
On Fri, 2017-11-03 at 11:46 -0700, Srinivas Pandruvada wrote:
> On Fri, 2017-11-03 at 20:14 +0200, Andy Shevchenko wrote:
> > On Fri, 2017-11-03 at 20:08 +0200, Andy Shevchenko wrote:
> > > On Fri, 2017-11-03 at 19:56 +0200, Andy Shevchenko wrote:
> > > > The ID is added to proper sensor by the commit 6ed5ac50a3e0
> > > > ("iio: imu: inv_mpu6050: ACPI enumeration").
> > > > 
> > > > Remove it from wrong place, otherwise user will get:
> > > > 
> > > >  ak8975 i2c-INVN6500:00: mounting matrix not found: using
> > > > identity...
> > > >  ak8975 i2c-INVN6500:00: Unexpected device
> > > > 
> > > 
> > > After applying I have got
> > > 
> > >  inv-mpu6050-i2c i2c-INVN6500:00: mounting matrix not found: using
> > > identity...
> > > 
> > > ...
> > > 
> > >  i2c i2c-4: Added multiplexed i2c bus 14
> > >  ak8975 14-000c: mounting matrix not found: using identity...
> > > 
> > > 
> > > Nevertheless, I didn't try before with both drivers enabled. It
> > > might
> > > be
> > > that my fix is not needed.
> > > 
> > > Shrinivas, can you comment on this?
> > 
> > DSDT looks promising:
> > 
> > Device (SENS) {
> >     Name (_HID, "INVN6500" /* InvenSense MPU-6500 Six Axis Gyroscope
> > and
> > Accelerometer */)
> > ...
> > 
> >     Name (CNF0, Package (0x04) {        
> >         Package (0x04) { "MPU6500", ... },   
> >         Package (0x04) { "MPU6500", ... },
> >         Package (0x04) { "AK8963", ... },
> > 
> > Thus it is properly enumerated IIUC.
> > 
> > I think the patch at the end is correct.
> 
> The AK8963 is using INVN6500. The reason is that this INVN 6500 has
> another master mode where a secondary sensor can be connected to it as
> an i2c slave.
> So Windows config uses this mode and hence added in the same package.
> 
> But Linux INVN driver is not capable of this master mode. We use
> something called "bypass" mode. In this the second sensor will also be
> directly connected to host i2c. We have another driver handling this
> sensor (ak8975), so we have to add this id.

But ak8975 is enumerated. See above log. So, I think the INVN6500 ID in
ak 8975 driver is simple not required.
Srinivas Pandruvada Nov. 6, 2017, 2:03 a.m. UTC | #5
On Sun, 2017-11-05 at 14:42 +0200, Andy Shevchenko wrote:
> On Fri, 2017-11-03 at 11:46 -0700, Srinivas Pandruvada wrote:
> > On Fri, 2017-11-03 at 20:14 +0200, Andy Shevchenko wrote:
> > > On Fri, 2017-11-03 at 20:08 +0200, Andy Shevchenko wrote:
> > > > On Fri, 2017-11-03 at 19:56 +0200, Andy Shevchenko wrote:
> > > > > The ID is added to proper sensor by the commit 6ed5ac50a3e0
> > > > > ("iio: imu: inv_mpu6050: ACPI enumeration").
> > > > > 
> > > > > Remove it from wrong place, otherwise user will get:
> > > > > 
> > > > >  ak8975 i2c-INVN6500:00: mounting matrix not found: using
> > > > > identity...
> > > > >  ak8975 i2c-INVN6500:00: Unexpected device
> > > > > 
> > > > 
> > > > After applying I have got
> > > > 
> > > >  inv-mpu6050-i2c i2c-INVN6500:00: mounting matrix not found:
> > > > using
> > > > identity...
> > > > 
> > > > ...
> > > > 
> > > >  i2c i2c-4: Added multiplexed i2c bus 14
> > > >  ak8975 14-000c: mounting matrix not found: using identity...
> > > > 
> > > > 
> > > > Nevertheless, I didn't try before with both drivers enabled. It
> > > > might
> > > > be
> > > > that my fix is not needed.
> > > > 
> > > > Shrinivas, can you comment on this?
> > > 
> > > DSDT looks promising:
> > > 
> > > Device (SENS) {
> > >     Name (_HID, "INVN6500" /* InvenSense MPU-6500 Six Axis
> > > Gyroscope
> > > and
> > > Accelerometer */)
> > > ...
> > > 
> > >     Name (CNF0, Package (0x04) {        
> > >         Package (0x04) { "MPU6500", ... },   
> > >         Package (0x04) { "MPU6500", ... },
> > >         Package (0x04) { "AK8963", ... },
> > > 
> > > Thus it is properly enumerated IIUC.
> > > 
> > > I think the patch at the end is correct.
> > 
> > The AK8963 is using INVN6500. The reason is that this INVN 6500 has
> > another master mode where a secondary sensor can be connected to it
> > as
> > an i2c slave.
> > So Windows config uses this mode and hence added in the same
> > package.
> > 
> > But Linux INVN driver is not capable of this master mode. We use
> > something called "bypass" mode. In this the second sensor will also
> > be
> > directly connected to host i2c. We have another driver handling
> > this
> > sensor (ak8975), so we have to add this id.
> 
> But ak8975 is enumerated. See above log. So, I think the INVN6500 ID
> in
> ak 8975 driver is simple not required.
This is not true in all platforms. So this is required.

Thanks,
Srinivas


> 

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Andy Shevchenko Nov. 8, 2017, 4:38 p.m. UTC | #6
On Sun, 2017-11-05 at 18:03 -0800, Srinivas Pandruvada wrote:
> On Sun, 2017-11-05 at 14:42 +0200, Andy Shevchenko wrote:
> > On Fri, 2017-11-03 at 11:46 -0700, Srinivas Pandruvada wrote:

> > > The AK8963 is using INVN6500. The reason is that this INVN 6500
> > > has
> > > another master mode where a secondary sensor can be connected to
> > > it
> > > as
> > > an i2c slave.
> > > So Windows config uses this mode and hence added in the same
> > > package.
> > > 
> > > But Linux INVN driver is not capable of this master mode. We use
> > > something called "bypass" mode. In this the second sensor will
> > > also
> > > be
> > > directly connected to host i2c. We have another driver handling
> > > this
> > > sensor (ak8975), so we have to add this id.
> > 
> > But ak8975 is enumerated. See above log. So, I think the INVN6500 ID
> > in
> > ak 8975 driver is simple not required.
> 
> This is not true in all platforms. So this is required.

Thanks for clarification. though it would be interesting to test a
behaviour w/o this patch on platform I have and the one that has wrong
data under CNF0 resources.
Jonathan Cameron Nov. 19, 2017, 3:05 p.m. UTC | #7
On Wed, 08 Nov 2017 18:38:39 +0200
Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:

> On Sun, 2017-11-05 at 18:03 -0800, Srinivas Pandruvada wrote:
> > On Sun, 2017-11-05 at 14:42 +0200, Andy Shevchenko wrote:  
> > > On Fri, 2017-11-03 at 11:46 -0700, Srinivas Pandruvada wrote:  
> 
> > > > The AK8963 is using INVN6500. The reason is that this INVN 6500
> > > > has
> > > > another master mode where a secondary sensor can be connected to
> > > > it
> > > > as
> > > > an i2c slave.
> > > > So Windows config uses this mode and hence added in the same
> > > > package.
> > > > 
> > > > But Linux INVN driver is not capable of this master mode. We use
> > > > something called "bypass" mode. In this the second sensor will
> > > > also
> > > > be
> > > > directly connected to host i2c. We have another driver handling
> > > > this
> > > > sensor (ak8975), so we have to add this id.  
> > > 
> > > But ak8975 is enumerated. See above log. So, I think the INVN6500 ID
> > > in
> > > ak 8975 driver is simple not required.  
> > 
> > This is not true in all platforms. So this is required.  
> 
> Thanks for clarification. though it would be interesting to test a
> behaviour w/o this patch on platform I have and the one that has wrong
> data under CNF0 resources.
> 
As this discussion seems to have concluded the patch is a bad
idea I'm dropping it.

I'll add though that it would be possible to instantiate the ak8975 from
the mpu6050 driver if we wanted to avoid this nasty 'hack'.

Jonathan

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c
index 42a827a66512..f29a00729fa0 100644
--- a/drivers/iio/magnetometer/ak8975.c
+++ b/drivers/iio/magnetometer/ak8975.c
@@ -787,7 +787,6 @@  static const struct iio_info ak8975_info = {
 static const struct acpi_device_id ak_acpi_match[] = {
 	{"AK8975", AK8975},
 	{"AK8963", AK8963},
-	{"INVN6500", AK8963},
 	{"AK009911", AK09911},
 	{"AK09911", AK09911},
 	{"AK09912", AK09912},