[U-Boot] [PATCH] arch-mx6: fix MX6_PAD_DECLARE macro to work with MX6 duallite
Hannes Schmelzer
hannes at schmelzer.or.at
Thu Jul 21 21:02:07 CEST 2016
On 07/21/2016 10:28 AM, Stefano Babic wrote:
> Hi Hannes,
Hi Stefano,
>
> On 21/07/2016 08:10, Hannes Schmelzer wrote:
>
>> Just looked around a bit more about this.
>> Root cause for failing this patch is, that many boards do not use the
>> 'IOMUX_PADS' macro, instead they just directly use the definition out of
>> "mx6dl_pins.h" for example.
> Both are allowed. IOMUX_PADS *must* be used in case the board supports
> multiple variant of the processor (DL, Quad,..). If the board has just
> one variant, the MX6 defines from the corresponding header can be used.
>
>> So we get in trouble there if we change the MX6_PAD_DECLARE macro for
>> having MX6DL pads instead MX6 pads.
> I am not getting where is the trouble, because there are already a lot
> of boards using it. Let's see....
>
>> At one point of view it would make sense to me changing all boards to
>> use the IOMUX_PADS macro for accessing pads register, because afterwards
>> the real accessed register would be fully in dependence of CONFIG_MX6nn.
>> On the other hand i cannot fully predict every case could happen if we
>> simply change that with search/replace.
>>
>> So it would be OK for me to drop this patch and i will use on my board:
>>
>> MX6DL_PAD_ENET_TX_EN__I2C4_SCL
>> MX6DL_PAD_ENET_TXD1__I2C4_SDA
>>
> Now I get the point - and yes, there is an exception for I2C in the
> pinmux. This was discussed at the beginning when IOMUX_PADS was
> introduced and how to support the different layout of the SOC variants.
>
> We agreed to tread differently I2C. This means that a i2c_pads_info
> structure must be set for each variant of the SOC that board supports.
> With help of the is_cpu_type() macro (or one of this family), the
> correct structure is selected and the pinmux can be set.
>
> The right way to do is:
>
>
> static struct i2c_pads_info i2c_pad = {
> .scl = {
> .i2c_mode = MX6DL_PAD_ENET_TX_EN__I2C4_SCL | <pull up>,
> .gpio_mode = MX6DL_PAD_ENET_TX_EN__GPIO1_IO28 | <..>,
> .gp = IMX_GPIO_NR(1, 28)
> },
> .sda = {
> .i2c_mode = MX6DL_PAD_ENET_TXD1__I2C4_SDA | <pull >,
> .gpio_mode = MX6DL_PAD_ENET_TXD1__GPIO1_IO29 | <pull>,
> .gp = IMX_GPIO_NR(1, 29)
> }
> };
>
>
> and then you call setup_i2c() with the structure.
Yeah! Now i understand the thinkings behind/around that.
Many thanks for this, i will implement this for my board.
> Best regards,
> Stefano Babic
cheers,
Hannes
>
More information about the U-Boot
mailing list