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.

Linux/AM5728: HDMI issue

Part Number: AM5728
Other Parts Discussed in Thread: TPD12S521

Tool/software: Linux

Question:

HDMI output don't work in our custom am5728 board,

Who triggers   HDMI_IRQ_LINK_CONNECT bit  or HDMI_IRQ_LINK_DISCONNECT bit of  HDMI_IRQ_STATUS in HDMI interrupt?

Develop environment in custom board:

1  cpu is AM5728

2  sdk is Processor SDK  03.03.00.04  Linux

3  hdmi esd is TPD12S521

 

Status of our custom board:

1  I2C of HMDI don't work in our custom board ,so we don't read edid,  remove reading edid code,  use the basic resolution 640x480,    EVM board work in this condition.

2 HPD signal is normal in our board.

3 after startup we detect that there is nothing in the HDMI_CLOCK+ in our board,  but there is signal in HDMI_CLOCK+ in EVM.

4 VDDA_HDMI is good in our board.

5 there are the same kernel and dts and file system between our custom board and EVM board in the experiment.

 

We find it’s different in function hdmi_irq_handler in hdmi5.c.

static irqreturn_t hdmi_irq_handler(int irq, void *data)

{

              struct hdmi_wp_data *wp = data;

              u32 irqstatus;

              irqstatus = hdmi_wp_get_irqstatus(wp);

              hdmi_wp_set_irqstatus(wp, irqstatus);

              if ((irqstatus & HDMI_IRQ_LINK_CONNECT) &&

                                           irqstatus & HDMI_IRQ_LINK_DISCONNECT) {

                             u32 v;

                             /*

                              * If we get both connect and disconnect interrupts at the same

                              * time, turn off the PHY, clear interrupts, and restart, which

                              * raises connect interrupt if a cable is connected, or nothing

                              * if cable is not connected.

                              */

                             printk("hdmi_irq_handler 0\n");  //our custom come here after startup             

                             hdmi_wp_set_phy_pwr(wp, HDMI_PHYPWRCMD_OFF);

                              /*

                              * We always get bogus CONNECT & DISCONNECT interrupts when

                              * setting the PHY to LDOON. To ignore those, we force the RXDET

                              * line to 0 until the PHY power state has been changed.

                              */

                             v = hdmi_read_reg(hdmi.phy.base, HDMI_TXPHY_PAD_CFG_CTRL);

                             v = FLD_MOD(v, 1, 15, 15); /* FORCE_RXDET_HIGH */

                             v = FLD_MOD(v, 0, 14, 7); /* RXDET_LINE */

                             hdmi_write_reg(hdmi.phy.base, HDMI_TXPHY_PAD_CFG_CTRL, v);

                             hdmi_wp_set_irqstatus(wp, HDMI_IRQ_LINK_CONNECT |

                                                          HDMI_IRQ_LINK_DISCONNECT); 

                             hdmi_wp_set_phy_pwr(wp, HDMI_PHYPWRCMD_LDOON);

                             REG_FLD_MOD(hdmi.phy.base, HDMI_TXPHY_PAD_CFG_CTRL, 0, 15, 15);

              } else if (irqstatus & HDMI_IRQ_LINK_CONNECT) {                        

                             printk("hdmi_irq_handler connect 1\n");  //EVM come here after startup

                                                         hdmi_wp_set_phy_pwr(wp, HDMI_PHYPWRCMD_TXON);

              } else if (irqstatus & HDMI_IRQ_LINK_DISCONNECT) {                          

                             printk("hdmi_irq_handler disconnect 2\n");

                             hdmi_wp_set_phy_pwr(wp, HDMI_PHYPWRCMD_LDOON);

              }

               return IRQ_HANDLED;

}

 

After startup, both of our board and EVM board can enter hdmi_irq_handler, but result are deferent.  

The result of hdmi_wp_get_irqstatus(wp)  in EVM board  is HDMI_IRQ_LINK_CONNECT, but it is  HDMI_IRQ_LINK_CONNECT and HDMI_IRQ_LINK_DISCONNECT in our board.

 In addition, when hmdi cable is connected with display, we turn on and off the power of display, EVM can enter hdmi_irq_handler , but our board can’t enter hdmi_irq_handler.

 

The HDMI interrupt is:

96                        HDMI_IRQ         HDMI interrupt

Register:

hdmi.h

HDMI_IRQ_STATUS                                                   0x58060028

#define HDMI_IRQ_LINK_CONNECT                      (1 << 25)

#define HDMI_IRQ_LINK_DISCONNECT                (1 << 26)

  

About document:

There is not detailed information about hdmi in 11.3 High-Definition Multimedia Interface of am5728 TRM spruhz6i.pdf.

We find a little in 8168 TRM, but it's not enough to understand the details.

 

our question  :

Who triggers   HDMI_IRQ_LINK_CONNECT bit or HDMI_IRQ_LINK_DISCONNECT bit of  HDMI_IRQ_STATUS in HDMI interrupt?

Is it HPD signal of HDMI?

 

Is there more detailed document about HDMI of am5728?

Thank you.