rk3288 kernel-4.4 修改 mmc 编号

本文介绍如何在RK3288设备上将EMMC编号从mmc2改回mmc0的方法,涉及修改rk3288.dtsi文件中的EMMC配置顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原来 3.0 内核, emmc 的编号是 mmc0. 到了 4.4 变成 mmc2 了.

要改回 mmc0, 只要修改 rk3288.dtsi 中 emmc 的顺序就可以了

old mode 100644
new mode 100755
index 18e6897..ac56932
--- a/arch/arm/boot/dts/rk3288.dtsi
+++ b/arch/arm/boot/dts/rk3288.dtsi
@@ -278,6 +278,19 @@
                ports = <&vopl_out>, <&vopb_out>;
        };

+       emmc: dwmmc@ff0f0000 {
+               compatible = "rockchip,rk3288-dw-mshc";
+               clock-freq-min-max = <400000 150000000>;
+               clocks = <&cru HCLK_EMMC>, <&cru SCLK_EMMC>,
+                        <&cru SCLK_EMMC_DRV>, <&cru SCLK_EMMC_SAMPLE>;
+               clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
+               fifo-depth = <0x100>;
+               interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+               reg = <0x0 0xff0f0000 0x0 0x4000>;
+               status = "disabled";
+               supports-emmc;
+       };
+
        sdmmc: dwmmc@ff0c0000 {
                compatible = "rockchip,rk3288-dw-mshc";
                clock-freq-min-max = <400000 150000000>;
@@ -314,19 +327,6 @@
                status = "disabled";
        };

-       emmc: dwmmc@ff0f0000 {
:
                ports = <&vopl_out>, <&vopb_out>;
        };

+       emmc: dwmmc@ff0f0000 {
+               compatible = "rockchip,rk3288-dw-mshc";
+               clock-freq-min-max = <400000 150000000>;
+               clocks = <&cru HCLK_EMMC>, <&cru SCLK_EMMC>,
+                        <&cru SCLK_EMMC_DRV>, <&cru SCLK_EMMC_SAMPLE>;
+               clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
+               fifo-depth = <0x100>;
+               interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+               reg = <0x0 0xff0f0000 0x0 0x4000>;
+               status = "disabled";
+               supports-emmc;
+       };
+
        sdmmc: dwmmc@ff0c0000 {
                compatible = "rockchip,rk3288-dw-mshc";
                clock-freq-min-max = <400000 150000000>;
@@ -314,19 +327,6 @@
                status = "disabled";
        };

