rk3588 DTS文件中 &vbus5v0_typec_pwr_en{ status = "okay"; gpio = <&pca9555 PCA_IO1_4 GPIO_ACTIVE_HIGH>; //PCA_IO 14 };含义
时间: 2024-04-03 17:36:51 浏览: 202
这段代码是一个设备树节点的定义,其中包含一个名为`vbus5v0_typec_pwr_en`的节点。这个节点的作用是控制USB Type-C端口上的电源输出,它的状态被设置为"okay",表示该节点是可用的。同时,这个节点还包含了一个GPIO引脚的定义,它使用了PCA9555芯片的IO1_4引脚,并且被配置为高电平有效。这个GPIO引脚的状态可以通过软件控制,从而控制USB Type-C端口的电源输出状态。
相关问题
if(anx_request_voltage_in_100mv(1)>=150 &&(xEC_TypeC_PD_Charge_Path_Selecct==0 ||xEC_TypeC_PD_Charge_Path_Selecct==1)) //Voltage >=20V { //CC1 xEC_TypeC_PD_Charge_Path_Selecct=1; SET_MASK(xEC_ChargePath, BIT1); PDVBUS1_EN_N_LO(); // MTK vbus enable Low Enable GPIO69 if(xEC_PDPWR_EN_Flag<=50) { xEC_PDPWR_EN_Flag++; PDPWR_EN_LO();//GPIO7D Default Low When Charge }else{ PDPWR_EN_HI();//GPIO7D Default High When Charge } //printf("\r\nCC1 AC Detected checked\r\n"); pd_current=(unsigned int)anx_request_current_in_50ma(1); xEC_PD_Support_Current_L=pd_current &0xff; xEC_PD_Support_Current_H=pd_current >> 8; PD_Support_MAX_Current=pd_current*50; }
这段代码是一个条件语句,检查输入电压是否大于等于150,并且判断xEC_TypeC_PD_Charge_Path_Selecct的值是否为0或1。如果满足这两个条件,程序将执行一系列操作。
首先,将xEC_TypeC_PD_Charge_Path_Selecct的值设置为1,并设置xEC_ChargePath的第1位为1。然后,通过调用PDVBUS1_EN_N_LO()函数来使能MTK的VBUS引脚(GPIO69)。接下来,检查xEC_PDPWR_EN_Flag的值是否小于等于50,如果是,则将xEC_PDPWR_EN_Flag递增1,并调用PDPWR_EN_LO()函数将GPIO7D引脚设置为低电平。如果xEC_PDPWR_EN_Flag的值大于50,则调用PDPWR_EN_HI()函数将GPIO7D引脚设置为高电平。
最后,通过调用anx_request_current_in_50ma(1)函数获取PD支持的电流值,并将其分别保存在xEC_PD_Support_Current_L和xEC_PD_Support_Current_H变量中。PD_Support_MAX_Current变量存储了PD支持的最大电流值,计算方式为pd_current乘以50。
请注意,这只是代码的一部分,可能还有其他相关的代码。
static void kpoc_power_off_check(struct mtk_charger *info) { unsigned int boot_mode = info->bootmode; int vbus = 0; int counter = 0; /* 8 = KERNEL_POWER_OFF_CHARGING_BOOT */ /* 9 = LOW_POWER_OFF_CHARGING_BOOT */ if (boot_mode == 8 || boot_mode == 9) { vbus = get_vbus(info); if ((vbus >= 0 && vbus < 2500 && !mtk_is_charger_on(info) && !info->pd_reset) || (vbus >= 0 && vbus < 2500 && get_charger_type(info) == POWER_SUPPLY_TYPE_WIRELESS)) { chr_err("Unplug Charger/USB in KPOC mode, vbus=%d, shutdown\n", vbus); while (1) { if (counter >= 20000) { chr_err("%s, wait too long\n", __func__); kernel_power_off(); break; } if (info->is_suspend == false) { chr_err("%s, not in suspend, shutdown\n", __func__); kernel_power_off(); } else { chr_err("%s, suspend! cannot shutdown\n", __func__); msleep(20); } counter++; } } charger_send_kpoc_uevent(info); } }请详细分析一下这段函数
这段函数是用于检测充电器状态并在特定情况下自动关机的函数。该函数接受一个指向 mtk_charger 结构体的指针作为参数。
函数首先获取当前设备的启动模式,如果启动模式为8或9,则表示当前设备处于KERNEL_POWER_OFF_CHARGING_BOOT或LOW_POWER_OFF_CHARGING_BOOT模式下。
如果设备处于这两种模式之一,则检查当前USB的电压值和充电器类型。如果USB电压小于2500,且充电器未插入或处于无线充电状态,则需要自动关机。
在此之后,函数会进入一个无限循环,检查设备是否在挂起状态。如果设备不在挂起状态,则直接关机。如果设备在挂起状态,则等待20毫秒,然后再次检查是否在挂起状态。如果等待时间超过20000,函数会输出错误信息并执行关机操作。
最后,函数会发送一个uevent事件通知,以通知其他组件设备已经进入了KPOC模式。
阅读全文