Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

draft: sunxi: pinephone: differentiate hw revisions 1.2 and 1.2b #1

Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions arch/arm/dts/Makefile
Original file line number Diff line number Diff line change
@@ -760,6 +760,7 @@ dtb-$(CONFIG_MACH_SUN50I) += \
sun50i-a64-pinephone-1.0.dtb \
sun50i-a64-pinephone-1.1.dtb \
sun50i-a64-pinephone-1.2.dtb \
sun50i-a64-pinephone-1.2b.dtb \
sun50i-a64-pinetab.dtb \
sun50i-a64-sopine-baseboard.dtb \
sun50i-a64-teres-i.dtb
16 changes: 16 additions & 0 deletions arch/arm/dts/sun50i-a64-pinephone-1.2b.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
// Copyright (C) 2020 Ondrej Jirman <megous@megous.com>

/dts-v1/;

#include "sun50i-a64-pinephone-1.2.dts"

/ {
model = "Pine64 PinePhone (1.2b)";
compatible = "pine64,pinephone-1.2b", "pine64,pinephone", "allwinner,sun50i-a64";
};

&lis3mdl {
status = "disabled";
};

51 changes: 40 additions & 11 deletions board/sunxi/board.c
Original file line number Diff line number Diff line change
@@ -18,6 +18,7 @@
#include <image.h>
#include <init.h>
#include <log.h>
#include <i2c.h>
#include <mmc.h>
#include <axp_pmic.h>
#include <generic-phy.h>
@@ -52,6 +53,15 @@

DECLARE_GLOBAL_DATA_PTR;

#define PINEPHONE_LIS3MDL_I2C_ADDR 0x1E

/* I2C1 */
#if defined(CONFIG_I2C0_ENABLE)
#define PINEPHONE_LIS3MDL_I2C_BUS 1
#else
#define PINEPHONE_LIS3MDL_I2C_BUS 0
#endif