-       emmc: dwmmc@ff0f0000 {
-               compatible = "rockchip,rk3288-dw-mshc";
-               clock-freq-min-max = <400000 150000000>;
-               clocks = <&cru HCLK_EMMC>, <&cru SCLK_EMMC>,
-                        <&cru SCLK_EMMC_DRV>, <&cru SCLK_EMMC_SAMPLE>;
-               clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
-               fifo-depth = <0x100>;
-               interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
-               reg = <0x0 0xff0f0000 0x0 0x4000>;
-               status = "disabled";
-               supports-emmc;
-       };
-
        saradc: saradc@ff100000 {
                compatible = "rockchip,saradc";
                reg = <0x0 0xff100000 0x0 0x100>;

 

<think>我们正在为RK3326设备的Linux Kernel 4.4版本添加LVDS显示接口支持。根据要求,我们需要修改设备树(Device Tree)来配置LVDS接口。以下是步骤和注意事项: 1. **确定硬件连接和LVDS屏幕参数**:首先,我们需要知道LVDS屏幕的连接方式(例如,使用的接口是单通道还是双通道,屏幕的分辨率、时序参数等)。这些信息通常由屏幕厂商提供。 2. **查找和参考现有的设备树绑定文档**:在Linux内核文档中,有关于Rockchip LVDS接口的设备树绑定说明。我们可以参考: - 绑定文档路径:`Documentation/devicetree/bindings/display/rockchip/rockchip-lvds.txt` 3. **参考现有设备树文件**:在SDK中,可以查找类似平台的设备树配置作为参考。由于RK3326是64位处理器,我们查看: - 64位设备树路径:`arch/arm64/boot/dts/rockchip` 4. **修改设备树**:我们需要在设备树中添加LVDS节点并配置相关属性。以下是一个示例配置步骤: a. **打开RK3326的设备树文件**:通常,RK3326的设备树文件名为`rk3326-xxx.dts`或类似,其中xxx是板级名称。 b. **添加LVDS节点**:在设备树中,我们需要在`display-subsystem`节点下添加LVDS的配置。示例: ```dts &display_subsystem { status = "okay"; ports = <&vopb_out>, <&vopl_out>; logo-memory-region = <&drm_logo>; route { route_lvds: route-lvds { status = "okay"; connect = <&vopl_out_lvds>; }; }; }; &lvds { status = "okay"; ports { lvds_out: port@0 { reg = <0>; lvds_out_panel: endpoint { remote-endpoint = <&panel_in_lvds>; }; }; }; }; &vopl { status = "okay"; }; &vopl_mmu { status = "okay"; }; &vopl_out_lvds { status = "okay"; }; ``` c. **配置LVDS屏幕参数**:我们需要添加一个面板节点(panel node)来描述连接的LVDS屏幕。例如: ```dts panel { compatible = "panel-lvds"; width-mm = <154>; height-mm = <86>; data-mapping = "vesa-24"; panel-timing { clock-frequency = <72000000>; hactive = <1280>; vactive = <800>; hback-porch = <40>; hfront-porch = <40>; vback-porch = <10>; vfront-porch = <5>; hsync-len = <20>; vsync-len = <10>; hsync-active = <0>; vsync-active = <0>; de-active = <0>; pixelclk-active = <0>; }; port { panel_in_lvds: endpoint { remote-endpoint = <&lvds_out_panel>; }; }; }; ``` 注意:上述参数需要根据实际屏幕的规格书进行调整。 5. **配置时钟和电源**:根据硬件设计,可能还需要配置相关的时钟和电源。例如,如果LVDS需要特定的电源,需要在设备树中使能相应的稳压器。 6. **编译和测试**:修改设备树后,重新编译内核和设备树,并烧写到设备上进行测试。 **注意事项**: - 确保设备树中的节点名称和引用正确,避免特殊字符。 - 检查LVDS控制器的时钟源和像素时钟是否正确。 - 如果屏幕需要背光控制,还需要配置PWM和背光节点。 如果遇到问题,可以查看内核启动日志(`dmesg`)中关于LVDS和显示子系统的信息,以帮助调试。 **引用说明**:上述配置步骤参考了Rockchip内核文档和设备树绑定文档[^1]。 §§相关问题§§ 1. RK3326的LVDS接口支持的最大分辨率是多少? 2. 如何调试LVDS显示接口不工作的问题? 3. 在设备树中配置LVDS时,常见的错误有哪些?</think>### RK3326 Linux Kernel 4.4设备树中配置LVDS显示接口的步骤 #### 1. **确认硬件连接** - 检查RK3326开发板与LVDS屏幕的物理连接(如引脚定义、通道数量) - 获取屏幕规格书,确认关键参数: - 分辨率(如$1280 \times 800$) - 时序参数(hfront-porch/hback-porch/vfront-porch/vback-porch) - 数据通道数(单通道/双通道) - 像素时钟频率(如$50\text{MHz}$) #### 2. **添加LVDS设备树节点** 在设备树文件(如`rk3326-xxx.dts`)中添加以下内容: ```dts / { lvds_panel: lvds-panel { compatible = "panel-lvds"; width-mm = <223>; // 屏幕物理宽度(mm) height-mm = <125>; // 屏幕物理高度(mm) data-mapping = "jeida-24"; // LVDS数据映射格式 panel-timing { clock-frequency = <50000000>; // 像素时钟(Hz) hactive = <1280>; // 水平有效像素 vactive = <800>; // 垂直有效像素 hfront-porch = <40>; // 水平前沿 hback-porch = <40>; // 水平后沿 hsync-len = <10>; // 水平同步脉宽 vfront-porch = <10>; // 垂直前沿 vback-porch = <10>; // 垂直后沿 vsync-len = <5>; // 垂直同步脉宽 }; port { panel_in_lvds: endpoint { remote-endpoint = <&lvds_out>; // 连接LVDS控制器 }; }; }; }; &lvds { status = "okay"; ports { lvds_out: port@1 { reg = <1>; lvds_out_panel: endpoint { remote-endpoint = <&panel_in_lvds>; // 连接面板 }; }; }; }; // 确保显示子系统启用 &display_subsystem { status = "okay"; ports = <&vopb_out>, <&vopl_out>; logo-memory-region = <&drm_logo>; }; ``` #### 3. **配置VOP(视频输出处理器)** 根据硬件连接选择VOPB(主显示)或VOPL(辅助显示): ```dts &vopl { status = "okay"; }; &vopl_mmu { status = "okay"; }; &route_lvds { status = "okay"; connect = <&vopl_out_lvds>; // 绑定到VOPL输出 }; ``` #### 4. **时钟和电源配置** ```dts &lvds { pinctrl-names = "default"; pinctrl-0 = <&lcdc_lcdc>; // 使用正确的引脚控制组 // 配置LVDS时钟源(根据硬件设计) clocks = <&cru PCLK_LVDS>, <&cru SCLK_LVDS_IO>; clock-names = "pclk", "sclk"; }; // 屏幕电源使能(根据实际电路) &reg_lvds_power { regulator-name = "lvds_power"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; gpio = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>; // 实际GPIO引脚 enable-active-high; regulator-always-on; }; ``` #### 5. **编译和验证** - 编译设备树: ```bash make ARCH=arm64 dtbs ``` - 烧录后通过以下命令调试: ```bash dmesg | grep -i lvds # 检查驱动加载 cat /sys/kernel/debug/dri/0/state # 查看显示管线状态 ``` #### 关键注意事项: 1. **引脚复用配置**:确认`pinctrl-0`引用的引脚组在`&pinctrl`节点中正确定义 2. **时序参数**:屏幕时序错误会导致无显示或花屏,需严格按规格书配置 3. **双通道支持**:若使用双通道LVDS,需设置`dual-channel`属性: ```dts &lvds { rockchip,dual-channel = <1>; }; ``` 4. **参考官方绑定文档**:路径`SDK/kernel/Documentation/devicetree/bindings/display/rockchip/rockchip-lvds.txt`[^1] > **调试提示**:若显示异常,可通过调整`panel-timing`中的同步脉宽参数或检查`/sys/class/drm/card0-LVDS-1/status`接口确认连接状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值