[U-Boot] soft-i2c and i2c-gpio issues with at91

Simon Glass sjg at chromium.org
Tue May 26 16:41:56 CEST 2015


Hi Matt,

On 26 May 2015 at 08:33, Matt Wood <mattwood2000 at gmail.com> wrote:
> Hi Simon, yes I currently have i2c-gpio enabled.  Below is the output of
> both commands.  Looks like the GPIO driver is not setup as you suspected.
> However I'm confused on what specifically is needed to enable it.  Are you
> talking about a DT entry?  In looking at other DTS files I did not see
> anything in particular that called out GPIO.  Can you point me to what I'm
> missing?

Looking at the kernel device tree files it looks like the GPIO node is
hidden inside ahb/apb/pinctrl. Since they are all compatible with
'simple-bus' it should still work.

But you will need to create an of_match entry in at91_gpio.c. See
s5p_gpio.c for an example. You should add the compatible ID referenced
in the pioA node of your device tree.

Then you should see GPIO nodes in your driver model tree. Without
these i2c cannot use GPIO.

Regards,
Simon

>
> Thanks, Matt.
>
> U-Boot> dm tree
>  Class       Probed   Name
> ----------------------------------------
>  root        [ + ]    root_driver
>  simple_bus  [   ]    |-- ahb
>  simple_bus  [   ]    |   `-- apb
>  simple_bus  [   ]    |       `-- pinctrl at fc06a000
>  i2c         [   ]    `-- soft-i2c at 1
> U-Boot> dm uclass
> uclass 0: root
> - * root_driver @ 3fb58028, seq 0, (req -1)
>
> Cannot find uclass for id 1: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 2: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 3: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 4: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 5: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 6: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 7: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 8: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> uclass 9: simple_bus
> -   ahb @ 3fb580a0
> -   apb @ 3fb580f8
> -   pinctrl at fc06a000 @ 3fb58150
>
> uclass 10: gpio
> Cannot find uclass for id 11: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 12: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 13: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 14: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 15: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 16: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> uclass 17: i2c
> -   soft-i2c at 1 @ 3fb581c8, seq -1, (req 0)
>
> uclass 18: i2c_generic
> Cannot find uclass for id 19: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 20: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 21: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 22: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 23: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 24: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 25: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 26: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 27: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 28: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 29: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 30: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
> Cannot find uclass for id 31: please add the UCLASS_DRIVER() declaration for
> this UCLASS_... id
>
> On Tue, May 26, 2015 at 9:47 AM, Simon Glass <sjg at chromium.org> wrote:
>>
>> (adding Przemyslaw who uses the I2C GPIO driver)
>>
>> Hi,
>>
>> On 25 May 2015 at 22:30, Heiko Schocher <hs at denx.de> wrote:
>> > Hello Matt,
>> >
>> > Am 22.05.2015 16:35, schrieb Matt Wood:
>> >>
>> >> Hi all, I am trying to get a bitbanged i2c port working with u-boot on
>> >> an
>> >> Atmel SAMA5D3 platform.  I have added DT bindings to support the I2C
>> >> drivers however when I try to select the bus on the u-boot command line
>> >> I
>> >> consistently get an error in gpio-uclass:
>> >
>> >
>> > I am not sure, if DM is supported on this plattform yet, I added
>> > Andreas Biesmann (AT91) and Simon Glass (DM) to Cc, maybe one of them
>> > can help you here ...
>> >
>> > bye,
>> > Heiko
>> >
>> >>
>> >> _gpio_request_by_name_nodev: uclass_get_device_by_of_offset failed
>> >>
>> >> _gpio_request_by_name_nodev: Node 'soft-i2c at 1', property 'gpios',
>> >> failed
>> >> to
>> >> request GPIO index 0: -19
>> >>
>> >> Each driver always fails at the get_dev_by_offset routine.
>> >>
>> >> I suspect some issue with the way the GPIO is defined or is not setup
>> >> correctly.  Has anyone seen this or have any advice on where to look?
>> >>
>> >> This is the relevant part of the device tree:
>> >>
>> >> aliases {
>> >>
>> >>                  i2c0 = "/soft-i2c at 1";
>> >>
>> >> };
>> >>
>> >>
>> >> soft-i2c at 1 {
>> >>
>> >>                  #address-cells = <1>;
>> >>
>> >>                  #size-cells = <0>;
>> >>
>> >> /*              compatible = "soft-i2c"; */
>> >>
>> >>                  compatible = "i2c-gpio";
>> >>
>> >> /*              clock-frequency = <100000>; */
>> >>
>> >> /*              pinctrl-names = "default";
>> >>
>> >>                  pinctrl-0 = <&pinctrl_soft_i2c>; */
>> >>
>> >>                  /* Define the proper GPIO pins */
>> >>
>> >>
>> >> /*
>> >>
>> >>
>> >>                  clock-pin = <&pioA 31 0>;
>> >>
>> >>                  data-pin = <&pioA 30 0>; */
>> >>
>> >>                  gpios = <&pioA 30 0     /* SDA */
>> >>
>> >>                           &pioA 31 0>;   /* SCL */
>> >>
>> >>
>> >>                  i2c-gpio,sda-open-drain;
>> >>
>> >>                  i2c-gpio,scl-open-drain;
>> >>
>> >>                  i2c-gpio,delay-us =<3>;
>> >>
>> >>
>> >>          };
>> >>
>> >> };
>>
>> Can you post the output of 'dm tree' and 'dm uclass'? I wonder if your
>> GPIO driver is not connected up properly?
>>
>> Are you using i2c-gpio.c? That driver should work as is on any
>> platform with only device tree additions.
>>
>> Regards,
>> Simon
>
>


More information about the U-Boot mailing list