1 /*
2  * (C) Copyright 2016 Rockchip Electronics Co., Ltd
3  *
4  * SPDX-License-Identifier:     GPL-2.0+
5  */
6 
7 #include <common.h>
8 #include <dm.h>
9 #include <dm/pinctrl.h>
10 #include <dm/uclass-internal.h>
11 #include <asm/arch/periph.h>
12 #include <power/regulator.h>
13 #include <spl.h>
14 
15 DECLARE_GLOBAL_DATA_PTR;
16 
17 int board_init(void)
18 {
19 	struct udevice *pinctrl, *regulator;
20 	int ret;
21 
22 	/*
23 	 * The PWM do not have decicated interrupt number in dts and can
24 	 * not get periph_id by pinctrl framework, so let's init them here.
25 	 * The PWM2 and PWM3 are for pwm regulater.
26 	 */
27 	ret = uclass_get_device(UCLASS_PINCTRL, 0, &pinctrl);
28 	if (ret) {
29 		debug("%s: Cannot find pinctrl device\n", __func__);
30 		goto out;
31 	}
32 
33 	/* Enable pwm0 for panel backlight */
34 	ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM0);
35 	if (ret) {
36 		debug("%s PWM0 pinctrl init fail! (ret=%d)\n", __func__, ret);
37 		goto out;
38 	}
39 
40 	ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM2);
41 	if (ret) {
42 		debug("%s PWM2 pinctrl init fail!\n", __func__);
43 		goto out;
44 	}
45 
46 	ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_PWM3);
47 	if (ret) {
48 		debug("%s PWM3 pinctrl init fail!\n", __func__);
49 		goto out;
50 	}
51 
52 	ret = regulators_enable_boot_on(false);
53 	if (ret)
54 		debug("%s: Cannot enable boot on regulator\n", __func__);
55 
56 	ret = regulator_get_by_platname("vcc5v0_host", &regulator);
57 	if (ret) {
58 		debug("%s vcc5v0_host init fail! ret %d\n", __func__, ret);
59 		goto out;
60 	}
61 
62 	ret = regulator_set_enable(regulator, true);
63 	if (ret) {
64 		debug("%s vcc5v0-host-en set fail!\n", __func__);
65 		goto out;
66 	}
67 
68 out:
69 	return 0;
70 }
71 
72 void spl_board_init(void)
73 {
74 	struct udevice *pinctrl;
75 	int ret;
76 
77 	ret = uclass_get_device(UCLASS_PINCTRL, 0, &pinctrl);
78 	if (ret) {
79 		debug("%s: Cannot find pinctrl device\n", __func__);
80 		goto err;
81 	}
82 
83 	/* Enable debug UART */
84 	ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_UART_DBG);
85 	if (ret) {
86 		debug("%s: Failed to set up console UART\n", __func__);
87 		goto err;
88 	}
89 
90 	preloader_console_init();
91 	return;
92 err:
93 	printf("%s: Error %d\n", __func__, ret);
94 
95 	/* No way to report error here */
96 	hang();
97 }
98