Hi Chen-Yu,

On Fri, Mar 27, 2020 at 10:12 AM Chen-Yu Tsai <w...@kernel.org> wrote:
>
> From: Chen-Yu Tsai <w...@csie.org>
>
> The ROC-RK3328-CC from Firefly and Libre Computer Project is a credit
> card size development board based on the Rockchip RK3328 SoC, with:
>
>   - 1/2/4 GB DDR4 DRAM
>   - eMMC connector for optional module
>   - micro SD card slot
>   - 1 x USB 3.0 host port
>   - 2 x USB 2.0 host port
>   - 1 x USB 2.0 OTG port
>   - HDMI video output
>   - TRRS connector with audio and composite video output
>   - gigabit Ethernet
>   - consumer IR receiver
>   - debug UART pins
>
> The ROC-RK3328-CC has the enable pin of the SD card power switch tied
> to GPIO_0_D6. This pin also has the function SDMMC0_PWREN, which is
> muxed by default. SDMMC0_PWREN is an active high signal controlled by
> the MMC controller, however the switch enable is active low, and
> pulled low (enabled) by default to make things work on boot.
>
> As such, we need to mux away from SDMMC0_PWREN and use GPIO to enable
> power to the card. The default GPIO state for the pin is pull-down and
> input, which doesn't require extra configuration when paired with the
> external pull-down and active low switch.
>
> Thus we make a custom target for this board and do the muxing in its
> spl_board_init() function.
>
> The device tree file is synced from the Linux kernel next-20200324.
>
> Signed-off-by: Chen-Yu Tsai <w...@csie.org>
> ---

[snip]

> diff --git a/board/firefly/roc-cc-rk3328/MAINTAINERS 
> b/board/firefly/roc-cc-rk3328/MAINTAINERS
> new file mode 100644
> index 000000000000..f2318e71ac33
> --- /dev/null
> +++ b/board/firefly/roc-cc-rk3328/MAINTAINERS
> @@ -0,0 +1,7 @@
> +ROC-RK3328-CC
> +M:      Loic Devulder <ldevul...@suse.com>
> +M:     Chen-Yu Tsai <w...@csie.org>
> +S:      Maintained
> +F:     board/firefly/roc-cc-rk3328/
> +F:      configs/roc-rk3328-cc_defconfig
> +F:      arch/arm/dts/rk3328-roc-cc-u-boot.dtsi
> diff --git a/board/firefly/roc-cc-rk3328/Makefile 
> b/board/firefly/roc-cc-rk3328/Makefile
> new file mode 100644
> index 000000000000..1550b5f5f16e
> --- /dev/null
> +++ b/board/firefly/roc-cc-rk3328/Makefile
> @@ -0,0 +1 @@
> +obj-y  := board.o
> diff --git a/board/firefly/roc-cc-rk3328/board.c 
> b/board/firefly/roc-cc-rk3328/board.c
> new file mode 100644
> index 000000000000..eca58c86b53e
> --- /dev/null
> +++ b/board/firefly/roc-cc-rk3328/board.c
> @@ -0,0 +1,38 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * (C) Copyright 2020 Chen-Yu Tsai <w...@csie.org>
> + */
> +#include <asm/io.h>
> +
> +#include <asm/arch-rockchip/grf_rk3328.h>
> +#include <asm/arch-rockchip/hardware.h>
> +
> +#if defined(CONFIG_SPL_BUILD)
> +
> +#define GRF_BASE       0xFF100000
> +
> +enum {
> +       GPIO_0_D6_GPIO  = 0   << 12,
> +       GPIO_0_D6_MASK  = 0x3 << 12
> +};
> +
> +/*
> + * The ROC-RK3328-CC has the enable pin of the SD card power switch tied
> + * to GPIO_0_D6. This pin also has the function SDMMC0_PWREN, which is
> + * muxed by default. SDMMC0_PWREN is an active high signal controlled by
> + * the MMC controller, however the switch enable is active low, and
> + * pulled low (enabled) by default to make things work on boot.
> + *
> + * As such, we need to mux away from SDMMC0_PWREN and use GPIO to enable
> + * power to the card. The default GPIO state for the pin is pull-down and
> + * input, which doesn't require extra configuration when paired with the
> + * external pull-down and active low switch.
> + */
> +void spl_board_init(void)
> +{
> +       struct rk3328_grf_regs * const grf = (void *)GRF_BASE;
> +
> +       rk_clrsetreg(&grf->gpio0d_iomux, GPIO_0_D6_MASK, GPIO_0_D6_GPIO);
> +}

So, this seem toggle the bit 12, 13 of GRF_GPIO0D_IOMUX so-that it
operate like a gpio(not like default sdmmc0_pwrenm1), isn't it
required for the next stages like U-Boot proper and Linux? these has
vcc_sd node where it operates a fixed regulator to active low the same
pin.

gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;

Jagan.

Reply via email to