Re: invensense mpu9250 ak8963 and devicetree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 8 Mar 2021 14:06:30 +0100
Philippe De Muyter <phdm@xxxxxxx> wrote:

> Hello Jean-Baptiste,
> 
> On Thu, Mar 04, 2021 at 10:08:10AM +0000, Jean-Baptiste Maneyrol wrote:
> > You can try to cherry-pick the corresponding commits inside Linux 5.10.
> > 
> > Or just copy the driver files and made the change to have them working properly.
> >   
> 
> I have integrated in my kernel the patches up to v5.11.
> 
> My DT entry now is :
> 
>                 mpu9250@68 {
>                         compatible = "invensense,mpu9250";
>                         reg = <0x68>;
>                         interrupt-parent = <&tegra_main_gpio>;
>                         interrupts = <TEGRA_MAIN_GPIO(P, 3) GPIO_ACTIVE_HIGH>;
>                 };
> 
> But probing fails with :
> 
> [    6.989291] inv-mpu6050-i2c 0-0068: mounting matrix not found: using identity...
> [    6.989312] inv-mpu6050-i2c 0-0068: Failed to get vdd regulator -19
> 
> The "Failed to get vdd regulator" seems to come from those lines in
> drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
> 
>         st->vdd_supply = devm_regulator_get(dev, "vdd");
>         if (IS_ERR(st->vdd_supply)) {
>                 if (PTR_ERR(st->vdd_supply) != -EPROBE_DEFER)
>                         dev_err(dev, "Failed to get vdd regulator %d\n",
>                                 (int)PTR_ERR(st->vdd_supply));
> 
>                 return PTR_ERR(st->vdd_supply);
>         }

That's odd because you should get a stub regulator... For simple cases
where the regulator is always on, there is no need to specify a regulator,
you can just rely on the regulator framework giving you one that basically
does nothing.

Could you have a look at why you aren't getting a dummy_regulator from the code
just below here?

https://elixir.bootlin.com/linux/latest/source/drivers/regulator/core.c#L1948

Jonathan

> 
> Should I turn off those lines ?
> 
> Philippe
> 
> > Best regards,
> > JB
> > ________________________________
> > From: Philippe De Muyter <phdm@xxxxxxx>
> > Sent: Thursday, March 4, 2021 10:31
> > To: Jean-Baptiste Maneyrol <JManeyrol@xxxxxxxxxxxxxx>
> > Cc: linux-iio@xxxxxxxxxxxxxxx <linux-iio@xxxxxxxxxxxxxxx>
> > Subject: Re: invensense mpu9250 ak8963 and devicetree
> > 
> >  CAUTION: This email originated from outside of the organization. Please make sure the sender is who they say they are and do not click links or open attachments unless you recognize the sender and know the content is safe.
> > 
> > Hello Jean-Baptiste,
> > 
> > thank you for your answer
> > 
> > I work actually with a nvidia-provided 4.9 kernel that I cannot change.
> > Up to now I have incorporated the mpu9250 related patches up to v4.12.
> > 
> > Do you think I should simply replace the inv_mpu6050 driver files of v4.9
> > by their v5.11 (or newer) counterparts ?
> > 
> > Thanks
> > 
> > Philippe
> > 
> > On Thu, Mar 04, 2021 at 09:12:47AM +0000, Jean-Baptiste Maneyrol wrote:  
> > > Hello Philippe,
> > >
> > > I would recommend letting mpu9250 chip drives the magnetometer instead of using the ak8963 driver.
> > >
> > > This is simpler to use and guarantees a good synchronization between all sensors and no possible latency coming from kernel scheduling when polling the magnetometer. And it enables the use of spi bus for connecting the device.
> > >
> > > You just need to define mpu9250 dts without an i2c-gate, and delete all definition of ak8963 chip.
> > >
> > > Best regards,
> > > JB
> > >
> > >
> > > From: Philippe De Muyter <phdm@xxxxxxx>
> > > Sent: Wednesday, March 3, 2021 16:31
> > > To: linux-iio@xxxxxxxxxxxxxxx <linux-iio@xxxxxxxxxxxxxxx>
> > > Subject: invensense mpu9250 ak8963 and devicetree
> > >
> > > Hello,
> > >
> > > I am trying to use a mpu9250 imu, but I have trouble with the ak8963 part.
> > >
> > > Currently, ak8975_probe fails in this code :
> > >
> > >         /* Fetch the regulators */
> > >         data->vdd = devm_regulator_get(&client->dev, "vdd");
> > >         if (IS_ERR(data->vdd))
> > >                 return PTR_ERR(data->vdd);
> > >         data->vid = devm_regulator_get(&client->dev, "vid");
> > >         if (IS_ERR(data->vid))
> > >                 return PTR_ERR(data->vid);
> > >
> > > but Documentation/devicetree/bindings/iio/magnetometer/asahi-kasei,ak8975.yaml
> > > says :
> > >
> > >   vdd-supply:
> > >     description: |
> > >       an optional regulator that needs to be on to provide VDD power to
> > >       the sensor.
> > >
> > > I have no vdd or vdd-supply property in my ak8963 description.
> > >
> > > Is that unrelated ?
> > >
> > > What should I write in my dts file for this ak8963 embedded in a mpu9250 ?
> > >
> > > Thanks in advance
> > >
> > > Philippe  




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux