This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM4378:LCD 无法正常工作、背光 (ecap0) 上没有 PWM 输出

Guru**** 2826195 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1629232/am4378-lcd-not-working-and-no-pwm-output-on-backlight-ecap0

器件型号: AM4378

您好:

我将使用定制 AM437X 板开发产品。 (基于 AM437X-gp-EVM)

几乎完成了、但 LCD 和 LCD 背光不起作用。

当我使用示波器测量背光引脚时、它会输出恒定的 3.6V 高电平、而不是 PWM 信号。

但是、“/sys/class/backlight/backlight “目录包含“max_brightness"和“和“brightness"等“等文件。

液晶屏也无法正常工作。

下面是我编写的 dts 文件。

// dts //////////////////////////////

/dts-v1/;

#include "am4372.dtsi"
#include <dt-bindings/pinctrl/am43xx.h>
#include <dt-bindings/pwm/pwm.h>
#include <dt-bindings/gpio/gpio.h>

/ {
    model = "TI AM437x UPE1";
    compatible = "ti,am437x-upe1","ti,am4372","ti,am43";

    chosen {
        stdout-path = &uart0;
    };
    
    aliases {
        display0 = &lcd0;
    };

    evm_v3_3d: fixedregulator-v3_3d {
        compatible = "regulator-fixed";
        regulator-name = "evm_v3_3d";
        regulator-min-microvolt = <3300000>;
        regulator-max-microvolt = <3300000>;
        enable-active-high;
    };
    
    /* TPS51200 */
    vtt_fixed: fixedregulator-vtt {
        compatible = "regulator-fixed";
        regulator-name = "vtt_fixed";
        regulator-min-microvolt = <3300000>;
        regulator-max-microvolt = <3300000>;
        regulator-always-on;
        regulator-boot-on;
        /*enable-active-high;*/
        /*gpio = <&gpio5 7 GPIO_ACTIVE_HIGH>;*/
    };

    
    /* Gpio leds */
    gpio-leds {
        compatible = "gpio-leds";

        status_led0 {
            label = "status_led0";
            gpios = <&gpio1 24 GPIO_ACTIVE_LOW>;
            linux,default-trigger = "heartbeat";
        };
    };
    
    /* LCD Backlight */
    lcd_bl: backlight {
        compatible = "pwm-backlight";
        //50000 => 20kHz
        pwms = <&ecap0 0 50000 PWM_POLARITY_INVERTED>;
        brightness-levels = <10 35 70 105 140 175 210 245 255>;
        default-brightness-level = <3>;
    };

    /* 1280x800 LCD */
    lcd0: display {
        compatible = "panel-dpi";
        label = "lcd";

        backlight = <&lcd_bl>;
        
        panel-timing {
            clock-frequency = <70946400>;
            hactive = <1280>;
            vactive = <800>;
            hfront-porch = <52>;
            hsync-len = <58>;
            hback-porch = <52>;
            vfront-porch = <6>;
            vsync-len = <10>;
            vback-porch = <6>;
            hsync-active = <1>;
            vsync-active = <1>;
            de-active = <1>;
            pixelclk-active = <1>;
        };

        port {
            lcd_in: endpoint {
                remote-endpoint = <&dpi_out>;
            };
        };
    };
    
    cpus {
        cpu@0 {
            cpu0-supply = <&dcdc2>;
        };
    };
};

&am43xx_pinmux {
    pinctrl-names = "default";

    /* I2C0: PMIC, EEPROM */
    i2c0_pins: i2c0_pins {
        pinctrl-single,pins = <
            AM4372_IOPAD(0x98c, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)  /* i2c0_sda */
            AM4372_IOPAD(0x988, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)  /* i2c0_scl */
        >;
    };

   .

   .

   .
    
    /* LCD */
    dss_pins: dss_pins {
        pinctrl-single,pins = <
            AM4372_IOPAD(0x820, PIN_OUTPUT_PULLUP | MUX_MODE1) /*gpmc ad 8 -> DSS DATA 23 */
            AM4372_IOPAD(0x824, PIN_OUTPUT_PULLUP | MUX_MODE1)
            AM4372_IOPAD(0x828, PIN_OUTPUT_PULLUP | MUX_MODE1)
            AM4372_IOPAD(0x82c, PIN_OUTPUT_PULLUP | MUX_MODE1)
            AM4372_IOPAD(0x830, PIN_OUTPUT_PULLUP | MUX_MODE1)
            AM4372_IOPAD(0x834, PIN_OUTPUT_PULLUP | MUX_MODE1)
            AM4372_IOPAD(0x838, PIN_OUTPUT_PULLUP | MUX_MODE1)
            AM4372_IOPAD(0x83c, PIN_OUTPUT_PULLUP | MUX_MODE1) /*gpmc ad 15 -> DSS DATA 16 */
            AM4372_IOPAD(0x8a0, PIN_OUTPUT_PULLUP | MUX_MODE0) /* DSS DATA 0 */
            AM4372_IOPAD(0x8a4, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8a8, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8ac, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8b0, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8b4, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8b8, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8bc, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8c0, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8c4, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8c8, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8cc, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8d0, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8d4, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8d8, PIN_OUTPUT_PULLUP | MUX_MODE0)
            AM4372_IOPAD(0x8dc, PIN_OUTPUT_PULLUP | MUX_MODE0) /* DSS DATA 15 */
            AM4372_IOPAD(0x8e0, PIN_OUTPUT_PULLUP | MUX_MODE0) /* DSS VSYNC */
            AM4372_IOPAD(0x8e4, PIN_OUTPUT_PULLUP | MUX_MODE0) /* DSS HSYNC */
            AM4372_IOPAD(0x8e8, PIN_OUTPUT_PULLUP | MUX_MODE0) /* DSS PCLK */
            AM4372_IOPAD(0x8ec, PIN_OUTPUT_PULLUP | MUX_MODE0) /* DSS AC BIAS EN */

        >;
    };
    
    ecap0_pins: backlight_pins {
        pinctrl-single,pins = <
            AM4372_IOPAD(0x964, PIN_OUTPUT | MUX_MODE0)
        >;
    };
};

&i2c0 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&i2c0_pins>;
    clock-frequency = <100000>;

    tps65218: tps65218@24 {
        reg = <0x24>;
        compatible = "ti,tps65218";
        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>; /* NMIn */
        interrupt-parent = <&gic>;
        interrupt-controller;
        #interrupt-cells = <2>;

        dcdc1: regulator-dcdc1 {
            compatible = "ti,tps65218-dcdc1";
            regulator-name = "vdd_core";
            regulator-min-microvolt = <912000>;
            regulator-max-microvolt = <1144000>;
            regulator-boot-on;
            regulator-always-on;
        };

       .

       .

       .
};

.

.

.

&epwmss0 {
status = "okay";
};

&ecap0 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&ecap0_pins>;
    //pwm-cells = <3>;
};

&dss {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&dss_pins>;

    port {
        dpi_out: endpoint@0 {
            remote-endpoint = <&lcd_in>;
            data-lines = <24>;
        };
    };
};

////////////

 

该问题是否与器件驱动程序或 Linux 内核配置有关、而不是与 DTS 文件有关?

请提供帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kim:
    背光和显示屏输出为 2 个独立输出。 由于背光目前不起作用、我们无法确定显示屏是否正常工作。
    对于显示器件、您能否尝试探测 HSYNC、VSYNC、PCLK 和两条数据线、以检查在运行 kmstest 等任何显示应用时是否看到任何信号?

    请使用代码块的插入->代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    不生成 HSYNC、VSYNC、PCLK 信号。

    我在/dev 目录中也找不到任何 fb*设备。

    [ 0.790863]面板简单显示屏:未找到电源、使用虚拟调节器
    [0.791092] panel-simple display:指定缺少 bus_format
    [0.791102]面板简单显示:预计在{6,8}中出现 BPC、但得到:0

    启动时显示上述日志。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、
    似乎您在“panel-dpi"dts 设置“ 设置中缺少某些配置。 我们没有任何关于如何使用“panel-dpi “的示例、您可以在社区论坛中查看。
    但是、是否可以尝试以下与 lcd0 节点定义兼容的方法:

    panel {
    	compatible = "newhaven,nhd-4.3-480272ef-atxl";
    	port {
    		lcd_in: endpoint {
    			remote-endpoint = <&dpi_out>;
    		};
    	};
    };

    上面使用面板简单驱动程序、并定义了所有总线标志等。 如果这样做有效、您可以根据您的用例使用所需参数在面板内简单创建新节点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我按照您的说明修改了 DTS 文件、但仍然不起作用。

    实际上、我不确定问题是与 dts 文件、器件驱动程序还是内核配置有关。

    我根据“AM437X-gp-evm.dts"修改“修改了 dts 文件、但不能正常工作。

    我还有一个问题。
    “AM437X-gp-evm.dts"中“中没有面板时序信息(例如分辨率,HSYNC 或 vsync)。 此配置在哪里?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、
    抱歉、您可以尝试 https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/arch/arm/boot/dts/ti/omap/am437x-gp-evm.dts?h=ti-linux-6.12.y#n88 中所示的操作吗 

    “AM437X-gp-evm.dts"中“中没有面板时序信息(例如分辨率,HSYNC 或 vsync)。 此配置在何处?

    lcd0: display {
    		compatible = "osddisplays,osd070t1718-19ts", "panel-dpi";
    		label = "lcd";
    
    		backlight = <&lcd_bl>;
    
    		port {
    			lcd_in: endpoint {
    				remote-endpoint = <&dpi_out>;
    			};
    		};
    	};

    这已与 panel-simple.c 中定义的参数一同使用:

    static const struct drm_display_mode osddisplays_osd070t1718_19ts_mode  = {
    	.clock = 33000,
    	.hdisplay = 800,
    	.hsync_start = 800 + 210,
    	.hsync_end = 800 + 210 + 30,
    	.htotal = 800 + 210 + 30 + 16,
    	.vdisplay = 480,
    	.vsync_start = 480 + 22,
    	.vsync_end = 480 + 22 + 13,
    	.vtotal = 480 + 22 + 13 + 10,
    	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
    };
    
    static const struct panel_desc osddisplays_osd070t1718_19ts = {
    	.modes = &osddisplays_osd070t1718_19ts_mode,
    	.num_modes = 1,
    	.bpc = 8,
    	.size = {
    		.width = 152,
    		.height = 91,
    	},
    	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
    	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE |
    		DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
    	.connector_type = DRM_MODE_CONNECTOR_DPI,
    };

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kim:
    我假设您 能够使用默认 DTS(DTS 中的注释部分)探测 DPI 信号。
    如果是上述情况、我建议首先更改 panel-simple.c 文件中的时序参数、然后重新编译内核驱动程序以进行检查、而不是像您当前正在做的那样在 DT 中指定。

    我们应该首先能够消除这些错误:
    [0.791092] panel-simple display:指定缺少 bus_format
    [0.791102]面板简单显示:预计在{6,8}中出现 BPC、但得到:0

    /dev/dri/card 下列出一些器件

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    感谢您的持续支持。

    将 CONFIG_DRM_OMAP 设置为是后、开始输出 PCLK、VSYNC 和 HSYNC 等时钟。

    背光也正常工作。

    我使用下面的 LCD DTS。

    lcd0: display {
    		compatible = "osddisplays,osd070t1718-19ts", "panel-dpi";
    		label = "lcd";
    
    		backlight = <&lcd_bl>;
    
    		port {
    			lcd_in: endpoint {
    				remote-endpoint = <&dpi_out>;
    			};
    		};
    	};

    最后、我想调整时钟和分辨率、以便与我现在使用的 LCD 相匹配。

    是否只修改 dts 文件就足够了、或者我是否还需要修改 panel-simple.c 等内核源文件?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kim:
    我们仅测试了基于面板简单的面板规格。 我建议的方法是修改相同的内容。 更正式的方法是在面板简单的驱动程序中为您的特定面板创建另一个面板实例、并使用兼容的实例。
    如果您打算使用 DTS 方法、您可以自由地这样做、 如果该方法出现问题、您将很难获得进一步的支持。