mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
sunxi: board: Add PinePhone DT selection logic
There are two different publicly-released revisions of the PinePhone hardware, versions 1.1 and 1.2; and they need different device trees. Since some GPIO pins were rerouted, we can use that to distinguish between them. Acked-by: Maxime Ripard <mripard@kernel.org> Reviewed-by: Andre Przywara <andre.przywara@arm.com> Signed-off-by: Samuel Holland <samuel@sholland.org> Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
This commit is contained in:
parent
54ac5aa174
commit
8a8b73b6d7
2 changed files with 28 additions and 0 deletions
|
@ -1010,4 +1010,11 @@ config PINE64_DT_SELECTION
|
|||
option, the device tree selection code specific to Pine64 which
|
||||
utilizes the DRAM size will be enabled.
|
||||
|
||||
config PINEPHONE_DT_SELECTION
|
||||
bool "Enable PinePhone device tree selection code"
|
||||
depends on MACH_SUN50I
|
||||
help
|
||||
Enable this option to automatically select the device tree for the
|
||||
correct PinePhone hardware revision during boot.
|
||||
|
||||
endif
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include <asm/arch/dram.h>
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/mmc.h>
|
||||
#include <asm/arch/prcm.h>
|
||||
#include <asm/arch/spl.h>
|
||||
#include <linux/delay.h>
|
||||
#include <u-boot/crc.h>
|
||||
|
@ -922,6 +923,26 @@ int board_fit_config_name_match(const char *name)
|
|||
best_dt_name = "sun50i-a64-pine64";
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_PINEPHONE_DT_SELECTION
|
||||
if (strstr(best_dt_name, "-pinephone")) {
|
||||
/* Differentiate the PinePhone revisions by GPIO inputs. */
|
||||
prcm_apb0_enable(PRCM_APB0_GATE_PIO);
|
||||
sunxi_gpio_set_pull(SUNXI_GPL(6), SUNXI_GPIO_PULL_UP);
|
||||
sunxi_gpio_set_cfgpin(SUNXI_GPL(6), SUNXI_GPIO_INPUT);
|
||||
udelay(100);
|
||||
|
||||
/* PL6 is pulled low by the modem on v1.2. */
|
||||
if (gpio_get_value(SUNXI_GPL(6)) == 0)
|
||||
best_dt_name = "sun50i-a64-pinephone-1.2";
|
||||
else
|
||||
best_dt_name = "sun50i-a64-pinephone-1.1";
|
||||
|
||||
sunxi_gpio_set_cfgpin(SUNXI_GPL(6), SUNXI_GPIO_DISABLE);
|
||||
sunxi_gpio_set_pull(SUNXI_GPL(6), SUNXI_GPIO_PULL_DISABLE);
|
||||
prcm_apb0_disable(PRCM_APB0_GATE_PIO);
|
||||
}
|
||||
#endif
|
||||
|
||||
return strcmp(name, best_dt_name);
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue