[RK3588-Android12] 關于如何取消usb-typec的pd充電功能

問題描述

RK3588取消usb-typec的pd充電功能


解決方案:

在dts中fusb302節點下usb_con: connector子節點下添加如下熟悉:
請添加圖片描述
打上如下2個補丁

diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
index c8a4e57c9f9b..173f8cb75b8e 100644
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -317,6 +317,7 @@ struct tcpm_port {struct typec_partner *partner;enum typec_cc_status cc_req;
+	enum typec_cc_status src_rp;	/* work only if pd_supported == false */enum typec_cc_status cc1;enum typec_cc_status cc2;
@@ -324,6 +325,7 @@ struct tcpm_port {bool attached;bool connected;
+	bool pd_supported;enum typec_port_type port_type;/*
@@ -827,6 +829,9 @@ static enum typec_cc_status tcpm_rp_cc(struct tcpm_port *port)int nr_pdo = port->nr_src_pdo;int i;+	if (!port->pd_supported)
+		return port->src_rp;
+/** Search for first entry with matching voltage.* It should report the maximum supported current.
@@ -3682,9 +3687,11 @@ static int tcpm_src_attach(struct tcpm_port *port)if (ret < 0)return ret;-	ret = port->tcpc->set_pd_rx(port->tcpc, true);
-	if (ret < 0)
-		goto out_disable_mux;
+	if (port->pd_supported) {
+		ret = port->tcpc->set_pd_rx(port->tcpc, true);
+		if (ret < 0)
+			goto out_disable_mux;
+	}/** USB Type-C specification, version 1.2,
@@ -3715,7 +3722,8 @@ static int tcpm_src_attach(struct tcpm_port *port)out_disable_vconn:tcpm_set_vconn(port, false);out_disable_pd:
-	port->tcpc->set_pd_rx(port->tcpc, false);
+	if (port->pd_supported)
+		port->tcpc->set_pd_rx(port->tcpc, false);out_disable_mux:tcpm_mux_set(port, TYPEC_STATE_SAFE, USB_ROLE_NONE,TYPEC_ORIENTATION_NONE);
@@ -3931,6 +3939,20 @@ static enum typec_pwr_opmode tcpm_get_pwr_opmode(enum typec_cc_status cc)}}+static enum typec_cc_status tcpm_pwr_opmode_to_rp(enum typec_pwr_opmode opmode)
+{
+	switch (opmode) {
+	case TYPEC_PWR_MODE_USB:
+		return TYPEC_CC_RP_DEF;
+	case TYPEC_PWR_MODE_1_5A:
+		return TYPEC_CC_RP_1_5;
+	case TYPEC_PWR_MODE_3_0A:
+	case TYPEC_PWR_MODE_PD:
+	default:
+		return TYPEC_CC_RP_3_0;
+	}
+}
+static void run_state_machine(struct tcpm_port *port){int ret;
@@ -4061,6 +4083,10 @@ static void run_state_machine(struct tcpm_port *port)if (port->ams == POWER_ROLE_SWAP ||port->ams == FAST_ROLE_SWAP)tcpm_ams_finish(port);
+		if (!port->pd_supported) {
+			tcpm_set_state(port, SRC_READY, 0);
+			break;
+		}port->upcoming_state = SRC_SEND_CAPABILITIES;tcpm_ams_start(port, POWER_NEGOTIATION);break;
@@ -4333,7 +4359,10 @@ static void run_state_machine(struct tcpm_port *port)current_limit = PD_P_SNK_STDBY_MW / 5;tcpm_set_current_limit(port, current_limit, 5000);tcpm_set_charge(port, true);
-			tcpm_set_state(port, SNK_WAIT_CAPABILITIES, 0);
+			if (!port->pd_supported)
+				tcpm_set_state(port, SNK_READY, 0);
+			else
+				tcpm_set_state(port, SNK_WAIT_CAPABILITIES, 0);break;}/*
@@ -4582,7 +4611,8 @@ static void run_state_machine(struct tcpm_port *port)tcpm_set_vbus(port, true);if (port->ams == HARD_RESET)tcpm_ams_finish(port);
-		port->tcpc->set_pd_rx(port->tcpc, true);
+		if (port->pd_supported)
+			port->tcpc->set_pd_rx(port->tcpc, true);tcpm_set_attached_state(port, true);tcpm_set_state(port, SRC_UNATTACHED, PD_T_PS_SOURCE_ON);break;
@@ -6121,6 +6151,7 @@ EXPORT_SYMBOL_GPL(tcpm_tcpc_reset);static int tcpm_fw_get_caps(struct tcpm_port *port,struct fwnode_handle *fwnode){
+	const char *opmode_str;const char *cap_str;int ret;u32 mw, frs_current, pd_revision;
@@ -6153,22 +6184,37 @@ static int tcpm_fw_get_caps(struct tcpm_port *port,return ret;port->typec_caps.type = ret;port->port_type = port->typec_caps.type;
+	port->pd_supported = !fwnode_property_read_bool(fwnode, "pd-disable");port->slow_charger_loop = fwnode_property_read_bool(fwnode, "slow-charger-loop");if (port->port_type == TYPEC_PORT_SNK)goto sink;-	/* Get source pdos */
-	ret = fwnode_property_count_u32(fwnode, "source-pdos");
-	if (ret <= 0)
-		return -EINVAL;
+	/* Get Source PDOs for the PD port or Source Rp value for the non-PD port */
+	if (port->pd_supported) {
+		ret = fwnode_property_count_u32(fwnode, "source-pdos");
+		if (ret == 0)
+			return -EINVAL;
+		else if (ret < 0)
+			return ret;-	port->nr_src_pdo = min(ret, PDO_MAX_OBJECTS);
-	ret = fwnode_property_read_u32_array(fwnode, "source-pdos",
-					     port->src_pdo, port->nr_src_pdo);
-	if ((ret < 0) || tcpm_validate_caps(port, port->src_pdo,
-					    port->nr_src_pdo))
-		return -EINVAL;
+		port->nr_src_pdo = min(ret, PDO_MAX_OBJECTS);
+		ret = fwnode_property_read_u32_array(fwnode, "source-pdos",
+						     port->src_pdo, port->nr_src_pdo);
+		if (ret)
+			return ret;
+		ret = tcpm_validate_caps(port, port->src_pdo, port->nr_src_pdo);
+		if (ret)
+			return ret;
+	} else {
+		ret = fwnode_property_read_string(fwnode, "typec-power-opmode", &opmode_str);
+		if (ret)
+			return ret;
+		ret = typec_find_pwr_opmode(opmode_str);
+		if (ret < 0)
+			return ret;
+		port->src_rp = tcpm_pwr_opmode_to_rp(ret);
+	}if (port->port_type == TYPEC_PORT_SRC)return 0;
@@ -6182,6 +6228,11 @@ static int tcpm_fw_get_caps(struct tcpm_port *port,if (port->typec_caps.prefer_role < 0)return -EINVAL;sink:
+	port->self_powered = fwnode_property_read_bool(fwnode, "self-powered");
+
+	if (!port->pd_supported)
+		return 0;
+/* Get sink pdos */ret = fwnode_property_count_u32(fwnode, "sink-pdos");if (ret <= 0)
@@ -6198,9 +6249,7 @@ static int tcpm_fw_get_caps(struct tcpm_port *port,return -EINVAL;port->operating_snk_mw = mw / 1000;-	port->self_powered = fwnode_property_read_bool(fwnode, "self-powered");
-
-	/* FRS can only be supported byb DRP ports */
+	/* FRS can only be supported by DRP ports */if (port->port_type == TYPEC_PORT_DRP) {ret = fwnode_property_read_u32(fwnode, "new-source-frs-typec-current",&frs_current);
-- 
diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
index 173f8cb75b8e..afeed1a05545 100644
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -6512,6 +6512,13 @@ static int tcpm_psy_set_prop(struct power_supply *psy,struct tcpm_port *port = power_supply_get_drvdata(psy);int ret;+	/*
+	 * All the properties below are related to USB PD. The check needs to be
+	 * property specific when a non-pd related property is added.
+	 */
+	if (!port->pd_supported)
+		return -EOPNOTSUPP;
+switch (psp) {case POWER_SUPPLY_PROP_ONLINE:ret = tcpm_psy_set_online(port, val);
-- 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/46274.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/46274.shtml
英文地址,請注明出處:http://en.pswp.cn/web/46274.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用OpenCV尋找圖像中的輪廓

引言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺和機器學習軟件庫。它提供了大量的視覺處理功能&#xff0c;包括圖像和視頻捕獲、特征檢測與匹配、圖像變換、圖像分割、顏色空間轉換等。在圖像處理中&#xff0c;尋找圖像中的…

electron項目中實現視頻下載保存到本地

第一種方式&#xff1a;用戶自定義選擇下載地址位置 渲染進程 // 渲染進程// 引入 import { ipcRenderer } from "electron";// 列表行數據下載視頻操作&#xff0c;diffVideoUrl 是視頻請求地址 handleDownloadClick(row) {if (!row.diffVideoUrl) {this.$message…

【數字電路學習新助手】掌握電路仿真軟件,開啟數字電路知識的新篇章

在信息科技日新月異的今天&#xff0c;數字電路知識的重要性不言而喻。無論是通信工程、計算機科學與技術&#xff0c;還是電子信息技術等領域&#xff0c;數字電路都是基礎中的基礎。然而&#xff0c;對于初學者來說&#xff0c;數字電路的學習往往充滿了挑戰。幸運的是&#…

Axure中繼器入門:打造你的動態原型

前言 中繼器 是 Axure 中的一個高級功能&#xff0c;它能夠在靜態頁面上模擬后臺數據交互的操作&#xff0c;如增加、刪除、修改和查詢數據&#xff0c;盡管它不具備真實數據存儲能力。 中繼器就像是一個臨時的數據庫&#xff0c;為我們在設計原型時提供動態數據管理的體驗&a…

中職省培丨2024年大數據技術中職教師專業技能培訓班企業參觀實踐圓滿結束

7月17日&#xff0c;“2024年大數據技術中職教師專業技能培訓班&#xff08;省培&#xff09;”參訓老師蒞臨廣東泰迪智能科技股份有限公司產教融合實訓中心開展企業參觀實踐。泰迪智能科技董事長張良均、中職業務部總監李振林、中職業務部經理黃炳德、校企合作經理吳桂鋒及來自…

centos跳過首次創建用戶

centos跳過首次創建用戶 centos跳過首次創建用戶 在安裝系統后&#xff0c;登錄的時候總是讓新建一個普通用戶&#xff0c;很是煩人&#xff0c;于是想辦法解決一下 方法一 在CentOS上&#xff0c;圖形化登錄&#xff08;如GNOME&#xff09;通常要求您創建一個用戶來登錄。…

.net core appsettings.json 配置 http 無法訪問

1、在appsettings.json中配置"urls": "http://0.0.0.0:8188" 2、但是網頁無法打開 3、解決辦法&#xff0c;在Program.cs增加下列語句 app.UseAntiforgery();

vue 如何做一個動態的 BreadCrumb 組件,el-breadcrumb ElementUI

vue 如何做一個動態的 BreadCrumb 組件 el-breadcrumb ElementUI 一、ElementUI 中的 BreadCrumb 定義 elementUI 中的 Breadcrumb 組件是這樣定義的 <template><el-breadcrumb separator"/"><el-breadcrumb-item :to"{ path: / }">主…

爬蟲的概念

爬蟲&#xff08;Web Crawler 或 Web Spider&#xff09;是一種自動化腳本或程序&#xff0c;用于瀏覽萬維網&#xff08;World Wide Web&#xff09;并抓取網頁上的信息。它們按照設定的規則自動地訪問互聯網上的網頁&#xff0c;提取所需的數據&#xff0c;如文本、圖片、視頻…

搭建七日殺服務端系統選擇,系統如何選擇

《七日殺》是一款集合了第一人稱射擊、恐怖生存、塔防與角色扮演要素于一身的開放世界僵尸游戲。玩家需要在美國亞歷桑納地區作為幸存者生存&#xff0c;并探究整個事件背后的真相。對于喜歡這款游戲的玩家來說&#xff0c;搭建自己的專屬服務器不僅能降低延遲&#xff0c;還能…

精通Python數據可視化:Matplotlib柱狀圖、直方圖與餅狀圖實戰解析

精通Python數據可視化&#xff1a;Matplotlib柱狀圖、直方圖與餅狀圖實戰解析 引言 在數據分析和科學研究中&#xff0c;數據可視化扮演著至關重要的角色。Matplotlib是Python中一個廣泛使用的繪圖庫&#xff0c;它提供了豐富的繪圖功能和靈活的定制選項。本文將詳細介紹如何…

ubuntu 可以直接在圖像界面打開命令行嗎

是的&#xff0c;Ubuntu&#xff08;以及其他許多Linux發行版&#xff09;允許用戶直接在圖形界面&#xff08;GUI&#xff09;中打開命令行界面。這通常通過打開一個終端模擬器應用程序來實現&#xff0c;該應用程序提供了一個命令行窗口&#xff0c;用戶可以在其中輸入和執行…

修改文件的默認打開方式

修改文件的默認打開方式 選中文件&#xff0c;右擊&#xff0c;選擇屬性&#xff0c;如圖然后點擊更改&#xff0c;選擇想要的打開方式&#xff0c;再依次點擊 應用、保存 即可&#xff0c;如圖

Linux 環境下整體備份遷移 Docker 鏡像及數據教程

1. 介紹 本教程將引導您如何在 Linux 環境下備份和遷移 Docker 鏡像及其數據。我們將逐步介紹相關步驟&#xff0c;包括 Docker 鏡像的導出和導入、數據卷的備份和恢復等。通過本教程&#xff0c;您將能夠輕松掌握 Docker 容器的遷移操作。 2. 前置準備 在開始之前&#xff…

Redis中數據分片與分片策略

概述 數據分片是一種將數據分割并存儲在多個節點上的技術&#xff0c;可以有效提高系統的擴展性和性能。在Redis中&#xff0c;數據分片主要用于解決單個實例存儲容量和性能瓶頸的問題。通過將數據分散存儲到多個Redis節點中&#xff0c;可以將負載均衡到不同的服務器上&#…

Visual Studio使用——在vs中給vb.net項目添加新的窗口:新建的方式、添加已有窗口的方式

目錄 引出Visual Studio使用vb添加新的窗體自定義代碼片段vs顯示所有文件 總結Idea安裝和使用0.Java下載 和 IDEA工具1.首次新建項目2.隱藏文件不必要顯示文件3.目錄層級設置4.Settings設置選擇idea的場景提示代碼不區分大小寫 取消git的代碼作者顯示 引出 Visual Studio使用—…

基于Vue CLI 3構建Vue3項目(Vue2也可參考)

天行健&#xff0c;君子以自強不息&#xff1b;地勢坤&#xff0c;君子以厚德載物。 每個人都有惰性&#xff0c;但不斷學習是好好生活的根本&#xff0c;共勉&#xff01; 文章均為學習整理筆記&#xff0c;分享記錄為主&#xff0c;如有錯誤請指正&#xff0c;共同學習進步。…

Android Framework學習筆記(4)----Zygote進程

Zygote的啟動流程 Init進程啟動后&#xff0c;會加載并執行init.rc文件。該.rc文件中&#xff0c;就包含啟動Zygote進程的Action。詳見“RC文件解析”章節。 根據Zygote對應的RC文件&#xff0c;可知Zygote進程是由/system/bin/app_process程序來創建的。 app_process大致處…

PHP手邊酒店多商戶版平臺小程序系統源碼

&#x1f3e8;【旅行新寵】手邊酒店多商戶版小程序&#xff0c;一鍵解鎖住宿新體驗&#xff01;&#x1f6cc; &#x1f308;【開篇&#xff1a;旅行新伴侶&#xff0c;盡在掌握】&#x1f308; 還在為旅行中的住宿選擇而糾結嗎&#xff1f;是時候告別繁瑣的搜索和比價過程&a…

MT6985(天璣9200)芯片性能參數_MTK聯發科旗艦5G移動平臺處理器

MT6985天璣 9200 旗艦移動平臺擁有專業級影像、沉浸式游戲和先進移動顯示技術&#xff0c;以及更快捷、覆蓋更廣的 5G 和 支持 Wi-Fi 7 連接&#xff0c;具有高性能、高能效、低功耗表現。率先采用 Armv9 性能核&#xff0c;全部支持純 64 位應用&#xff0c;開啟高能效架構設計…