首页 > 其他分享 >typec role switch流程

typec role switch流程

时间:2023-07-23 11:22:05浏览次数:29  
标签:lib chg TYPEC switch role mode typec

  • smblite_lib_typec_port_type_set
  • schedule_delayed_work(&chg->role_reversal_check, msecs_to_jiffies(ROLE_REVERSAL_DELAY_MS));
  • smblite_lib_typec_role_check_work
  • static void smblite_lib_typec_role_check_work(struct work_struct *work)
    {
            struct smb_charger *chg = container_of(work, struct smb_charger,
                                            role_reversal_check.work);
            int rc = 0;
    
            if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) {
                    chg->pr_swap_in_progress = false;
                    vote(chg->awake_votable, TYPEC_SWAP_VOTER, false, 0);
                    return;
            }
    
            mutex_lock(&chg->typec_lock);
    
            switch (chg->dr_mode) {
            case TYPEC_PORT_SNK:
                    if (chg->typec_mode < POWER_SUPPLY_TYPEC_SOURCE_DEFAULT) {
                            smblite_lib_dbg(chg, PR_MISC, "Role reversal not latched to UFP in %d msecs. Resetting to DRP mode\n",
                                                    ROLE_REVERSAL_DELAY_MS);
                            rc = smblite_lib_force_dr_mode(chg, TYPEC_PORT_DRP);
                            if (rc < 0)
                                    smblite_lib_err(chg, "Couldn't to set DRP mode, rc=%d\n",
                                                    rc);
                    } else {
                            chg->power_role = POWER_SUPPLY_TYPEC_PR_SINK;
                            typec_set_pwr_role(chg->typec_port, TYPEC_SINK);
                            typec_set_data_role(chg->typec_port, TYPEC_DEVICE);
                            smblite_lib_dbg(chg, PR_MISC, "Role changed successfully to SINK");
                    }
                    break;
            case TYPEC_PORT_SRC:
                    if (chg->typec_mode >= POWER_SUPPLY_TYPEC_SOURCE_DEFAULT
                            || chg->typec_mode == POWER_SUPPLY_TYPEC_NONE) {
                            smblite_lib_dbg(chg, PR_MISC, "Role reversal not latched to DFP in %d msecs. Resetting to DRP mode\n",
                                                    ROLE_REVERSAL_DELAY_MS);
                            chg->pr_swap_in_progress = false;
                            chg->typec_role_swap_failed = true;
                            rc = smblite_lib_force_dr_mode(chg,
                                                            TYPEC_PORT_DRP);
                            if (rc < 0)
                                    smblite_lib_err(chg, "Couldn't to set DRP mode, rc=%d\n",
                                                            rc);
                    } else {
                            chg->power_role = POWER_SUPPLY_TYPEC_PR_SOURCE;
                            typec_set_pwr_role(chg->typec_port, TYPEC_SOURCE);
                            typec_set_data_role(chg->typec_port, TYPEC_HOST);
                            smblite_lib_dbg(chg, PR_MISC, "Role changed successfully to SOURCE");
                    }
                    break;
            default:
                    pr_debug("Already in DRP mode\n");
                    break;
            }
    
            chg->pr_swap_in_progress = false;
            vote(chg->awake_votable, TYPEC_SWAP_VOTER, false, 0);
            mutex_unlock(&chg->typec_lock);
    }
    

      

标签:lib,chg,TYPEC,switch,role,mode,typec
From: https://www.cnblogs.com/yuanqiangfei/p/17574802.html

相关文章

  • FreeSWITCH添加g729编码及pcap音频提取
    操作系统:debian11(bullseye,docker)、Windows10_x64FreeSWITCH版本:1.10.9Docker版本:23.0.6Python版本 : 3.9.2 日常工作中,有时候会遇到g729编码的相关内容,但FreeSWITCH默认是不支持g729编码转码的,今天记录下使用开源的bcg729进行g729转码的过程(本文仅作技术研究,......
  • python sip freeswitch
    PythonSIPandFreeSWITCHIntroductionInthisarticle,wewillexplorehowtousePythontointeractwithFreeSWITCH,anopen-sourcetelephonyplatform.WewillspecificallyfocusonutilizingtheSessionInitiationProtocol(SIP)moduleinPythontoest......
  • android 修改switch样式
    Android修改Switch样式Switch是Android中常用的开关控件,用来在两个不同状态之间切换。默认情况下,Switch的样式是系统自带的,但是我们可以通过修改样式来自定义Switch的外观。本文将介绍如何修改Switch样式,并提供代码示例。利用样式文件修改样式首先,我们需要创建一个样......
  • MIT 6.S081 Thread switching
    Multiplexingxv6通过将cpu从一个进程切换到另一个进程来实现multiplex(多路复用),进程的切换会在两种情形下发生:xv6的sleep与wakeup机制在进程等待IO完成或者等待子进程退出又或者在sleep系统调用中等待的时候切换进程。xv6会周期性地强制切换进程,从而应对那些长时......
  • switch case 中 case 后值有多个,或者是一个范围的编码方式
    case low ... high :case范围的行为就好像为从 low 到 high(包含边界值)的给定范围内的每个值指定了case标签。(如果 low 和 high 相等,则case范围仅指定一个值。)下限值和上限值必须符合C标准的要求,即它们必须是有效的整型常量表达式(C标准6.8.4.2)。case范围和c......
  • switch写法详解
    我们在开发项目中经常遇到对数据的判断进行相应的逻辑(if..else ,三元运算等),Switch语句用来选择多个需要执行的代码块,一定程度上简化了if....else1.语法switch(表达式){casen:代码块break;casen:代码块break;default:默认代码块}2.代码解释计算一次switch......
  • ios uiswitch大小
    iOSUISwitch大小在iOS开发中,UISwitch是一个常用的控件,用于切换开关状态的显示。UISwitch的大小是可以自定义的,本文将介绍如何调整UISwitch的大小,并提供一些代码示例。1.调整UISwitch的大小UISwitch的大小可以通过调整其frame属性来实现。frame属性包含了控件的位置和尺寸信息,......
  • JDK有用的新特性-Switch
    目录箭头表达式,新的case标签yeild返回值JavaRecordSwitch的三个方面,参考:JEP361支持箭头表达式支持yied返回值支持JavaRecord箭头表达式,新的case标签Switch新的语法,caselabel->表达式|throw语句|blockcaselabel_1,label_2,...,label_n->expressio......
  • 如何超越312个Role的限制
    在SAP中,可以分配给用户的配置文件数量有限制。从历史上看,一直保留300和312的限制,阻止向用户分配过多的权限。使用事务Su02,可以显示配置文件的内容,不建议通过SU02去维护配置文件,一般都是通过PFCG去生成配置文件。 上图中在双击(SU02-输入profile的名字,直接回车,然后看到上......
  • java代替Switch 的方法
    Java代替Switch的方法在Java编程中,我们经常使用switch语句来根据不同的条件执行不同的代码块。然而,当有大量的条件需要判断时,switch语句会变得冗长而且难以维护。幸运的是,Java提供了一些替代switch语句的方法,使代码更加简洁和可读性更强。1.使用多态多态是面向对象编程的重要概......