Part Number: TDA2EG-17
HI master:
sdk: processor_sdk_vision_03_05_00_00
my board boot as linux target,
now
/* PHY_PWR_CMD */
static Int32 halHdmiWpSetPhyPwr(vpsHal_hdmiPhyPwr status)
{
Int32 retVal = BSP_SOK;
UInt32 cnt;
UInt32 regVal;
GT_0trace(VpsHalTrace, GT_INFO, "YGJ halHdmiWpSetPhyPwr-------------\r\n");
/* Command for power control of HDMI PHY */
HW_WR_FIELD32(
SOC_HDMI_WP_BASE + HDMI_WP_PWR_CTRL,
HDMI_WP_PWR_CTRL_PHY_CMD,
status);
/* Status of the power control of HDMI PHY */
regVal = HW_RD_FIELD32(SOC_HDMI_WP_BASE + HDMI_WP_PWR_CTRL,
HDMI_WP_PWR_CTRL_PHY_STATUS);
cnt = 0;
while ((regVal != status) && (cnt < 1000U))
{
BspOsal_sleep((UInt32) 1U);
regVal = HW_RD_FIELD32(SOC_HDMI_WP_BASE + HDMI_WP_PWR_CTRL,
HDMI_WP_PWR_CTRL_PHY_STATUS);
cnt++;
GT_1trace(VpsHalTrace, GT_INFO, "YGJ halHdmiWpSetPhyPwr------------cnt=%d\r\n",cnt);
}
if (cnt >= 1000U)
{
if (VPSHAL_HDMI_PHYPWRCMD_TXON == status)
{
/* In case HDMI cable is not connected PHYPWR status wont change to
* TxOn till cable is connected. Donot return error here */
}
else
{
retVal = BSP_ETIMEOUT;
}
GT_0trace(VpsHalTrace, GT_INFO, "YGJ halHdmiWpSetPhyPwr------------2-\r\n");
}
return (retVal);
}
Int32 vpshal_HdmiPhyPowerOn(const VpsHal_DssHdmiTimingParam *timing)
{
Int32 retVal = BSP_SOK;
UInt16 freqout = 1U;
GT_0trace(VpsHalTrace, GT_INFO, "YGJ vpshal_HdmiPhyPowerOn-------------\r\n");
/* enable divby2 */
HW_WR_FIELD32(
SOC_HDMI_PHY_BASE + HDMI_BIST_CONTROL,
HDMI_BIST_CONTROL_DIV2EN_HFBITCLK,
0x01U);
retVal = halHdmiWpSetPhyPwr(VPSHAL_HDMI_PHYPWRCMD_LDOON);
GT_1trace(VpsHalTrace, GT_INFO, "YGJ vpshal_HdmiPhyPowerOn-----------2--retVal=%d\r\n",retVal);
/*
* HDMI_WP_PWR_CTRL doesn't seem to reflect the change in power states,
* ignore the error for now - It should be on HPD else might burn out
*/
/*
* Read address 0 in order to get the SCP reset done completed
* Dummy access performed to make sure reset is done
*/
HW_RD_REG32(SOC_HDMI_PHY_BASE + HDMI_TX_CONTROL);
/*
* Write to phy address 0 to configure the clock
* use HFBITCLK write HDMI_TXPHY_TX_CONTROL_FREQOUT field
*/
if (timing->pixel_clock < 62500)
{
freqout = 0U;
}
else if ((timing->pixel_clock >= 62500) && (timing->pixel_clock < 185000))
{
freqout = 1U;
}
else
{
/* clock frequency > 185MHz */
freqout = 2U;
}
HW_WR_FIELD32(
SOC_HDMI_PHY_BASE + HDMI_TX_CONTROL,
HDMI_TX_CONTROL_FREQOUT,
freqout);
/* Write to phy address 1 to start HDMI line (TXVALID and TMDSCLKEN) */
HW_WR_REG32(SOC_HDMI_PHY_BASE + HDMI_DIGITAL_CONTROL, 0xF0000000U);
/* Write to phy address 3 to change the polarity control */
HW_WR_FIELD32(
SOC_HDMI_PHY_BASE + HDMI_PAD_CONFIG_CONTROL,
HDMI_PAD_CONFIG_CONTROL_FLIP_P_N_ORDER_CLK,
0x01U);
retVal += halHdmiWpSetPhyPwr(VPSHAL_HDMI_PHYPWRCMD_TXON);
GT_1trace(VpsHalTrace, GT_INFO, "vpshal_HdmiPhyPowerOn-------------retVal=%d\r\n",retVal);
return (retVal);
}
Because I did not connect to the HDMI receiver, resulting in
Int32 vpshal_HdmiPhyPowerOn (const VpsHal_DssHdmiTiming Param*timing)
Called
HalHdmiWpSetPhyPwr (VPSHAL_HDMI_PHYPWRCMD_TXON);
RegVal = HW_RD_FIELD32 (SOC_HDMI_WP_BASE + HDMI_WP_PWR_CTRL,
HDMI_WP_PWR_CTRL_PHY_STATUS;
The read state has never been VPSHAL_HDMI_PHYPWRCMD_TXON
RegVal!= VPSHAL_HDMI_PHYPWRCMD_TXON;
Static Int32 halHdmiWpSetPhyPwr (vpsHal_hdmiPhyPwr status)
{
...
RegVal = HW_RD_FIELD32 (SOC_HDMI_WP_BASE + HDMI_WP_PWR_CTRL,
HDMI_WP_PWR_CTRL_PHY_STATUS;
CNT = 0;
While ((regVal!= status) & (cnt < 1000U)
{
BspOsal_sleep ((UInt32) 1U);
RegVal = HW_RD_FIELD32 (SOC_HDMI_WP_BASE + HDMI_WP_PWR_CTRL,
HDMI_WP_PWR_CTRL_PHY_STATUS;
Cnt++;
}
If (cnt >= 1000U)
{
If (VPSHAL_HDMI_PHYPWRCMD_TXON== status)
{
/* In case HDMI cable is not connected PHYPWR status wont change to
* TxOn till cable is connected. Donot return error here*/
}
Else
{
RetVal = BSP_ETIMEOUT;
}
}
}
How can I keep the output when I don't connect to the HDMI receiver?