[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