diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c index 45d9eae8700..b4f114aa31c 100644 --- a/arch/arm/mach-rockchip/board.c +++ b/arch/arm/mach-rockchip/board.c @@ -187,10 +187,16 @@ int board_late_init(void) return rk_board_late_init(); } +void __weak pmic_setup(void) +{ +} + int board_init(void) { int ret; + pmic_setup(); + #ifdef CONFIG_DM_REGULATOR ret = regulators_enable_boot_on(false); if (ret) diff --git a/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c b/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c index 3ab46ce3fc8..1cd0eddb0b5 100644 --- a/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c +++ b/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c @@ -14,6 +14,7 @@ #include #include #include +#include #define GRF_IO_VSEL_BT565_GPIO2AB 1 #define GRF_IO_VSEL_AUDIO_GPIO3D4A 2 @@ -55,3 +56,34 @@ int misc_init_r(void) return ret; } #endif + +static void pinephone_pro_init(void) +{ + struct udevice *pmic; + int ret; + + ret = uclass_first_device_err(UCLASS_PMIC, &pmic); + if (ret) { + printf("ERROR: PMIC not found! (%d)\n", ret); + return; + } + + /* + * Raise input current limit to 1.5A, which is a standard CDC charger + * allowance. + */ + ret = rk818_spl_configure_usb_input_current(pmic, 1500); + if (ret) + printf("ERROR: Input current limit setup failed!\n"); + + /* + * Close charger when USB lower then 3.26V + */ + rk818_spl_configure_usb_chrg_shutdown(pmic, 3260000); +} + +void pmic_setup(void) +{ + if (of_machine_is_compatible("pine64,pinephone-pro")) + pinephone_pro_init(); +}