IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> (2)Xavier USB type c 接口分析 -> 正文阅读

[C++知识库](2)Xavier USB type c 接口分析

xavier开发套件中使用了PD controller CYPD4226-40LQXIT
CYPRESS的 PD controller USB控制芯片:

电路图如下:

设备树文件中,配置了PD Controller的信息

lkernel-4.9/hardware/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2888-0001-p2822-0000-common.dtsi

1.kernel/kernel-4.9/hardware/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2822-disp.dtsi

中定义了typec的一些接口信息,用于显示:

关于显示的绑定文件:

1.kernel/kernel-5.10/kernel/nvidia/Documentation/devicetree/bindings/video/nvidia,tegra-display-hub.txt

设备树文件:

1.kernel/kernel-4.9/hardware/nvidia/soc/t19x/kernel-dts/tegra194-soc/tegra194-soc-base.dtsi

中设备显示配置:

head0: nvdisplay@15200000

compatible = "nvidia,tegra194-dc";

		head0: nvdisplay@15200000 {
			status = "disabled";
			compatible = "nvidia,tegra194-dc";
			reg = <0x0 0x15200000 0x0 0x10000>;
			interrupts = <0 153 4>;

			iommus = <&smmu TEGRA_SID_NVDISPLAY>;
			iso-smmu;
			non-coherent;

			nvidia,dc-ctrlnum = <0>;
			nvidia,cmu-enable = <0x1>;

			clock-names = "nvdisplay_disp",
				      "nvdisplayhub", "nvdisplay_p0",
				      "nvdisplay_p1", "nvdisplay_p2",
				      "nvdisplay_p3", "pllp_display",
				      "pll_d", "plld2",
				      "plld3", "plld4",
				      "emc";
			clocks = <&bpmp_clks TEGRA194_CLK_NVDISPLAY_DISP>,
				 <&bpmp_clks TEGRA194_CLK_NVDISPLAYHUB>,
				 <&bpmp_clks TEGRA194_CLK_NVDISPLAY_P0>,
				 <&bpmp_clks TEGRA194_CLK_NVDISPLAY_P1>,
				 <&bpmp_clks TEGRA194_CLK_NVDISPLAY_P2>,
				 <&bpmp_clks TEGRA194_CLK_NVDISPLAY_P3>,
				 <&bpmp_clks TEGRA194_CLK_PLLP_OUT0>,
				 <&bpmp_clks TEGRA194_CLK_PLLD>,
				 <&bpmp_clks TEGRA194_CLK_PLLD2>,
				 <&bpmp_clks TEGRA194_CLK_PLLD3>,
				 <&bpmp_clks TEGRA194_CLK_PLLD4>,
				 <&bpmp_clks TEGRA194_CLK_EMC>;
			reset-names = "misc", "wgrp0", "wgrp1", "wgrp2",
				      "wgrp3", "wgrp4", "wgrp5", "head0";
			resets = <&bpmp_resets TEGRA194_RESET_NVDISPLAY0_MISC>,
				 <&bpmp_resets TEGRA194_RESET_NVDISPLAY0_WGRP0>,
				 <&bpmp_resets TEGRA194_RESET_NVDISPLAY0_WGRP1>,
				 <&bpmp_resets TEGRA194_RESET_NVDISPLAY0_WGRP2>,
				 <&bpmp_resets TEGRA194_RESET_NVDISPLAY0_WGRP3>,
				 <&bpmp_resets TEGRA194_RESET_NVDISPLAY0_WGRP4>,
				 <&bpmp_resets TEGRA194_RESET_NVDISPLAY0_WGRP5>,
				 <&bpmp_resets TEGRA194_RESET_NVDISPLAY0_HEAD0>;
			fb_reserved = <&fb0_reserved>;
			iommu-direct-regions = <&fb0_reserved &fb1_reserved
						&fb2_reserved &fb3_reserved>;

			pinctrl-names = "hdmi-dp0-dpd-disable", "hdmi-dp0-dpd-enable",
					"hdmi-dp1-dpd-disable", "hdmi-dp1-dpd-enable",
					"hdmi-dp2-dpd-disable", "hdmi-dp2-dpd-enable",
					"hdmi-dp3-dpd-disable", "hdmi-dp3-dpd-enable";
			pinctrl-0 = <&hdmi_dp0_dpd_disable>;
			pinctrl-1 = <&hdmi_dp0_dpd_enable>;
			pinctrl-2 = <&hdmi_dp1_dpd_disable>;
			pinctrl-3 = <&hdmi_dp1_dpd_enable>;
			pinctrl-4 = <&hdmi_dp2_dpd_disable>;
			pinctrl-5 = <&hdmi_dp2_dpd_enable>;
			pinctrl-6 = <&hdmi_dp3_dpd_disable>;
			pinctrl-7 = <&hdmi_dp3_dpd_enable>;
		};
