• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (C) 2022 Beken Corporation
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "sys_hal.h"
16 #include "sys_driver.h"
17 #include "sys_driver_common.h"
18 
sys_drv_usb_analog_phy_en(bool ctrl,void * arg)19 uint32_t sys_drv_usb_analog_phy_en(bool ctrl, void *arg)
20 {
21 	uint32_t int_level = rtos_disable_int();
22 
23 	sys_hal_usb_analog_phy_en(ctrl);
24 
25 	rtos_enable_int(int_level);
26 	return SYS_DRV_SUCCESS;
27 }
28 
sys_drv_usb_analog_speed_en(bool ctrl,void * arg)29 uint32_t sys_drv_usb_analog_speed_en(bool ctrl, void *arg)
30 {
31 	uint32_t int_level = rtos_disable_int();
32 	uint32_t ret = SYS_DRV_FAILURE;
33 	ret = sys_amp_res_acquire();
34 	if(ret != BK_OK)
35 		return ret;
36 
37 	sys_hal_usb_analog_speed_en(ctrl);
38 
39 	if(!ret)
40 		ret = sys_amp_res_release();
41 	if(ret != BK_OK)
42 		return ret;
43 
44 	rtos_enable_int(int_level);
45 	return SYS_DRV_SUCCESS;
46 }
47 
sys_drv_usb_analog_ckmcu_en(bool ctrl,void * arg)48 uint32_t sys_drv_usb_analog_ckmcu_en(bool ctrl, void *arg)
49 {
50 	uint32_t int_level = rtos_disable_int();
51 	uint32_t ret = SYS_DRV_FAILURE;
52 
53 	ret = sys_amp_res_acquire();
54 	if(ret != BK_OK)
55 		return ret;
56 
57 	sys_hal_usb_analog_ckmcu_en(ctrl);
58 
59 	if(!ret)
60 		ret = sys_amp_res_release();
61 	if(ret != BK_OK)
62 		return ret;
63 
64 	rtos_enable_int(int_level);
65 	return SYS_DRV_SUCCESS;
66 }
67 
sys_drv_usb_charge_start()68 void sys_drv_usb_charge_start()
69 {
70 /*
71 	bk7271: usb charge:
72 	SCTRL_BASE:0x00800000
73 	Reg26 ana_reg4 bit[21] aud_pll_vsel
74 	Reg26 ana_reg4 bit[19]	hw :0  sw:1
75 	Reg25 ana_reg3 bit[27:28]  11
76 	Reg26 ana_reg4 bit[13:14] 11  dpll
77 	Reg25 ana_reg3 bit[18:16]  111
78 
79 	please check bk7271 VS bk7256
80 */
81 }
82 
sys_drv_usb_charge_stop(bool ctrl)83 void sys_drv_usb_charge_stop(bool ctrl)
84 {
85 	uint32_t int_level = rtos_disable_int();
86 
87 	sys_hal_usb_enable_charge(ctrl);
88 
89 	rtos_enable_int(int_level);
90 }
91 
sys_drv_usb_charge_ctrl(bool ctrl,void * arg)92 void sys_drv_usb_charge_ctrl(bool ctrl, void *arg)
93 {
94 	uint32_t int_level = rtos_disable_int();
95 
96 	if(ctrl)
97 		sys_drv_usb_charge_start();
98 	else
99 		sys_drv_usb_charge_stop(ctrl);
100 
101 	rtos_enable_int(int_level);
102 }
103 
104 /*
105  * bk7271: usb charge calibration:
106  * SCTRL_BASE:0x00800000
107  * nternal hardware calibration
108  * lcf calibration
109  * Added 5V voltage on Vusb
110  * Added 4.2V voltage on vbatterySet pwd=0
111  *
112  * Icp calibration
113  * Added parallel 60ohm resistor and 100nF capacitor from vbattery to ground.(Removed the external 4.2V)
114  * Set pwd=0
115  * Porb=0
116 
117  * vcv calibration
118  * Added 5V voltage on Vusb
119  * Added 4.2V voltage on vbattery
120  * Set pwd=0
121  * vPorb=0
122 */
sys_drv_usb_charge_cal(sys_drv_charge_step_t step,void * arg)123 void sys_drv_usb_charge_cal(sys_drv_charge_step_t step, void *arg)
124 {
125 	uint32_t int_level = rtos_disable_int();
126 
127 	switch(step) {
128 	case CHARGE_STEP1: {
129 		sys_hal_usb_charge_vlcf_cal();
130 		break;
131 	}
132 	case CHARGE_STEP2: {
133 		sys_hal_usb_charge_icp_cal();
134 		break;
135 	}
136 	case CHARGE_STEP3: {
137 		sys_hal_usb_charge_vcv_cal();
138 		break;
139 	}
140 	case CHARGE_STEP4: {
141 		sys_hal_usb_charge_get_cal();
142 		break;
143 	}
144 	default:
145 		break;
146 	}
147 
148 	rtos_enable_int(int_level);
149 }
150 
151