void i2c_init_board(void)
{
#ifdef CONFIG_I2C0_ENABLE
@@ -602,7 +612,9 @@ void sunxi_board_init(void)

#if defined CONFIG_AXP152_POWER || defined CONFIG_AXP209_POWER || \
defined CONFIG_AXP221_POWER || defined CONFIG_AXP305_POWER || \
defined CONFIG_AXP809_POWER || defined CONFIG_AXP818_POWER
defined CONFIG_AXP809_POWER || defined CONFIG_AXP818_POWER || \
defined CONFIG_AXP803_POWER

power_failed = axp_init();

if (IS_ENABLED(CONFIG_AXP_DISABLE_BOOT_ON_POWERON) && !power_failed) {
@@ -619,11 +631,12 @@ void sunxi_board_init(void)
defined CONFIG_AXP818_POWER
power_failed |= axp_set_dcdc1(CONFIG_AXP_DCDC1_VOLT);
#endif
#if !defined(CONFIG_AXP305_POWER)
#if !defined(CONFIG_AXP305_POWER) && !defined(CONFIG_AXP803_POWER)
power_failed |= axp_set_dcdc2(CONFIG_AXP_DCDC2_VOLT);
power_failed |= axp_set_dcdc3(CONFIG_AXP_DCDC3_VOLT);
#endif
#if !defined(CONFIG_AXP209_POWER) && !defined(CONFIG_AXP818_POWER)
#if !defined(CONFIG_AXP209_POWER) && !defined(CONFIG_AXP818_POWER) && \
!(defined(CONFIG_AXP803_POWER))
power_failed |= axp_set_dcdc4(CONFIG_AXP_DCDC4_VOLT);
#endif
#if defined CONFIG_AXP221_POWER || defined CONFIG_AXP809_POWER || \
@@ -635,28 +648,31 @@ void sunxi_board_init(void)
defined CONFIG_AXP818_POWER
power_failed |= axp_set_aldo1(CONFIG_AXP_ALDO1_VOLT);
#endif
#if !defined(CONFIG_AXP305_POWER)
#if !defined(CONFIG_AXP305_POWER) && !(defined(CONFIG_AXP803_POWER))
power_failed |= axp_set_aldo2(CONFIG_AXP_ALDO2_VOLT);
#endif
#if !defined(CONFIG_AXP152_POWER) && !defined(CONFIG_AXP305_POWER)
#if !defined(CONFIG_AXP152_POWER) && !defined(CONFIG_AXP305_POWER) && \
!(defined(CONFIG_AXP803_POWER))
power_failed |= axp_set_aldo3(CONFIG_AXP_ALDO3_VOLT);
#endif
#ifdef CONFIG_AXP209_POWER
power_failed |= axp_set_aldo4(CONFIG_AXP_ALDO4_VOLT);
#endif

#if defined(CONFIG_AXP221_POWER) || defined(CONFIG_AXP809_POWER) || \
defined(CONFIG_AXP818_POWER)
defined(CONFIG_AXP818_POWER) || defined(CONFIG_AXP803_POWER)
power_failed |= axp_set_dldo(1, CONFIG_AXP_DLDO1_VOLT);
power_failed |= axp_set_dldo(2, CONFIG_AXP_DLDO2_VOLT);
#if !defined CONFIG_AXP809_POWER
#if !defined CONFIG_AXP809_POWER && !(defined(CONFIG_AXP803_POWER))
power_failed |= axp_set_dldo(3, CONFIG_AXP_DLDO3_VOLT);
power_failed |= axp_set_dldo(4, CONFIG_AXP_DLDO4_VOLT);
#endif
#if !(defined(CONFIG_AXP803_POWER))
power_failed |= axp_set_eldo(1, CONFIG_AXP_ELDO1_VOLT);
power_failed |= axp_set_eldo(2, CONFIG_AXP_ELDO2_VOLT);
power_failed |= axp_set_eldo(3, CONFIG_AXP_ELDO3_VOLT);
#endif
#endif

#ifdef CONFIG_AXP818_POWER
power_failed |= axp_set_fldo(1, CONFIG_AXP_FLDO1_VOLT);
@@ -962,6 +978,9 @@ int board_fit_config_name_match(const char *name)
{
const char *best_dt_name = get_spl_dt_name();
int ret;
#if CONFIG_IS_ENABLED(DM_I2C)
struct udevice *bus, *dev;
#endif

#ifdef CONFIG_DEFAULT_DEVICE_TREE
if (best_dt_name == NULL)
@@ -988,11 +1007,21 @@ int board_fit_config_name_match(const char *name)
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";
if (gpio_get_value(SUNXI_GPL(6)) == 0) {
best_dt_name = "sun50i-a64-pinephone-1.2b";

/* 1.2 has different I2C magnetometer */
#if CONFIG_IS_ENABLED(DM_I2C)
if (!uclass_get_device_by_seq(UCLASS_I2C, PINEPHONE_LIS3MDL_I2C_BUS, &bus))
if (!dm_i2c_probe(bus, PINEPHONE_LIS3MDL_I2C_ADDR, 0, &dev))
best_dt_name = "sun50i-a64-pinephone-1.2";
#else
if (!i2c_set_bus_num(PINEPHONE_LIS3MDL_I2C_BUS))
if (!i2c_probe(PINEPHONE_LIS3MDL_I2C_ADDR))
best_dt_name = "sun50i-a64-pinephone-1.2";
#endif
} 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);
10 changes: 9 additions & 1 deletion configs/pinephone_defconfig
Original file line number Diff line number Diff line change
@@ -9,11 +9,19 @@ CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y
CONFIG_DRAM_CLK=552
CONFIG_DRAM_ZQ=3881949
CONFIG_MMC_SUNXI_SLOT_EXTRA=2
CONFIG_I2C1_ENABLE=y
CONFIG_PINEPHONE_DT_SELECTION=y
# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
CONFIG_OF_LIST="sun50i-a64-pinephone-1.1 sun50i-a64-pinephone-1.2"
CONFIG_SPL_I2C=y
CONFIG_OF_LIST="sun50i-a64-pinephone-1.1 sun50i-a64-pinephone-1.2 sun50i-a64-pinephone-1.2b"
CONFIG_SPL_SYS_I2C_LEGACY=y
CONFIG_SYS_I2C_SUN8I_RSB=y
CONFIG_SYS_I2C_MVTWSI=y
CONFIG_LED_STATUS=y
CONFIG_LED_STATUS_GPIO=y
CONFIG_LED_STATUS0=y
CONFIG_LED_STATUS_BIT=114
CONFIG_LED_STATUS_STATE=2
CONFIG_AXP803_POWER=y
CONFIG_AXP_DLDO1_VOLT=3300
CONFIG_AXP_DLDO2_VOLT=4200
12 changes: 10 additions & 2 deletions drivers/power/Kconfig
Original file line number Diff line number Diff line change
@@ -101,6 +101,14 @@ config AXP305_POWER
Select this to enable support for the axp305 pmic found on most
H616 boards.

config AXP803_POWER
bool "axp803 pmic support"
depends on MACH_SUN50I
select AXP_PMIC_BUS
select CMD_POWEROFF
---help---
Say y here to enable support for the axp803 pmic found on A64 boards.

config AXP809_POWER
bool "axp809 pmic support"
depends on MACH_SUN9I
@@ -307,7 +315,7 @@ config AXP_ALDO4_VOLT

config AXP_DLDO1_VOLT
int "axp pmic dldo1 voltage"
depends on AXP221_POWER || AXP809_POWER || AXP818_POWER
depends on AXP221_POWER || AXP803_POWER|| AXP809_POWER || AXP818_POWER
default 0
---help---
Set the voltage (mV) to program the axp pmic dldo1 at, set to 0 to
@@ -317,7 +325,7 @@ config AXP_DLDO1_VOLT

config AXP_DLDO2_VOLT
int "axp pmic dldo2 voltage"
depends on AXP221_POWER || AXP809_POWER || AXP818_POWER
depends on AXP221_POWER || AXP803_POWER|| AXP809_POWER || AXP818_POWER
default 3000 if MACH_SUN9I
default 0
---help---
1 change: 1 addition & 0 deletions drivers/power/Makefile
Original file line number Diff line number Diff line change
@@ -12,6 +12,7 @@ obj-$(CONFIG_AXP152_POWER) += axp152.o
obj-$(CONFIG_AXP209_POWER) += axp209.o
obj-$(CONFIG_AXP221_POWER) += axp221.o
obj-$(CONFIG_AXP305_POWER) += axp305.o
obj-$(CONFIG_AXP803_POWER) += axp803.o
obj-$(CONFIG_AXP809_POWER) += axp809.o
obj-$(CONFIG_AXP818_POWER) += axp818.o
obj-$(CONFIG_EXYNOS_TMU) += exynos-tmu.o
Loading