&head0 {
	status = "okay";
	nvidia,fb-bpp = <32>;
	nvidia,fbmem-size = <265420800>; /* 8K (7680*4320) 32bpp double buffered */
	nvidia,fb-flags = <TEGRA_FB_FLIP_ON_PROBE>;
	win-mask = <0x3>;
	nvidia,fb-win = <0>;
	nvidia,dc-connector = <&sor2>;
	nvidia,dc-flags = <TEGRA_DC_FLAG_ENABLED>;
	avdd_hdmi-supply = <&p2888_spmic_sd0>; /* 1v0 */
	avdd_hdmi_pll-supply = <&p2888_spmic_sd1>; /* 1v8 */
	vdd_hdmi_5v0-supply = <&p2822_vdd_hdmi_5v0>; /* 5v0 */
};

&head1 {
	status = "okay";
	nvidia,fb-bpp = <32>;
	nvidia,fbmem-size = <265420800>; /* 8K (7680*4320) 32bpp double buffered */
	nvidia,fb-flags = <TEGRA_FB_FLIP_ON_PROBE>;
	win-mask = <0xC>;
	nvidia,fb-win = <2>;
	nvidia,dc-connector = <&sor0>;
	nvidia,dc-flags = <TEGRA_DC_FLAG_ENABLED>;
	vdd-dp-pwr-supply = <&p2888_spmic_sd0>;
	avdd-dp-pll-supply = <&p2888_spmic_sd1>;
	vdd-edp-sec-mode-supply = <&battery_reg>;
	vdd-dp-pad-supply = <&battery_reg>;
	vdd_hdmi_5v0-supply = <&p2822_vdd_hdmi_5v0>;
};

1.kernel/kernel-4.9/kernel/nvidia/drivers/video/tegra/dc/of_dc.c

tegra_dc_probe

解析设备树中的数据,然后驱动进行配置

of_dc_parse_platform_data

tegra_dc_register_typec_edev

dc 接口具体分析就不贴了,代码挺多!

USB VBUS 的设备树配置如下:

	external-connection {
		vbus_id_extcon: extcon@1 {
			compatible = "extcon-gpio-states";
			reg = <0x1>;
			extcon-gpio,name = "VBUS";
			extcon-gpio,cable-states = <
						0x0 0x1
						0x1 0x0>;
			gpios = <&tegra_main_gpio TEGRA194_MAIN_GPIO(Z, 1) 0>;
			extcon-gpio,out-cable-names = <EXTCON_USB EXTCON_USB_HOST EXTCON_NONE>;
			wakeup-source;
			#extcon-cells = <1>;
		};
	};

extcon:External Connector framework
从名字看主要表征外部连接器的,通过gpio状态去识别外部连接器的类型,并通知关心外部连接器状态的驱动。
主要驱动代码路径:
kernel/msm-4.19/include/linux/extcon.h
kernel/msm-4.19/drivers/extcon

Jetson AGX Xavier支持4路加强型的USB接口,但不全是能用的,因为PCIE, SATA, UFS, and XUSB公用了UPHY.

USB TYPEC 接出的引脚图:

?D+/D- 连接到了UTMI,SSTX/SSRX 连接到了UPHY.

直接去掉TYPE C的PD controller及功能

Jetson/FAQ/BSP/Remove TypeC - eLinux.org

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-12 16:18:51  更:2022-05-12 16:19:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:12:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码