Andy, > On 21 Nov 2017, at 02:02, Andy Yan <andy....@rock-chips.com> wrote: > > Hi Philipp: > > > On 2017年11月20日 22:51, Philipp Tomsich wrote: >> >> >> On Wed, 11 Oct 2017, Andy Yan wrote: >> >>> Enter download mode if the download key pressed. >>> >>> Signed-off-by: Andy Yan <andy....@rock-chips.com> >>> Acked-by: Philipp Tomsich <philipp.toms...@theobroma-systems.com> >> >> Reviewed-by: Philipp Tomsich <philipp.toms...@theobroma-systems.com> >> >> See below for requested changes. >> >>> --- >>> >>> Changes in v3: None >>> Changes in v2: >>> - more document >>> - move adc key detect as the default >>> >>> arch/arm/mach-rockchip/boot_mode.c | 43 >>> ++++++++++++++++++++++++++++++++++++++ >>> 1 file changed, 43 insertions(+) >>> >>> diff --git a/arch/arm/mach-rockchip/boot_mode.c >>> b/arch/arm/mach-rockchip/boot_mode.c >>> index 4652490..bf0a410 100644 >>> --- a/arch/arm/mach-rockchip/boot_mode.c >>> +++ b/arch/arm/mach-rockchip/boot_mode.c >>> @@ -5,14 +5,57 @@ >>> */ >>> >>> #include <common.h> >>> +#include <adc.h> >>> #include <asm/io.h> >>> #include <asm/arch/boot_mode.h> >>> >>> +void set_back_to_bootrom_dnl_flag(void) >>> +{ >>> + writel(BOOT_BROM_DOWNLOAD, CONFIG_ROCKCHIP_BOOT_MODE_REG); >>> +} >>> + >>> +/* >>> + * detect download key status by adc, most rockchip >>> + * based boards use adc sample the download key status, >>> + * but there are also some use gpio. So it's better to >>> + * make this a weak function that can be override by >>> + * some special boards. >>> + */ >>> +#define KEY_DOWN_MIN_VAL 0 >>> +#define KEY_DOWN_MAX_VAL 30 >>> + >>> +__weak int rockchip_dnl_key_pressed(void) >>> +{ >>> + unsigned int val; >>> + >>> + if (adc_channel_single_shot("saradc", 1, &val)) { >>> + printf("%s adc_channel_single_shot fail!\n", __func__); >> >> This should be a pr_debug() or pr_err(). > > Okay, I will update it.
Never mind. I’ll change this to a pr_err() when I commit. >> Thanks. >> >>> + return false; >>> + } >>> + >>> + if ((val >= KEY_DOWN_MIN_VAL) && (val <= KEY_DOWN_MAX_VAL)) >>> + return true; >>> + else >>> + return false; >>> +} >>> + >>> +void rockchip_dnl_mode_check(void) >>> +{ >>> + if (rockchip_dnl_key_pressed()) { >>> + printf("download key pressed, entering download mode..."); >>> + set_back_to_bootrom_dnl_flag(); >>> + do_reset(NULL, 0, 0, NULL); >>> + } >>> +} >>> + >>> int setup_boot_mode(void) >>> { >>> void *reg = (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG; >>> int boot_mode = readl(reg); >>> >>> + rockchip_dnl_mode_check(); >>> + >>> + boot_mode = readl(reg); >>> debug("boot mode %x.\n", boot_mode); >>> >>> /* Clear boot mode */ _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot