[U-Boot] [PATCH 6/7] ARM: tegra: enable SD card on p2771-0000

Simon Glass sjg at chromium.org
Mon Aug 1 03:04:07 CEST 2016


Hi Stephen,

On 29 July 2016 at 13:15, Stephen Warren <swarren at wwwdotorg.org> wrote:
> From: Stephen Warren <swarren at nvidia.com>
>
> Now that clock and reset drivers exist for Tegra186, we can enable the SD
> card controller. Now that a BPMP I2C driver exists for Tegra186, we can
> communicate with the PMIC to enable power to the SD card. Hook up the DT
> content and board code required to make the SD card work.
>
> Signed-off-by: Stephen Warren <swarren at nvidia.com>
> ---
>  arch/arm/dts/tegra186-p2771-0000-a02.dts |  5 +++++
>  arch/arm/dts/tegra186-p2771-0000-b00.dts |  5 +++++
>  arch/arm/dts/tegra186-p2771-0000.dtsi    | 14 ++++++++++++++
>  board/nvidia/p2771-0000/p2771-0000.c     | 26 ++++++++++++++++++++++++++
>  configs/p2771-0000-a02_defconfig         |  1 +
>  configs/p2771-0000-b00_defconfig         |  1 +
>  6 files changed, 52 insertions(+)
>
> diff --git a/arch/arm/dts/tegra186-p2771-0000-a02.dts b/arch/arm/dts/tegra186-p2771-0000-a02.dts
> index 70f4326c0913..5ed3817a41c6 100644
> --- a/arch/arm/dts/tegra186-p2771-0000-a02.dts
> +++ b/arch/arm/dts/tegra186-p2771-0000-a02.dts
> @@ -5,4 +5,9 @@
>  / {
>         model = "NVIDIA P2771-0000 A02";
>         compatible = "nvidia,p2771-0000-a02", "nvidia,p2771-0000", "nvidia,tegra186";
> +
> +       sdhci at 3400000 {
> +               cd-gpios = <&gpio_main TEGRA_MAIN_GPIO(P, 6) GPIO_ACTIVE_LOW>;
> +               power-gpios = <&gpio_main TEGRA_MAIN_GPIO(P, 5) GPIO_ACTIVE_HIGH>;
> +       };
>  };
> diff --git a/arch/arm/dts/tegra186-p2771-0000-b00.dts b/arch/arm/dts/tegra186-p2771-0000-b00.dts
> index 2384a65e870a..90c99c33ccc6 100644
> --- a/arch/arm/dts/tegra186-p2771-0000-b00.dts
> +++ b/arch/arm/dts/tegra186-p2771-0000-b00.dts
> @@ -5,4 +5,9 @@
>  / {
>         model = "NVIDIA P2771-0000 B00";
>         compatible = "nvidia,p2771-0000-b00", "nvidia,p2771-0000", "nvidia,tegra186";
> +
> +       sdhci at 3400000 {
> +               cd-gpios = <&gpio_main TEGRA_MAIN_GPIO(P, 5) GPIO_ACTIVE_LOW>;
> +               power-gpios = <&gpio_main TEGRA_MAIN_GPIO(P, 6) GPIO_ACTIVE_HIGH>;
> +       };
>  };
> diff --git a/arch/arm/dts/tegra186-p2771-0000.dtsi b/arch/arm/dts/tegra186-p2771-0000.dtsi
> index 4e2b6fbf97f8..d867674fd04e 100644
> --- a/arch/arm/dts/tegra186-p2771-0000.dtsi
> +++ b/arch/arm/dts/tegra186-p2771-0000.dtsi
> @@ -10,6 +10,8 @@
>
>         aliases {
>                 sdhci0 = "/sdhci at 3460000";
> +               sdhci1 = "/sdhci at 3400000";
> +               i2c0 = "/bpmp/i2c";
>                 i2c1 = "/i2c at 3160000";
>                 i2c2 = "/i2c at c240000";
>                 i2c3 = "/i2c at 3180000";
> @@ -39,6 +41,12 @@
>                 status = "okay";
>         };
>
> +       sdhci at 3400000 {
> +               status = "okay";
> +               wp-gpios = <&gpio_main TEGRA_MAIN_GPIO(P, 4) GPIO_ACTIVE_HIGH>;
> +               bus-width = <4>;
> +       };
> +
>         sdhci at 3460000 {
>                 status = "okay";
>                 bus-width = <8>;
> @@ -55,4 +63,10 @@
>         i2c at 31e0000 {
>                 status = "okay";
>         };
> +
> +       bpmp {
> +               i2c {
> +                       status = "okay";
> +               };
> +       };
>  };
> diff --git a/board/nvidia/p2771-0000/p2771-0000.c b/board/nvidia/p2771-0000/p2771-0000.c
> index 4ba8ebc0dce8..0c828a200542 100644
> --- a/board/nvidia/p2771-0000/p2771-0000.c
> +++ b/board/nvidia/p2771-0000/p2771-0000.c
> @@ -5,3 +5,29 @@
>   */
>
>  #include <common.h>
> +#include <i2c.h>
> +#include "../p2571/max77620_init.h"
> +
> +int tegra_board_init(void)
> +{
> +       struct udevice *dev;
> +       uchar val;
> +       int ret;
> +
> +       /* Turn on MAX77620 LDO3 to 3.3V for SD card power */
> +       debug("%s: Set LDO3 for VDDIO_SDMMC_AP power to 3.3V\n", __func__);
> +       ret = i2c_get_chip_for_busnum(0, MAX77620_I2C_ADDR_7BIT, 1, &dev);
> +       if (ret) {
> +               printf("%s: Cannot find MAX77620 I2C chip\n", __func__);
> +               return ret;
> +       }
> +       /* 0xF2 for 3.3v, enabled: bit7:6 = 11 = enable, bit5:0 = voltage */
> +       val = 0xF2;
> +       ret = dm_i2c_write(dev, MAX77620_CNFG1_L3_REG, &val, 1);
> +       if (ret) {
> +               printf("i2c_write 0 0x3c 0x27 failed: %d\n", ret);
> +               return ret;
> +       }

Can you add a simple pmic driver for this? It's really easy and avoids
the horrible busnum stuff. The i2c_get_chip_for_busnum() should
ideally not be used.

> +
> +       return 0;
> +}
> diff --git a/configs/p2771-0000-a02_defconfig b/configs/p2771-0000-a02_defconfig
> index 1fe25f58f199..404f7acf7ef5 100644
> --- a/configs/p2771-0000-a02_defconfig
> +++ b/configs/p2771-0000-a02_defconfig
> @@ -26,6 +26,7 @@ CONFIG_CMD_EXT4=y
>  CONFIG_CMD_EXT4_WRITE=y
>  CONFIG_CMD_FAT=y
>  CONFIG_CMD_FS_GENERIC=y
> +CONFIG_TEGRA186_BPMP_I2C=y
>  CONFIG_SYS_NS16550=y
>  CONFIG_USB=y
>  CONFIG_DM_USB=y
> diff --git a/configs/p2771-0000-b00_defconfig b/configs/p2771-0000-b00_defconfig
> index 552fb6cec78b..ad35c99bbbcc 100644
> --- a/configs/p2771-0000-b00_defconfig
> +++ b/configs/p2771-0000-b00_defconfig
> @@ -26,6 +26,7 @@ CONFIG_CMD_EXT4=y
>  CONFIG_CMD_EXT4_WRITE=y
>  CONFIG_CMD_FAT=y
>  CONFIG_CMD_FS_GENERIC=y
> +CONFIG_TEGRA186_BPMP_I2C=y
>  CONFIG_SYS_NS16550=y
>  CONFIG_USB=y
>  CONFIG_DM_USB=y
> --
> 2.9.2
>

Regards,
Simon


More information about the U-Boot mailing list