* reset the vdac) to avoid noise issue
*/
/* For txl,also need to keep bandgap always on:SWPL-1224 */
- /* if (rx.hdmirxdev->data->chip_id == CHIP_ID_TXL) */
+ /* if (rx.chip_id == CHIP_ID_TXL) */
/* vdac_enable(0, 0x10); */
/* open_flage = 0; */
rx.open_fg = 0;
/* 420 : hdmiout clk = pixel clk * 2 */
/* 422 : hdmiout clk = pixel clk * colordepth / 8 */
/* 444 : hdmiout clk = pixel clk */
- if (rx.hdmirxdev->data->chip_id < CHIP_ID_TL1) {
+ if (rx.chip_id < CHIP_ID_TL1) {
/* tl1 need verify this bug */
if ((rx.pre.colordepth > E_COLORDEPTH_8) &&
(prop->fps > 49) &&
void rx_emp_resource_allocate(struct device *dev)
{
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
/* allocate buffer */
if (!rx.empbuff.storeA)
rx.empbuff.storeA =
/*phys_addr_t p_addr;*/
/*struct page *pg_addr;*/
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
if (rx.empbuff.dump_mode == DUMP_MODE_EMP) {
if (rx.empbuff.pg_addr) {
dma_release_from_contiguous(dev,
if (hdevp->data) {
rx.chip_id = hdevp->data->chip_id;
- rx_pr("chip id:%d\n", rx.hdmirxdev->data->chip_id);
+ rx_pr("chip id:%d\n", rx.chip_id);
rx_pr("phy ver:%d\n", rx.hdmirxdev->data->phy_ver);
} else {
/*txlx chip for default*/
clk_rate = clk_get_rate(hdevp->skp_clk);
}
}
- if ((rx.hdmirxdev->data->chip_id == CHIP_ID_TXLX) ||
- (rx.hdmirxdev->data->chip_id == CHIP_ID_TXHD)) {
+ if ((rx.chip_id == CHIP_ID_TXLX) ||
+ (rx.chip_id == CHIP_ID_TXHD)) {
tmds_clk_fs = clk_get(&pdev->dev, "hdmirx_aud_pll2fs");
if (IS_ERR(tmds_clk_fs))
rx_pr("get tmds_clk_fs err\n");
clk_rate/1000000);
}
#endif
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
/*for audio clk measure*/
hdevp->meter_clk = clk_get(&pdev->dev, "cts_hdmirx_meter_clk");
if (IS_ERR(hdevp->meter_clk))
rx_pr("warning: no rev cmd mem\n");
rx_emp_resource_allocate(&(pdev->dev));
hdmirx_hw_probe();
+ hdmirx_init_params();
hdmirx_switch_pinmux(&(pdev->dev));
#ifdef CONFIG_AMLOGIC_LEGACY_EARLY_SUSPEND
register_early_suspend(&hdmirx_early_suspend_handler);
*
*
*/
-#define RX_VER2 "ver.2018/11/22"
+#define RX_VER2 "ver.2018/12/18"
/*print type*/
#define LOG_EN 0x01
#define EQ_LOG 0x20
#define REG_LOG 0x40
#define ERR_LOG 0x80
+#define EDID_LOG 0x100
#define VSI_LOG 0x800
/* 50ms timer for hdmirx main loop (HDMI_STATE_CHECK_FREQ is 20) */
uint32_t pll_rate;
uint32_t clk_rate;
uint32_t phy_bw;
+ uint32_t cablesel;
ulong timestap;
+ uint32_t err_sum;
+ uint32_t eq_data[256];
};
struct emp_buff {
unsigned int pwr_sts;
/* for debug */
/*struct pd_infoframe_s dbg_info;*/
- struct phy_sts physts;
+ struct phy_sts phy;
struct emp_buff empbuff;
};
do {
tag_data = p_edid[tag_offset];
if ((tag_data & 0xE0) == 0x20) {
- rx_pr("audio_\n");
+ if (log_level & EDID_LOG)
+ rx_pr("audio_");
aud_length = tag_data & 0x1F;
break;
}
p_edid[offset] = 1;
else
p_edid[offset] = 0;
- rx_pr("offset = %d\n", offset);
+ if (log_level & EDID_LOG)
+ rx_pr("offset = %d\n", offset);
}
return 0;
}
cancel_delayed_work(&eq_dwork);
/* for tl1 no SW eq */
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1)
return;
- }
for (i = 0; i < NTRYS; i++) {
if (SettingFinder() == 1) {
uint8_t pll_rate = hdmirx_rd_phy(PHY_MAINFSM_STATUS1) >> 9 & 3;
/* for tl1 no SW eq */
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
+ hdmirx_phy_init();
eq_sts = E_EQ_FINISH;
return 1;
}
static bool phy_fsm_enhancement = true;
/*unsigned int last_clk_rate;*/
-/* SNPS suggest to use the previous setting 0x3f when handle eq issues to
- * make clk_stable bit more stable(=1),but 0x3f may misjudge 46.25~92.5
- * TMDSCLK as 25~46.25M TMDSCLK,pll_rate&REQUESTCLK will become
- * not correct. so revert the setting to the default value 0x6
- * according to the PHY spec
- */
-static uint8_t phy_lock_thres = 0x6;
-static uint32_t phy_cfg_clk = 24000;
static uint32_t modet_clk = 24000;
/* top_irq_en bit[16:13] hdcp_sts */
uint32_t packet_fifo_cfg;
int pd_fifo_start_cnt = 0x80;
/* Controls equalizer reference voltage. */
-int eq_ref_voltage = 0x1ea;
int hdcp22_on;
MODULE_PARM_DESC(hdcp22_on, "\n hdcp22_on\n");
module_param(hdcp22_on, int, 0664);
* SECURE_MODE:secure OS path
*/
int hdcp14_key_mode = NORMAL_MODE;
-
int aud_ch_map;
int ignore_sscp_charerr = 1;
int ignore_sscp_tmds = 1;
+int find_best_eq;
+int eq_try_cnt = 50;
/*------------------------variable define end------------------------------*/
static int check_regmap_flag(unsigned int addr)
{
return 1;
-
}
/*
int data;
unsigned long dev_offset = 0x10;
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
data = rd_reg(MAP_ADDR_MODULE_TOP,
addr + reg_maps[MAP_ADDR_MODULE_TOP].phy_addr);
} else {
ulong flags;
unsigned int dev_offset = 0x10;
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
wr_reg(MAP_ADDR_MODULE_TOP,
addr + reg_maps[MAP_ADDR_MODULE_TOP].phy_addr, data);
} else {
unsigned int dev_offset = 0;
unsigned int tempaddr = 0;
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
dev_offset = TOP_DWC_BASE_OFFSET +
reg_maps[MAP_ADDR_MODULE_TOP].phy_addr;
if ((addr >= TOP_EDID_OFFSET) &&
unsigned long dev_offset = 0;
unsigned int tempaddr = 0;
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
dev_offset = TOP_DWC_BASE_OFFSET +
reg_maps[MAP_ADDR_MODULE_TOP].phy_addr;
if ((addr >= TOP_EDID_OFFSET) &&
void hdmirx_wr_ctl_port(unsigned int offset, unsigned int data)
{
unsigned long flags;
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
- /* need to do for tl1 ... */
-
-
- } else {
+ if (rx.chip_id < CHIP_ID_TL1) {
spin_lock_irqsave(®_rw_lock, flags);
wr_reg(MAP_ADDR_MODULE_TOP, hdmirx_ctrl_port+offset, data);
spin_unlock_irqrestore(®_rw_lock, flags);
unsigned long dev_offset = 0;
spin_lock_irqsave(®_rw_lock, flags);
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
hdmirx_wr_top(TOP_SW_RESET, 1);
udelay(1);
hdmirx_wr_top(TOP_SW_RESET, 0);
{
int clk = false;
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
/* sqofclk */
clk = hdmirx_rd_top(TOP_MISC_STAT0) & 0x1;
} else {
hdmirx_wr_top(TOP_VID_CNTL2, data32);
}
data32 = 0;
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
/* n_cts_auto_mode: */
/* 0-every ACR packet */
/* 1-on N or CTS value change */
}
/* delay cycles before n/cts update pulse */
data32 |= 7 << 0;
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1)
+ if (rx.chip_id == CHIP_ID_TL1)
hdmirx_wr_top(TOP_TL1_ACR_CNTL2, data32);
else
hdmirx_wr_top(TOP_ACR_CNTL2, data32);
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
data32 = hdmirx_rd_dwc(DWC_HDCP_CTRL);
/* 0: Original behaviour */
/* 1: Balance path delay between non-HDCP and HDCP */
#if 0
void rx_set_term_enable(bool enable)
{
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
/* need to do : for tl1 */
} else
hdmirx_wr_bits_phy(PHY_MAIN_FSM_OVERRIDE1,
{
unsigned int data32;
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
/* need to do : for tl1 */
data32 = rd_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL0);
if (port < E_PORT3) {
unsigned int term_ovr_value;
unsigned int data32;
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
/* enable terminal connect */
data32 = rd_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL0);
if (level) {
((0 << 25) |
(1 << 24) | /* [ 24] Enable gated clock */
(0 << 16)));
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1)
+ if (rx.chip_id == CHIP_ID_TL1)
/* TL1:esm related clk bit9-11 */
hdmirx_wr_bits_top(TOP_CLK_CNTL, MSK(3, 9), 0x7);
else
data32 |= 0 << 31; /* [31] disable clkgating */
data32 |= 1 << 17; /* [17] audfifo_rd_en */
data32 |= 1 << 16; /* [16] pktfifo_rd_en */
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
data32 |= 0 << 8; /* [8] tmds_ch2_clk_inv */
data32 |= 0 << 7; /* [7] tmds_ch1_clk_inv */
data32 |= 0 << 6; /* [6] tmds_ch0_clk_inv */
data32 |= acr_mode << 0;
hdmirx_wr_top(TOP_ACR_CNTL_STAT, data32);
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
data32 = 0;
data32 |= 0 << 2;/*meas_mode*/
data32 |= 1 << 1;/*enable*/
hdmirx_wr_dwc(DWC_SNPS_PHYG3_CTRL, data32);
data32 = 0;
- data32 |= phy_lock_thres << 10;
+ data32 |= 6 << 10;
data32 |= 1 << 9;
- data32 |= ((phy_cfg_clk * 4) / 1000);
+ data32 |= ((24000 * 4) / 1000);
hdmirx_wr_phy(PHY_CMU_CONFIG, data32);
- hdmirx_wr_phy(PHY_VOLTAGE_LEVEL, eq_ref_voltage);
+ hdmirx_wr_phy(PHY_VOLTAGE_LEVEL, 0x1ea);
data32 = 0;
data32 |= 0 << 15;
/* clear clkrate cfg */
hdmirx_wr_bits_phy(PHY_CDR_CTRL_CNT, CLK_RATE_BIT, 0);
/*last_clk_rate = 0;*/
- rx.physts.clk_rate = 0;
+ rx.phy.clk_rate = 0;
/* enable all ports's termination */
data32 = 0;
data32 |= 1 << 8;
*/
void hdmirx_phy_init(void)
{
- uint32_t data32;
-
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
- /* give default value */
- data32 = 0;
- data32 |= rx.port << 2;
- hdmirx_wr_dwc(DWC_SNPS_PHYG3_CTRL, data32);
-
- if (rx.physts.cable_clk > 0)
- aml_phy_bw_switch(rx.physts.cable_clk,
- rx.physts.clk_rate);
- else
- aml_phy_bw_switch(PHY_DEFAULT_FRQ, 0);
- } else {
+ /* uint32_t data32; */
+ /* uint32_t cur_cable_clk; */
+ if (rx.chip_id == CHIP_ID_TL1)
+ aml_phy_bw_switch();
+ else
snps_phyg3_init();
- }
-
- rx_pr("%s Done!\n", __func__);
}
/*
bool changed = false;
int i;
int error = 0;
- int cur_cable_clk;
- uint32_t clk_diff;
- uint32_t cur_phy_bw;
-
clk_rate = rx_get_scdc_clkrate_sts();
- if (clk_rate != rx.physts.clk_rate) {
+ if (is_clk_stable()) {
+ rx.phy.cable_clk = rx_measure_clock(MEASURE_CLK_CABLE);
+ rx.phy.phy_bw = aml_cable_clk_band(rx.phy.cable_clk, clk_rate);
+ }
+
+ if (clk_rate != rx.phy.clk_rate) {
changed = true;
if (rx.chip_id != CHIP_ID_TL1) {
for (i = 0; i < 3; i++) {
if (error == 0)
break;
}
+ } else {
+ aml_phy_bw_switch();
}
if (log_level & VIDEO_LOG)
rx_pr("clk_rate:%d, last_clk_rate: %d\n",
- clk_rate, rx.physts.clk_rate);
- rx.physts.clk_rate = clk_rate;
+ clk_rate, rx.phy.clk_rate);
+ rx.phy.clk_rate = clk_rate;
}
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ #if 0
+ if (rx.chip_id == CHIP_ID_TL1) {
cur_cable_clk = rx_measure_clock(MEASURE_CLK_CABLE);
- clk_diff = diff(rx.physts.cable_clk, cur_cable_clk);
+ clk_diff = diff(rx.phy.cable_clk, cur_cable_clk);
/*clk_rate = rx_get_scdc_clkrate_sts();*/
cur_phy_bw = aml_cable_clk_band(cur_cable_clk, clk_rate);
- if ((rx.cur_5v_sts) && ((rx.physts.phy_bw != cur_phy_bw) ||
+ if ((rx.cur_5v_sts) && ((rx.phy.phy_bw != cur_phy_bw) ||
changed || (clk_diff > (1000*KHz)))) {
changed = true;
- aml_phy_bw_switch(cur_cable_clk, clk_rate);
+ aml_phy_bw_switch();
udelay(50);/*wait pll lock*/
rx_pr("phy clk chg:cabclk:%d,%d,rate:%d,lock:%d\n",
- cur_cable_clk, rx.physts.cable_clk,
+ cur_cable_clk, rx.phy.cable_clk,
clk_rate, aml_phy_pll_lock());
- rx.physts.cable_clk = cur_cable_clk;
- rx.physts.clk_rate = clk_rate;
- rx.physts.phy_bw = cur_phy_bw;
+ rx.phy.cable_clk = cur_cable_clk;
+ rx.phy.clk_rate = clk_rate;
+ rx.phy.phy_bw = cur_phy_bw;
}
}
-
+ #endif
if (changed) {
if (rx.state >= FSM_WAIT_CLK_STABLE)
rx.state = FSM_WAIT_CLK_STABLE;
hdmirx_20_init();
DWC_init();
hdmirx_irq_hdcp_enable(true);
+ if (rx.chip_id == CHIP_ID_TL1)
+ aml_phy_switch_port();
hdmirx_phy_init();
hdmirx_wr_top(TOP_INTR_MASKN, top_intr_maskn_value);
rx_pr("%s %d Done!\n", __func__, rx.port);
packet_init();
if (rx.chip_id != CHIP_ID_TXHD)
hdmirx_20_init();
+ if (rx.chip_id == CHIP_ID_TL1)
+ aml_phy_switch_port();
hdmirx_phy_init();
hdmirx_wr_top(TOP_PORT_SEL, 0x10);
hdmirx_wr_top(TOP_INTR_STAT_CLR, ~0);
int tmp = 0;
/*unsigned int od, od2;*/
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
if (en) {
/* AUD_CLK=N/CTS*TMDS_CLK */
/* bandgap enable */
tmp |= 2 << 2; /* 0:tmds_clk 1:ref_clk 2:mpll_clk */
wr_reg_hhi(HHI_AUD_PLL_CNTL2, tmp);
/* cntl3 2:0 000=1*cts 001=2*cts 010=4*cts 011=8*cts */
- wr_reg_hhi(HHI_AUD_PLL_CNTL3, rx.physts.aud_div);
+ wr_reg_hhi(HHI_AUD_PLL_CNTL3, rx.phy.aud_div);
#else
/* use tmds clk */
tmp = 0;
if (clk_src == TOP_HDMI_TMDSCLK)
tmp_data = hdmirx_rd_top(TOP_METER_HDMI_STAT);
else if (clk_src == TOP_HDMI_CABLECLK) {
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1)
+ if (rx.chip_id == CHIP_ID_TL1)
tmp_data = hdmirx_rd_top(TOP_METER_CABLE_STAT);
} else if (clk_src == TOP_HDMI_AUDIOCLK) {
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
/*get audio clk*/
tmp_data = hdmirx_rd_top(TOP_AUDMEAS_REF_CYCLES_STAT0);
tmp_data2 = hdmirx_rd_top(TOP_AUDMEAS_REF_CYCLES_STAT1);
*/
if (clksrc == MEASURE_CLK_CABLE) {
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
clock = meson_clk_measure(30);
/*clock = rx_get_clock(TOP_HDMI_CABLECLK);*/
}
} else if (clksrc == MEASURE_CLK_TMDS) {
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1)
+ if (rx.chip_id == CHIP_ID_TL1)
clock = meson_clk_measure(63);
else {
clock = meson_clk_measure(25);
} else if (clksrc == MEASURE_CLK_PIXEL) {
clock = meson_clk_measure(29);
} else if (clksrc == MEASURE_CLK_AUD_PLL) {
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1)
+ if (rx.chip_id == CHIP_ID_TL1)
clock = meson_clk_measure(74);/*audio vid out*/
else
clock = meson_clk_measure(24);
} else if (clksrc == MEASURE_CLK_AUD_DIV) {
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1)
+ if (rx.chip_id == CHIP_ID_TL1)
clock = meson_clk_measure(67);/*apll_clk_audio*/
else
clock = meson_clk_measure(98);
} else if (clksrc == MEASURE_CLK_MPLL) {
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1)
+ if (rx.chip_id == CHIP_ID_TL1)
clock = meson_clk_measure(29);/*apll_clk_out_div*/
else
clock = meson_clk_measure(27);
i = i + 4;
}
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
for (i = 0x25; i <= 0x84;) {
rx_pr("[0x%-3x]", i);
rx_pr("0x%-8x", hdmirx_rd_top(i));
}
}
- if (rx.hdmirxdev->data->chip_id < CHIP_ID_TL1) {
+ if (rx.chip_id < CHIP_ID_TL1) {
rx_pr("\n***PHY registers***\n");
rx_pr("[addr ] addr + 0x0,");
rx_pr("addr + 0x1,addr + 0x2,");
i = i + 4;
}
- } else if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ } else if (rx.chip_id == CHIP_ID_TL1) {
/* dump phy register */
rx_pr("\n***AML PHY registers***\n");
for (i = HHI_HDMIRX_APLL_CNTL0;
uint32_t phy_pll_rate = (hdmirx_rd_phy(PHY_MAINFSM_STATUS1)>>9)&0x3;
uint32_t aud_pll_cntl = (rd_reg_hhi(HHI_AUD_PLL_CNTL6)>>28)&0x3;
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
/* need to do something ...*/
} else {
if (req_clk > PHY_REQUEST_CLK_MAX ||
uint32_t bw;
uint32_t cab_clk = cableclk;
+ if (rx.chip_id != CHIP_ID_TL1)
+ return phy_frq_band_2;
+
/*rx_pr("cable clk=%d, clkrate=%d\n", cableclk, clkrate);*/
/* 1:40 */
if (clkrate)
return bw;
}
-/*
- * phy data table
- * CNTL:0 1 2 3
- * DCHA:0 1 2
- * DCHD:0 2 1
- */
-uint32_t phy_data[][10] = {
- {/*phy_frq_band_0*/
- 0x30037078, 0x00000080, 0x02218000, 0x00000010,
- 0x00000182, 0x2800c202, 0x010088a2,
- 0x002c714a, 0x00018000, 0x1e013130
+void aml_phy_switch_port(void)
+{
+ uint32_t data32;
+ /* reset and select data port */
+ data32 = 0x00000010;
+ data32 |= ((1 << rx.port) << 6);
+ wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL3, data32);
+ /* release reset */
+ data32 |= (1 << 11);
+ wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL3, data32);
+ udelay(5);
+
+ data32 = 0;
+ data32 |= rx.port << 2;
+ hdmirx_wr_dwc(DWC_SNPS_PHYG3_CTRL, data32);
+}
+
+static const uint32_t phy_misci[][4] = {
+ /* 0xd7 0xd8 0xe0 0xe1 */
+ { /* 24~45M */
+ 0x3003707f, 0x00400080, 0x02218000, 0x00000010,
},
- {/*phy_frq_band_1*/
- 0x30037078, 0x00000080, 0x02218000, 0x00000010,
- 0x000002a2, 0x4800c202, 0x01009126,
- 0x002c714a, 0x00028000, 0x1e062620
+ { /* 45~74.5M */
+ 0x3003707f, 0x00400080, 0x02218000, 0x00000010,
},
- {/*phy_frq_band_2 1.5G*/
- 0x30037078, 0x00000080, 0x02218000, 0x00000010,
- 0x000002a2, 0x4800c202, 0x01009126,
- 0x002c714a, 0x00018000, 0x1e062620
+ { /* 77~155M */
+ 0x3003707f, 0x00000080, 0x02218000, 0x00000010,
},
- {/*phy_frq_band_3 3G*/
- 0x30037078, 0x00000080, 0x02218000, 0x00000010,
- 0x000002a2, 0x0800c202, 0x0100fc31,
- 0x002c714a, 0x00028000, 0x1e062620
+ { /* 155~340M */
+ 0x3003707f, 0x00000080, 0x02218000, 0x00000010,
},
- {/*phy_frq_band_4 6G*/
- 0x30037078, 0x007f0080, 0x02218000, 0x00000010,
- 0x351842a2, 0x0700003c, 0x1d00cc31,
- 0x002c715a, 0x00018000, 0x1e064640
+ { /* 340~600M */
+ 0x3003707f, 0x007f0080, 0x02218000, 0x00000010,
},
};
-void aml_phy_init(uint32_t bw)
-{
- uint32_t idx = bw;
- uint32_t data32;
- uint32_t term_value = 0x7;/*all terminal on*/
- /* hdmirx_rd_top(TOP_HPD_PWR5V);*/
+static const uint32_t phy_dcha[][3] = {
+ /* 0xe2 0xe3 0xe4 */
+ { /* 24~45M */
+ 0x00000180, 0x2400c202, 0x030088a2,
+ },
+ { /* 45~74.5M */
+ 0x00000180, 0x2400c202, 0x030088a2,
+ },
+ { /* 77~155M */
+ 0x000002a2, 0x4800c202, 0x01009126,
+ },
+ { /* 155~340M */
+ 0x000002a2, 0x0800c202, 0x0100fc31,
+ },
+ { /* 340~600M */
+ 0x000002a2, 0x0700003c, 0x1d00cc31,
+ },
+};
- rx_pr("init phy port %d, bw:%d\n", rx.port, bw);
+/* short cable */
+static const uint32_t phy_dchd_1[][3] = {
+ /* 0xe5 0xe6 0xe7 */
+ { /* 24~45M */
+ 0x002e712a, 0x1e062620, 0x00018000,
+ },
+ { /* 45~74.5M */
+ 0x002e712a, 0x1e062620, 0x00018000,
+ },
+ { /* 77~155M */
+ 0x002c714a, 0x1e062620, 0x00018000,
+ },
+ { /* 155~340M */
+ 0x002c714a, 0x1e062620, 0x00018000,
+ },
+ { /* 340~600M */
+ 0x002c715a, 0x1e064640, 0x00018000,
+ },
+};
- if (bw > phy_frq_band_4) {
- rx_pr("err phy frq band\n");
- idx = phy_frq_band_2;
- }
+/* long cable */
+static const uint32_t phy_dchd_2[][3] = {
+ /* 0xe5 0xe6 0xe7 */
+ { /* 24~45M */
+ 0x002e712a, 0x1e022220, 0x00018000,
+ },
+ { /* 45~74.5M */
+ 0x002e712a, 0x1e022220, 0x00018000,
+ },
+ { /* 77~155M */
+ 0x002c714a, 0x1e022220, 0x00018000,
+ },
+ { /* 155~340M */
+ 0x002c714a, 0x1e022220, 0x00018000,
+ },
+ { /* 340~600M */
+ 0x002c715a, 0x1e012030, 0x00018000,
+ },
+};
+
+void aml_phy_init(void)
+{
+ uint32_t idx = rx.phy.phy_bw;
+ uint32_t data32;
- /* enable terminal connect */
- data32 = phy_data[idx][0]|(term_value & 0x7);
- wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL0, data32);/*35c*/
+ data32 = phy_misci[idx][0];
+ /* terminal en */
+ data32 &= ~(disable_port_num & 0x07);
+ wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL0, data32);
+ udelay(2);
/* data channel and common block reset */
data32 |= 0xf << 7;
- wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL0, data32);/*35c*/
+ wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL0, data32);
udelay(2);
- /*rx_pr("MISC_CNTL0=0x%x\n", data32);*/
- wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL1, phy_data[idx][1]);/*360*/
- wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL2, phy_data[idx][2]);/*380*/
+
+ data32 = phy_misci[idx][1];
+ wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL1, data32);
+
+ wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL2, phy_misci[idx][2]);
+
/* reset and select data port */
- data32 = phy_data[idx][3];
+ data32 = phy_misci[idx][3];
data32 |= ((1 << rx.port) << 6);
wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL3, data32);
+
/* release reset */
data32 |= (1 << 11);
wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL3, data32);
- /*rx_pr("MISC_CNTL3=0x%x\n", data32);*/
+
udelay(5);
- wr_reg_hhi(HHI_HDMIRX_PHY_DCHA_CNTL0, phy_data[idx][4]);/*388*/
- wr_reg_hhi(HHI_HDMIRX_PHY_DCHA_CNTL1, phy_data[idx][5]);/*38c*/
- wr_reg_hhi(HHI_HDMIRX_PHY_DCHA_CNTL2, phy_data[idx][6]);/*390*/
- wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL0, phy_data[idx][7]);/*394*/
- wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL2, phy_data[idx][8]);/*39c*/
- data32 = phy_data[idx][9];
+ wr_reg_hhi(HHI_HDMIRX_PHY_DCHA_CNTL0, phy_dcha[idx][0]);
+
+ wr_reg_hhi(HHI_HDMIRX_PHY_DCHA_CNTL1, phy_dcha[idx][1]);
+
+ wr_reg_hhi(HHI_HDMIRX_PHY_DCHA_CNTL2, phy_dcha[idx][2]);
+
+ wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL0, phy_dchd_1[idx][0]);
+ wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL2, phy_dchd_1[idx][2]);
+ data32 = phy_dchd_1[idx][1];
+
wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL1, data32);/*398*/
udelay(5);
data32 |= 0x00400000;
wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL1, data32);/*398*/
}
+void aml_eq_setting(void)
+{
+ uint32_t data32 = 0;
+ uint32_t idx = rx.phy.phy_bw;
-uint32_t eq_data[][4] = {
- /*DCHD_CNTL gp0:2, 1 gp1:2, 1*/
- {0x00028000, 0x1e022220, 0x00028000, 0x1e062620},/*bw0*/
- {0x00028000, 0x1e022220, 0x00028000, 0x1e062620},/*bw1*/
- {0x00028000, 0x1e022220, 0x00018000, 0x1e062620},/*bw2*/
- {0x00028000, 0x1e022220, 0x00028000, 0x1e062620},/*bw3*/
- {0x00018000, 0x1e064640, 0x00018000, 0x1e064640},/*bw4*/
-};
+ if (find_best_eq) {
+ data32 = phy_dchd_1[idx][1] & (~(MSK(16, 4)));
+ data32 |= find_best_eq << 4;
+ } else if ((rx.phy.cablesel % 2) == 0)
+ data32 = phy_dchd_1[idx][1];
+ else if ((rx.phy.cablesel % 2) == 1) {
+ data32 = phy_dchd_2[idx][1];
+ rx_pr("longcable\n");
+ }
-void aml_eq_setting(uint32_t bw)
+ wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL1, data32);
+ udelay(2);
+ data32 |= 0x00400000;
+ wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL1, data32);
+}
+
+void rx_get_best_eq_setting(void)
{
- static uint32_t cnt;
- uint32_t data;
- uint32_t idx = bw;
+ uint32_t ch0, ch1, ch2;
+ static uint32_t err_sum;
+ static uint32_t time_cnt;
+ static uint32_t array_cnt;
- if (bw > phy_frq_band_4) {
- rx_pr("err phy frq band\n");
- idx = phy_frq_band_2;
+ if ((rx.chip_id != CHIP_ID_TL1) ||
+ (!find_best_eq))
+ return;
+ if ((find_best_eq >= 0x7777) ||
+ (array_cnt >= 255)) {
+ rx_pr("eq traversal completed.\n");
+ rx_pr("best eq value:%d\n", array_cnt);
+ if (array_cnt) {
+ do {
+ rx_pr("%x:\n", rx.phy.eq_data[array_cnt]);
+ } while (array_cnt--);
+ } else
+ rx_pr("%x:\n", rx.phy.eq_data[array_cnt]);
+ find_best_eq = 0;
+ array_cnt = 0;
+ return;
}
-
- if (cnt & 0x01) {
- wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL2, eq_data[idx][0]);
- wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL1, eq_data[idx][1]);
- udelay(1);
- data = eq_data[idx][1] | 0x00400000;
- wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL1, data);
- } else {
- wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL2, eq_data[idx][2]);
- wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL1, eq_data[idx][3]);
+ if (time_cnt == 0) {
+ aml_phy_init();
udelay(1);
- data = eq_data[idx][3] | 0x00400000;
- wr_reg_hhi(HHI_HDMIRX_PHY_DCHD_CNTL1, data);
+ wr_reg_hhi_bits(HHI_HDMIRX_PHY_DCHD_CNTL1,
+ MSK(16, 4),
+ find_best_eq);
+ udelay(2);
+ wr_reg_hhi_bits(HHI_HDMIRX_PHY_DCHD_CNTL1, _BIT(22), 1);
+ rx_pr("set eq:%x\n", find_best_eq);
+ err_sum = 0;
+ do {
+ find_best_eq++;
+ } while (((find_best_eq & 0xf) > 7) ||
+ (((find_best_eq >> 4) & 0xf) > 7) ||
+ (((find_best_eq >> 8) & 0xf) > 7) ||
+ (((find_best_eq >> 12) & 0xf) > 7));
+ }
+ time_cnt++;
+ if (time_cnt > 2) {
+ rx_get_error_cnt(&ch0, &ch1, &ch2);
+ err_sum += (ch0 + ch1 + ch2);
+ }
+
+ if (time_cnt > eq_try_cnt) {
+ time_cnt = 0;
+ if (err_sum < rx.phy.err_sum) {
+ rx.phy.err_sum = err_sum;
+ rx_pr("err_sum = %d\n", err_sum);
+ array_cnt = 0;
+ rx.phy.eq_data[array_cnt] = find_best_eq;
+ } else if ((err_sum == rx.phy.err_sum) ||
+ (err_sum == 0)) {
+ rx.phy.err_sum = err_sum;
+ array_cnt++;
+ rx_pr("array = %x\n", array_cnt);
+ rx.phy.eq_data[array_cnt] = find_best_eq;
+ }
+ //if (ch0 || ch1 || ch2)
+ //rx_pr("err cnt:%d,%d,%d\n", ch0, ch1, ch2); ;
}
- cnt++;
}
/*
{pll_frq_null, 40, 1, 0x3, 8, 0x3, 8},
};
-uint32_t aml_phy_pll_band(uint32_t cableclk,
- uint32_t clkrate)
-{
- uint32_t bw;
- uint32_t cab_clk = cableclk;
-
- if (clkrate)
- cab_clk = cableclk << 2;
-
- /* 1:10 */
- if (cab_clk < (35*MHz))
- bw = pll_frq_band_0;
- else if (cab_clk < (77*MHz))
- bw = pll_frq_band_1;
- else if (cab_clk < (155*MHz))
- bw = pll_frq_band_2;
- else if (cab_clk < (300*MHz))
- bw = pll_frq_band_3;
- else if (cab_clk < (600*MHz))
- bw = pll_frq_band_4;
- else {
- bw = pll_frq_band_2;
- rx_pr("phy err: bw clk=%d\n", cableclk);
- }
-
- return bw;
-}
-
-void aml_phy_pll_setting(uint32_t cable_clk, uint32_t clkrate)
+void aml_phy_pll_setting(void)
{
uint32_t M, N;
uint32_t od, od_div;
uint32_t od2, od2_div;
- uint32_t bw;
+ uint32_t bw = rx.phy.phy_bw;
uint32_t vco_clk;
uint32_t apll_out;
uint32_t aud_pll_out;
uint32_t data, data2;
uint32_t aud_div;
- uint32_t cableclk = cable_clk / KHz;
+ uint32_t cableclk = rx.phy.cable_clk / KHz;
- bw = aml_phy_pll_band(cable_clk, clkrate);
- rx_pr("bw:%d, cableclk:%d\n", bw, cableclk);
od_div = apll_tab[bw].od_div;
od = apll_tab[bw].od;
M = apll_tab[bw].M;
/*tmds clk out*/
apll_out = (vco_clk/od_div)/5;
- /*rx_pr("M=%d,N=%d,od=%d,od_div=%d\n", M, N, od, od_div);*/
- rx_pr("apll_out=%d, vco_clk=%d\n", apll_out, vco_clk);
- /*rx_pr("od2=%d, od2_div=%d\n", od2, od2_div);*/
-
aud_pll_out = ((vco_clk/od2_div)/5);
- rx_pr("aud pll out=%d\n", aud_pll_out);
/*cntl0 M <7:0> N<14:10>*/
data = 0x00090400 & 0xffff8300;
wr_reg_hhi(HHI_HDMIRX_APLL_CNTL0, data|0x20000000);
udelay(2);
wr_reg_hhi(HHI_HDMIRX_APLL_CNTL0, data|0x30000000);
- /*rx_pr("APLL_CNTL0:0x%x\n", rd_reg_hhi(HHI_HDMIRX_APLL_CNTL0));*/
- rd_reg_hhi(HHI_HDMIRX_APLL_CNTL0);
udelay(50);
wr_reg_hhi(HHI_HDMIRX_APLL_CNTL1, 0x00000000);
wr_reg_hhi(HHI_HDMIRX_APLL_CNTL2, 0x00001118);
udelay(2);
/*apll_vctrl_mon_en*/
wr_reg_hhi(HHI_HDMIRX_APLL_CNTL4, data2|0x00800000);
- /*rx_pr("APLL_CNTL4:0x%x\n", rd_reg_hhi(HHI_HDMIRX_APLL_CNTL4));*/
- rd_reg_hhi(HHI_HDMIRX_APLL_CNTL4);
udelay(80);
wr_reg_hhi(HHI_HDMIRX_APLL_CNTL0, data|0x34000000);
udelay(2);
wr_reg_hhi(HHI_HDMIRX_APLL_CNTL0, data|0x14000000);
- /*rx_pr("APLL_CNTL0:0x%x\n", rd_reg_hhi(HHI_HDMIRX_APLL_CNTL0));*/
- rd_reg_hhi(HHI_HDMIRX_APLL_CNTL0);
udelay(60);
wr_reg_hhi(HHI_HDMIRX_APLL_CNTL2, 0x00003018);
/* common block release reset */
/*set audio pll divider*/
aud_div = aud_pll_out/apll_out;
- /*rx_pr("aud div=%d\n", aud_div);*/
if (aud_div == 1)
data = 0;
else if (aud_div == 2)
data = 3;
else if (aud_div == 16)
data = 4;
- rx.physts.aud_div = data;
+ rx.phy.aud_div = data;
}
void aml_phy_pw_onoff(uint32_t onoff)
data &= ~(1 << 9);
wr_reg_hhi(HHI_HDMIRX_PHY_MISC_CNTL0, data);
} else {
- aml_phy_init(phy_frq_band_2);
+ aml_phy_init();
/*tl1_apll_setting(apll_frq_band_2);*/
}
}
/*
* aml phy initial
*/
-void aml_phy_bw_switch(uint32_t cableclk, uint32_t clkrate)
+void aml_phy_bw_switch(void)
{
- uint32_t bw;
-
- if (cableclk == 0)
- cableclk = PHY_DEFAULT_FRQ;
- bw = aml_cable_clk_band(cableclk, clkrate);
- aml_phy_init(bw);
+ aml_phy_init();
udelay(1);
- aml_phy_pll_setting(cableclk, clkrate);
+ aml_phy_pll_setting();
udelay(1);
- aml_eq_setting(bw);
+ aml_eq_setting();
}
unsigned int aml_phy_pll_lock(void)
{
unsigned int data;
- if (rx.hdmirxdev->data->chip_id != CHIP_ID_TL1)
+ if (rx.chip_id != CHIP_ID_TL1)
return;
if (rx.empbuff.pg_addr) {
unsigned int data, data2;
unsigned int i = 0;
- if (rx.hdmirxdev->data->chip_id != CHIP_ID_TL1)
+ if (rx.chip_id != CHIP_ID_TL1)
return;
if (rx.empbuff.pg_addr) {
extern int pdec_ists_en;
extern int pd_fifo_start_cnt;
extern int md_ists_en;
-extern int eq_ref_voltage;
extern int aud_ch_map;
extern int hdcp14_key_mode;
extern int ignore_sscp_charerr;
extern int ignore_sscp_tmds;
+extern int find_best_eq;
+extern int eq_try_cnt;
+extern void rx_get_best_eq_setting(void);
extern void wr_reg_hhi(unsigned int offset, unsigned int val);
extern void wr_reg_hhi_bits(unsigned int offset, unsigned int mask,
extern int rx_get_clock(enum measure_clk_top_e clk_src);
extern unsigned int clk_util_clk_msr(unsigned int clk_mux);
extern unsigned int rx_measure_clock(enum measure_clk_src_e clksrc);
-extern void aml_phy_init(uint32_t bw);
+extern void aml_phy_init(void);
extern void aml_phy_pw_onoff(uint32_t onoff);
extern uint32_t aml_cable_clk_band(uint32_t cableclk,
uint32_t clkrate);
-extern uint32_t aml_phy_pll_band(uint32_t cableclk,
- uint32_t clkrate);
-extern void aml_phy_bw_switch(uint32_t cableclk, uint32_t clkrate);
+extern void aml_phy_switch_port(void);
+extern void aml_phy_bw_switch(void);
extern unsigned int aml_phy_pll_lock(void);
extern unsigned int aml_phy_tmds_valid(void);
-extern void aml_eq_setting(uint32_t bw);
+extern void aml_eq_setting(void);
extern void rx_emp_to_ddr_init(void);
extern void rx_emp_field_done_irq(void);
extern void rx_emp_status(void);
static int diff_pixel_th = 2;
static int diff_line_th = 10;
static int diff_frame_th = 40; /* (25hz-24hz)/2 = 50/100 */
-#ifdef USE_NEW_FSM_METHODE
static int err_dbg_cnt;
static int err_dbg_cnt_max = 500;
-#endif
int force_vic;
uint32_t fsm_log_en;
uint32_t err_chk_en;
MODULE_PARM_DESC(auds_rcv_sts, "auds_rcv_sts");
static int audio_coding_type;
-
static int audio_channel_count;
int log_level = LOG_EN;/*| HDCP_LOG;*/
static bool auto_switch_off; /* only for hardware test */
int clk_unstable_cnt;
-static int clk_unstable_max = 200;
+static int clk_unstable_max;
int clk_stable_cnt;
static int clk_stable_max = 3;
module_param(esm_recovery_mode, int, 0664);
MODULE_PARM_DESC(esm_recovery_mode, "esm_recovery_mode");
+int phy_retry_times = 1;
/* No need to judge frame rate while checking timing stable,as there are
* some out-spec sources whose framerate change a lot(e.g:59.7~60.16hz).
* Other brands of tv can support this,we also need to support.
int sm_pause;
int pre_port = 0xff;
static int hdcp_none_wait_max = 100;
-/* for no signal after esd test issue, phy
- * does't work, cable clock or PLL can't
- * lock, need to do phy reset.
- */
static int esd_phy_rst_cnt;
-static int esd_phy_rst_max = 2;
-
-#ifndef USE_NEW_FSM_METHODE
-int pll_unlock_check_times;
-int pll_unlock_check_times_max = 5;
-static bool enable_hpd_reset;
-static int sig_unstable_reset_hpd_cnt;
-static int sig_unstable_reset_hpd_max = 5;
-static bool is_hdcp_source = true;
-#endif
-
+static int esd_phy_rst_max;
struct rx_s rx;
+void hdmirx_init_params(void)
+{
+ if (rx.chip_id == CHIP_ID_TL1) {
+ clk_unstable_max = 10;
+ esd_phy_rst_max = 200;
+ } else {
+ clk_unstable_max = 200;
+ esd_phy_rst_max = 2;
+ }
+}
void rx_hpd_to_esm_handle(struct work_struct *work)
{
}
}
- if (rx.hdmirxdev->data->chip_id != CHIP_ID_TL1) {
+ if (rx.chip_id != CHIP_ID_TL1) {
rx_top_intr_stat = hdmirx_rd_top(TOP_INTR_STAT);
if (rx_top_intr_stat & _BIT(31))
irq_need_clr = 1;
hdmirx_wr_top(TOP_INTR_STAT_CLR, hdmirx_top_intr_stat);
/* modify interrupt flow for isr loading */
/* top interrupt handler */
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
if (hdmirx_top_intr_stat & (1 << 29))
if (log_level & 0x100)
rx_pr("[isr] sqofclk_fall\n");
rx_pr("[isr] enc fall\n");
/* must clear ip interrupt quickly */
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
hdmirx_top_intr_stat &= 0x1;
} else {
hdmirx_top_intr_stat &= (~(1 << 30));
}
}
- if (rx.hdmirxdev->data->chip_id != CHIP_ID_TL1) {
+ if (rx.chip_id != CHIP_ID_TL1) {
if (error == 1)
goto reisr;
}
{192000, 3000},
{0, 0}
};
-#ifdef USE_NEW_FSM_METHODE
+
static bool check_real_sr_change(void)
{
uint8_t i;
}
return ret;
}
-#else
-static uint32_t get_real_sample_rate(void)
-{
- int i;
- /* note: if arc is missmatch with LUT, then return 0 */
- uint32_t ret_sr = 0; /* rx.aud_info.arc; */
-
- for (i = 0; sr_tbl[i][0] != 0; i++) {
- if (abs(rx.aud_info.arc - sr_tbl[i][0]) < sr_tbl[i][1]) {
- ret_sr = sr_tbl[i][0];
- break;
- }
- ret_sr = 0;
- }
- return ret_sr;
-}
-
-static unsigned char is_sample_rate_change(int sample_rate_pre,
- int sample_rate_cur)
-{
- unsigned char ret = 1;
-
- if (ABS(sample_rate_pre - sample_rate_cur) <
- AUD_SR_RANGE)
- ret = 0;
- return ret;
-}
-
-#endif
static unsigned char is_aud_ch_map_change(int pre, int cur)
{
rx.cur.colordepth);
}
/*for aml phy, check error counter*/
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1 &&
+ if (rx.chip_id == CHIP_ID_TL1 &&
(stable_check_lvl & ERR_CNT_EN)) {
rx_get_error_cnt(&ch0, &ch1, &ch2);
if ((ch0 + ch1 + ch2) > max_err_cnt) {
sig_stable_err_cnt = 0;
/*phy setting is fail, need reset phy*/
sig_unstable_cnt = sig_unstable_max;
- rx.physts.cable_clk = 0;
+ rx.phy.cable_clk = 0;
}
ret = false;
}
return ret;
}
-#ifndef USE_NEW_FSM_METHODE
-static bool is_hdcp_enc_stable(void)
-{
- bool ret = true;
-
- if ((rx.pre.hdcp14_state != rx.cur.hdcp14_state) &&
- (rx.pre.hdcp_type == 0) &&
- (stable_check_lvl & HDCP_ENC_EN)) {
- ret = false;
- if (log_level & VIDEO_LOG)
- rx_pr("hdcp_enc_state(%d=>%d)\n",
- rx.pre.hdcp14_state,
- rx.cur.hdcp14_state);
- }
- return ret;
-}
-#endif
-
static int get_timing_fmt(void)
{
int i;
rx.aud_sr_unstable_cnt = 0;
//rx_aud_pll_ctl(0);
rx_set_eq_run_state(E_EQ_START);
- #ifdef USE_NEW_FSM_METHODE
rx.err_rec_mode = ERR_REC_EQ_RETRY;
rx.err_code = ERR_NONE;
- #endif
rx_irq_en(false);
if (hdcp22_on) {
if (esm_recovery_mode == ESM_REC_MODE_TMDS)
/*if (hdcp22_on)*/
/*esm_set_stable(0);*/
rx.hdcp.hdcp_version = HDCP_VER_NONE;
- #ifndef USE_NEW_FSM_METHODE
- is_hdcp_source = true;
- #endif
rx.skip = 0;
}
rgb_quant_range = rx.cur.rgb_quant_range;
yuv_quant_range = rx.cur.yuv_quant_range;
it_content = rx.cur.it_content;
-
auds_rcv_sts = rx.aud_info.aud_packet_received;
audio_sample_rate = rx.aud_info.real_sr;
audio_coding_type = rx.aud_info.coding_type;
if (force_vic)
return true;
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1)
+ if (rx.chip_id == CHIP_ID_TL1)
return (aml_phy_tmds_valid() == 1) ? true : false;
else
return (rx_get_pll_lock_sts() == 1) ? true : false;
hdcp22_esm_reset2 = 1;
}
-#ifndef USE_NEW_FSM_METHODE
-void rx_esm_exception_monitor(void)
-{
- int irq_status, exception;
-
- irq_status = rx_hdcp22_rd_reg(HPI_REG_IRQ_STATUS);
- if (irq_status & IRQ_STATUS_UPDATE_BIT) {
- exception =
- rx_hdcp22_rd_reg_bits(HPI_REG_EXCEPTION_STATUS,
- EXCEPTION_CODE);
- if (exception != rx.hdcp.hdcp22_exception) {
- rx_pr("++++++hdcp22 state:%#x,vec:%#x\n",
- rx_hdcp22_rd_reg(HPI_REG_EXCEPTION_STATUS),
- exception);
- rx.hdcp.hdcp22_exception = exception;
- }
- }
-}
-#endif
-
bool is_unnormal_format(uint8_t wait_cnt)
{
bool ret = false;
- #ifdef USE_NEW_FSM_METHODE
if ((rx.pre.sw_vic == HDMI_UNSUPPORT) ||
(rx.pre.sw_vic == HDMI_UNKNOWN)) {
ret = true;
if (log_level & VIDEO_LOG)
rx_pr("unnormal_format wait cnt = %d\n",
wait_cnt-sig_stable_max);
- #else
- if ((rx.pre.sw_vic == HDMI_UNSUPPORT) ||
- (rx.pre.sw_vic == HDMI_UNKNOWN)) {
- if (wait_cnt < unnormal_wait_max)
- ret = true;
- if (log_level & VIDEO_LOG)
- rx_pr("*unsupport*\n");
- }
- if (rx.pre.sw_dvi == 1) {
- if (wait_cnt < unnormal_wait_max)
- ret = true;
- if (log_level & VIDEO_LOG)
- rx_pr("*DVI*\n");
- }
- if ((rx.pre.hdcp14_state != 3) &&
- (rx.pre.hdcp14_state != 0) &&
- (rx.hdcp.hdcp_version == HDCP_VER_14)) {
- if (wait_cnt < unnormal_wait_max)
- ret = true;
- if (log_level & VIDEO_LOG)
- rx_pr("hdcp14 unfinished\n");
- }
- #endif
return ret;
}
vic_check_en = true;
dvi_check_en = true;
rx.state = FSM_INIT;
- rx.physts.cable_clk = 0;
- rx.physts.pll_rate = 0;
- rx.physts.phy_bw = 0;
+ rx.phy.cable_clk = 0;
+ rx.phy.pll_rate = 0;
+ rx.phy.phy_bw = 0;
rx_pr("force_fsm_init\n");
}
return pr_var(packet_fifo_cfg, index);
if (set_pr_var(tmpbuf, pd_fifo_start_cnt, value, &index, ret))
return pr_var(pd_fifo_start_cnt, index);
- if (set_pr_var(tmpbuf, eq_ref_voltage, value, &index, ret))
- return pr_var(eq_ref_voltage, index);
if (set_pr_var(tmpbuf, hdcp22_on, value, &index, ret))
return pr_var(hdcp22_on, index);
if (set_pr_var(tmpbuf, dv_nopacket_timeout, value, &index, ret))
return pr_var(skip_frame_cnt, index);
if (set_pr_var(tmpbuf, vdin_drop_frame_cnt, value, &index, ret))
return pr_var(vdin_drop_frame_cnt, index);
- #ifndef USE_NEW_FSM_METHODE
- if (set_pr_var(tmpbuf, enable_hpd_reset, value, &index, ret))
- return pr_var(enable_hpd_reset, index);
- if (set_pr_var(tmpbuf, sig_unstable_reset_hpd_max, value, &index, ret))
- return pr_var(sig_unstable_reset_hpd_max, index);
- #endif
if (set_pr_var(tmpbuf, atmos_edid_update_hpd_en, value, &index, ret))
return pr_var(atmos_edid_update_hpd_en, index);
if (set_pr_var(tmpbuf, suspend_pddq_sel, value, &index, ret))
return pr_var(fsm_log_en, index);
if (set_pr_var(tmpbuf, err_chk_en, value, &index, ret))
return pr_var(err_chk_en, index);
-
+ if (set_pr_var(tmpbuf, phy_retry_times, value, &index, ret))
+ return pr_var(phy_retry_times, index);
+ if (set_pr_var(tmpbuf, find_best_eq, value, &index, ret))
+ return pr_var(find_best_eq, index);
+ if (set_pr_var(tmpbuf, eq_try_cnt, value, &index, ret))
+ return pr_var(eq_try_cnt, index);
return 0;
}
pr_var(pdec_ists_en, i++);
pr_var(packet_fifo_cfg, i++);
pr_var(pd_fifo_start_cnt, i++);
- pr_var(eq_ref_voltage, i++);
pr_var(hdcp22_on, i++);
pr_var(dv_nopacket_timeout, i++);
pr_var(delay_ms_cnt, i++);
pr_var(new_hdr_lum, i++);
pr_var(skip_frame_cnt, i++);
pr_var(vdin_drop_frame_cnt, i++);
- #ifndef USE_NEW_FSM_METHODE
- pr_var(enable_hpd_reset, i++);
- pr_var(sig_unstable_reset_hpd_max, i++);
- #endif
pr_var(atmos_edid_update_hpd_en, i++);
pr_var(suspend_pddq_sel, i++);
pr_var(aud_ch_map, i++);
pr_var(ignore_sscp_tmds, i++);
pr_var(fsm_log_en, i++);
pr_var(err_chk_en, i++);
+ pr_var(phy_retry_times, i++);
+ pr_var(find_best_eq, i++);
+ pr_var(eq_try_cnt, i++);
}
void skip_frame(unsigned int cnt)
rx.skip = (1000 * 100 / rx.pre.frame_rate / 10) + 1;
rx.skip = cnt * rx.skip;
}
- rx_pr("rx.skip = %d", rx.skip);
+ rx_pr("rx.skip = %d\n", rx.skip);
}
void wait_ddc_idle(void)
rx.cur_5v_sts = (pwr_sts >> rx.port) & 1;
hotplug_wait_query();
if (rx.cur_5v_sts == 0) {
- /*External_Mute(1);*/
- #ifdef USE_NEW_FSM_METHODE
set_fsm_state(FSM_5V_LOST);
rx.err_code = ERR_5V_LOST;
- #else
- set_fsm_state(FSM_HPD_LOW);
- #endif
vic_check_en = true;
dvi_check_en = true;
}
*/
void rx_monitor_error_cnt_start(void)
{
- rx.physts.timestap = get_seconds();
+ rx.phy.timestap = get_seconds();
}
/*
ulong timestap;
uint32_t ch0, ch1, ch2;
- if (rx.hdmirxdev->data->chip_id != CHIP_ID_TL1)
+ if (rx.chip_id != CHIP_ID_TL1)
return;
timestap = get_seconds();
- if ((timestap - rx.physts.timestap) > 1) {
- rx.physts.timestap = timestap;
+ if ((timestap - rx.phy.timestap) > 1) {
+ rx.phy.timestap = timestap;
rx_get_error_cnt(&ch0, &ch1, &ch2);
if (ch0 || ch1 || ch2)
rx_pr("err cnt:%d,%d,%d\n", ch0, ch1, ch2);
}
}
-#ifdef USE_NEW_FSM_METHODE
void rx_err_monitor(void)
{
//static bool hdcp14_sts;
break;
case ERR_CLK_UNSTABLE:
if (err_dbg_cnt == 0)
- rx_pr("PHY_MAINFSM_STATUS1 = %x\n",
- hdmirx_rd_phy(PHY_MAINFSM_STATUS1));
+ rx_pr("clk unstable = %d\n",
+ is_clk_stable());
break;
case ERR_PHY_UNLOCK:
- if (err_dbg_cnt == 0)
- rx_pr("EQ = %d-%d-%d\n",
- eq_ch0.bestsetting,
- eq_ch1.bestsetting,
- eq_ch2.bestsetting);
+ if (err_dbg_cnt == 0) {
+ if (rx.chip_id != CHIP_ID_TL1)
+ rx_pr("EQ = %d-%d-%d\n",
+ eq_ch0.bestsetting,
+ eq_ch1.bestsetting,
+ eq_ch2.bestsetting);
+ else
+ rx_pr("PHY unlock\n");
+ }
break;
case ERR_DE_UNSTABLE:
if (err_dbg_cnt == 0)
break;
case FSM_INIT:
signal_status_init();
- rx.physts.cable_clk = 0;
+ rx.phy.cable_clk = 0;
rx.state = FSM_HPD_HIGH;
break;
case FSM_HPD_HIGH:
downstream_hpd_flag = 0;
pre_port = rx.port;
rx_set_cur_hpd(1);
- rx.physts.cable_clk = 0;
+ rx.phy.cable_clk = 0;
+ rx.phy.cablesel = 0;
set_scdc_cfg(0, 1);
/* rx.hdcp.hdcp_version = HDCP_VER_NONE; */
rx.state = FSM_WAIT_CLK_STABLE;
clk_unstable_cnt = 0;
}
if (++clk_stable_cnt > clk_stable_max) {
- /* for tl1 no SW eq */
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1)
- rx.state = FSM_SIG_UNSTABLE;/*no sw eq*/
- else
- rx.state = FSM_EQ_START;
+ rx.state = FSM_EQ_START;
clk_stable_cnt = 0;
rx.err_code = ERR_NONE;
}
break;
}
clk_unstable_cnt = 0;
- /* do phy reset for ESD no signal issue.
- * sometimes after phy reset, phy is
- * still not work, need to do phy reset
- * again. do reset twice at most.
- */
if (esd_phy_rst_cnt < esd_phy_rst_max) {
hdmirx_phy_init();
- rx.physts.cable_clk = 0;
+ rx.phy.cable_clk = 0;
esd_phy_rst_cnt++;
}
rx.err_code = ERR_CLK_UNSTABLE;
}
if (rx.err_rec_mode == ERR_REC_EQ_RETRY) {
rx.state = FSM_WAIT_CLK_STABLE;
- /* pll unlock after ESD test, phy does't
- * work well, do phy reset twice at most.
- */
if (esd_phy_rst_cnt++ < esd_phy_rst_max) {
hdmirx_phy_init();
- rx.physts.cable_clk = 0;
+ rx.phy.cablesel++;
+ rx.phy.cable_clk = 0;
} else
rx.err_rec_mode = ERR_REC_HPD_RST;
} else if (rx.err_rec_mode == ERR_REC_HPD_RST) {
rx_set_cur_hpd(0);
- rx.physts.cable_clk = 0;
+ rx.phy.cable_clk = 0;
rx.state = FSM_HPD_HIGH;
- rx.err_rec_mode = ERR_REC_END;
- } else {
- rx.state = FSM_WAIT_CLK_STABLE;
- rx.err_code = ERR_PHY_UNLOCK;
+ rx.err_rec_mode = ERR_REC_EQ_RETRY;
}
rx_set_eq_run_state(E_EQ_START);
}
}
if (rx.err_rec_mode == ERR_REC_EQ_RETRY) {
rx.state = FSM_WAIT_CLK_STABLE;
+ rx.phy.cablesel++;
rx.err_rec_mode = ERR_REC_HPD_RST;
rx_set_eq_run_state(E_EQ_START);
} else if (rx.err_rec_mode == ERR_REC_HPD_RST) {
rx_set_cur_hpd(0);
- rx.physts.cable_clk = 0;
+ rx.phy.cable_clk = 0;
rx.state = FSM_HPD_HIGH;
- rx.err_rec_mode = ERR_REC_END;
- } else
- rx.err_code = ERR_DE_UNSTABLE;
+ rx.err_rec_mode = ERR_REC_EQ_RETRY;
+ }
}
break;
case FSM_SIG_READY:
rx.skip = 0;
rx.aud_sr_stable_cnt = 0;
rx.aud_sr_unstable_cnt = 0;
- rx.physts.cable_clk = 0;
+ rx.phy.cable_clk = 0;
esd_phy_rst_cnt = 0;
if (hdcp22_on) {
esm_set_stable(false);
hdmirx_phy_init();
rx.state = FSM_WAIT_CLK_STABLE;
/*timing sw at same FRQ*/
- rx.physts.cable_clk = 0;
+ rx.phy.cable_clk = 0;
/*rx.pre_state = FSM_SIG_READY;*/
rx_pr("reqclk err->wait_clk\n");
} else if (aud_sts == E_PLLRATE_CHG)
rx.pre_state = rx.state;
}
}
- #else
-void rx_main_state_machine(void)
-{
- int pre_sample_rate;
- int aud_pll_sts;
- int pre_auds_ch_alloc;
-
- if (clk_debug)
- rx_cable_clk_monitor();
-
- if (sm_pause)
- return;
-
- if (log_level & VIDEO_LOG)
- rx_esm_exception_monitor();/* only for debug */
-
- switch (rx.state) {
- case FSM_HPD_LOW:
- /* set_scdc_cfg(1, 1); */
- rx_set_cur_hpd(0);
- rx_irq_en(false);
- rx.state = FSM_INIT;
- set_scdc_cfg(1, 0);
- rx_pr("HPD_LOW\n");
- break;
- case FSM_INIT:
- signal_status_init();
- rx.state = FSM_HPD_HIGH;
- rx.pre_state = FSM_INIT;
- rx_pr("FSM_INIT->HPD_HIGH\n");
- break;
- case FSM_HPD_HIGH:
- if (rx.cur_5v_sts == 0) {
- rx.no_signal = true;
- break;
- }
- hpd_wait_cnt++;
- if (rx_get_cur_hpd_sts() == 0) {
- if (edid_update_flag) {
- if (hpd_wait_cnt <= hpd_wait_max*10)
- break;
- } else {
- if (hpd_wait_cnt <= hpd_wait_max)
- break;
- }
- }
- hpd_wait_cnt = 0;
- pre_port = rx.port;
- rx_set_cur_hpd(1);
- set_scdc_cfg(0, 1);
- /* some box init hdcp authentication too early
- * and it may make the hdcp_version error
- */
- /* rx.hdcp.hdcp_version = HDCP_VER_NONE; */
- rx.state = FSM_WAIT_CLK_STABLE;
- rx_pr("HPD_HIGH->CLK_STABLE\n");
- break;
- case FSM_WAIT_CLK_STABLE:
- if (rx_clkrate_monitor()) {
- rx_pr("clk rate changed\n");
- break;
- }
- if (is_clk_stable()) {
- clk_unstable_cnt = 0;
- if (clk_stable_cnt++ > clk_stable_max) {
- rx.state = FSM_EQ_START;
- rx_pr("WAIT_CLK_STABLE->EQ_INIT\n");
- clk_stable_cnt = 0;
- }
- } else {
- clk_stable_cnt = 0;
- if (clk_unstable_cnt++ >= clk_unstable_max) {
- rx.state = FSM_HPD_LOW;
- pre_port = 0xfe;
- rx_pr("WAIT_CLK_STABLE->HPD_LOW\n");
- clk_unstable_cnt = 0;
- }
- }
- break;
- case FSM_EQ_START:
- if (rx_clkrate_monitor()) {
- rx.state = FSM_WAIT_CLK_STABLE;
- rx_pr("clk rate changed\n");
- break;
- }
- rx_eq_algorithm();
- rx.state = FSM_WAIT_EQ_DONE;
- break;
- case FSM_WAIT_EQ_DONE:
- if (rx_get_eq_run_state() == E_EQ_FINISH ||
- rx_get_eq_run_state() == E_EQ_SAME)
- rx.state = FSM_SIG_UNSTABLE;
- break;
- case FSM_SIG_UNSTABLE:
- if (rx_clkrate_monitor()) {
- rx.state = FSM_WAIT_CLK_STABLE;
- pll_lock_cnt = 0;
- pll_unlock_cnt = 0;
- rx_pr("clk rate changed\n");
- break;
- }
- if (log_level & VIDEO_LOG)
- rx_pr("lock_cnt:%d,unlock_cnt:%d\n",
- pll_lock_cnt, pll_unlock_cnt);
- if (is_tmds_valid()) {
- pll_unlock_cnt = 0;
- if (pll_lock_cnt++ > pll_lock_max) {
- rx.state = FSM_SIG_WAIT_STABLE;
- rx_dwc_reset();
- pll_lock_cnt = 0;
- pll_unlock_check_times = 0;
- rx_pr("UNSTABLE->WAIT_STABLE\n");
- }
- } else {
- pll_lock_cnt = 0;
- if (pll_unlock_cnt++ >= pll_unlock_max) {
- if (pll_unlock_check_times++ >=
- pll_unlock_check_times_max) {
- pll_unlock_check_times = 0;
- rx.state = FSM_HPD_LOW;
- } else
- rx.state = FSM_WAIT_CLK_STABLE;
- pll_unlock_cnt = 0;
- rx_set_eq_run_state(E_EQ_FAIL);
- rx_pr("UNSTABLE->HPD_LOW\n");
- }
- }
- break;
- case FSM_SIG_WAIT_STABLE:
- if (rx_clkrate_monitor()) {
- rx.state = FSM_WAIT_CLK_STABLE;
- dwc_rst_wait_cnt = 0;
- rx_pr("clk rate changed\n");
- break;
- }
- dwc_rst_wait_cnt++;
- if (dwc_rst_wait_cnt < dwc_rst_wait_cnt_max)
- break;
- if ((edid_update_flag) &&
- (dwc_rst_wait_cnt < edid_update_delay))
- break;
- edid_update_flag = 0;
- dwc_rst_wait_cnt = 0;
- rx.state = FSM_SIG_STABLE;
- rx_pr("DWC_RST->FSM_SIG_STABLE\n");
- break;
- case FSM_SIG_STABLE:
- if (rx_clkrate_monitor()) {
- rx.state = FSM_WAIT_CLK_STABLE;
- sig_stable_cnt = 0;
- sig_unstable_cnt = 0;
- rx_pr("clk rate changed\n");
- break;
- }
- memcpy(&rx.pre, &rx.cur,
- sizeof(struct rx_video_info));
- rx_get_video_info();
- if (rx_is_timing_stable() && is_hdcp_enc_stable()) {
- if (sig_stable_cnt++ > sig_stable_max) {
- get_timing_fmt();
- if (is_unnormal_format(sig_stable_cnt))
- break;
- if (fmt_vic_abnormal() &&
- (vic_check_en == true)) {
- hdmirx_hw_config();
- hdmi_rx_top_edid_update();
- rx.state = FSM_HPD_LOW;
- vic_check_en = false;
- break;
- }
- sig_stable_cnt = 0;
- sig_unstable_cnt = 0;
- if (rx.pre.sw_dvi && dvi_check_en &&
- (rx.hdcp.hdcp_version ==
- HDCP_VER_NONE)) {
- rx.state = FSM_HPD_LOW;
- dvi_check_en = false;
- break;
- }
- rx.skip = 0;
- if ((rx.pre.hdcp14_state == 0) ||
- (rx.pre.hdcp14_state == 2))
- is_hdcp_source = false;
- rx.state = FSM_SIG_READY;
- rx.aud_sr_stable_cnt = 0;
- rx.aud_sr_unstable_cnt = 0;
- rx.no_signal = false;
- memset(&rx.aud_info, 0,
- sizeof(struct aud_info_s));
- //rx_set_eq_run_state(E_EQ_PASS);
- hdmirx_config_video();
- rx_get_audinfo(&rx.aud_info);
- hdmirx_config_audio();
- hdmirx_audio_fifo_rst();
- rx_pr("STABLE->READY\n");
- if (log_level & VIDEO_LOG)
- dump_state(RX_DUMP_VIDEO);
- }
- } else {
- sig_stable_cnt = 0;
- if (sig_unstable_cnt++ > sig_unstable_max) {
- rx.state = FSM_WAIT_CLK_STABLE;
- rx_set_eq_run_state(E_EQ_FAIL);
- sig_stable_cnt = 0;
- sig_unstable_cnt = 0;
- if (enable_hpd_reset) {
- sig_unstable_reset_hpd_cnt++;
- if (sig_unstable_reset_hpd_cnt >=
- sig_unstable_reset_hpd_max) {
- rx.state = FSM_HPD_HIGH;
- rx_set_cur_hpd(0);
- sig_unstable_reset_hpd_cnt = 0;
- rx_pr(
- "unstable->HDMI5V_HIGH\n");
- break;
- }
- }
- rx_pr("STABLE->HPD_READY\n");
- }
- }
- break;
- case FSM_SIG_READY:
- if (rx_clkrate_monitor()) {
- rx.state = FSM_WAIT_CLK_STABLE;
- sig_unready_cnt = 0;
- rx_pr("clk rate changed\n");
- break;
- }
- rx_get_video_info();
- /* video info change */
- if ((is_tmds_valid() == false) ||
- (rx_is_timing_stable() == false)) {
- skip_frame(skip_frame_cnt);
- if (++sig_unready_cnt >= sig_unready_max) {
- /*sig_lost_lock_cnt = 0;*/
- sig_unready_cnt = 0;
- audio_sample_rate = 0;
- rx_aud_pll_ctl(0);
- rx.hdcp.hdcp_version = HDCP_VER_NONE;
- rx.state = FSM_WAIT_CLK_STABLE;
- rx.pre_state = FSM_SIG_READY;
- rx.skip = 0;
- vic_check_en = true;
- rx.aud_sr_stable_cnt = 0;
- rx.aud_sr_unstable_cnt = 0;
- if (hdcp22_on) {
- esm_set_stable(false);
- if (esm_recovery_mode ==
- ESM_REC_MODE_RESET)
- esm_set_reset(true);
- /* else */
- /* rx_esm_tmdsclk_en(false); */
- }
- memset(&rx.pre, 0,
- sizeof(struct rx_video_info));
- memset(&rx.vs_info_details,
- 0,
- sizeof(struct vsi_info_s));
- rx_pr("READY->wait_clk\n");
- break;
- }
- } else {
- if (sig_unready_cnt != 0) {
- if (log_level & VIDEO_LOG)
- rx_pr("sig_unready_cnt=%d\n",
- sig_unready_cnt);
- sig_unready_cnt = 0;
- }
- }
-
- /* if (rx.no_signal == true) */
- /* rx.no_signal = false; */
-
- if (rx.skip > 0) {
- rx.skip--;
- if (log_level & VIDEO_LOG)
- rx_pr("rc--%d\n", rx.skip);
- }
-
- if (rx.pre.sw_dvi == 1)
- break;
-
- pre_sample_rate = rx.aud_info.real_sr;
- pre_auds_ch_alloc = rx.aud_info.auds_ch_alloc;
- rx_get_audinfo(&rx.aud_info);
- rx.aud_info.real_sr =
- get_real_sample_rate();
-
- if (is_sample_rate_change
- (pre_sample_rate, rx.aud_info.real_sr) ||
- is_aud_ch_map_change
- (pre_auds_ch_alloc, rx.aud_info.auds_ch_alloc)) {
- if (log_level & AUDIO_LOG)
- dump_state(RX_DUMP_AUDIO);
- rx.aud_sr_stable_cnt = 0;
- break;
- }
-
- packet_update();
-
- if (rx.aud_sr_stable_cnt < aud_sr_stb_max) {
- rx.aud_sr_stable_cnt++;
- break;
- }
- if (rx.aud_sr_stable_cnt == aud_sr_stb_max) {
- dump_state(RX_DUMP_AUDIO);
- rx_aud_pll_ctl(1);
- if (is_afifo_error()) {
- if (log_level & AUDIO_LOG)
- rx_pr("afifo err\n");
- }
- hdmirx_config_audio();
- hdmirx_audio_fifo_rst();
- rx_pr("update audio\n");
- rx_audio_pll_sw_update();
- rx.aud_sr_stable_cnt++;
- }
- if (is_aud_pll_error()) {
- rx.aud_sr_unstable_cnt++;
- if (rx.aud_sr_unstable_cnt > aud_sr_stb_max) {
- aud_pll_sts = rx_get_aud_pll_err_sts();
- if (aud_pll_sts == E_REQUESTCLK_ERR) {
- hdmirx_phy_init();
- rx.state = FSM_WAIT_CLK_STABLE;
- rx.pre_state = FSM_SIG_READY;
- rx_pr("reqclk err->wait_clk\n");
- } else if (aud_pll_sts == E_PLLRATE_CHG)
- rx_aud_pll_ctl(1);
- else if (aud_pll_sts == E_AUDCLK_ERR) {
- rx_audio_bandgap_rst();
- rx.aud_sr_stable_cnt = 0;
- } else {
- rx_acr_info_sw_update();
- rx_audio_pll_sw_update();
- if (log_level & AUDIO_LOG)
- rx_pr("update audio-err\n");
- }
- rx.aud_sr_unstable_cnt = 0;
- }
- } else
- rx.aud_sr_unstable_cnt = 0;
-
- break;
- default:
- break;
- }
-}
-#endif
unsigned int hdmirx_show_info(unsigned char *buf, int size)
{
uint32_t val0, val1, val2;
rx_pr("[PHY info]\n");
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
rx_get_error_cnt(&val0, &val1, &val2);
rx_pr("err cnt- ch0: %d,ch1:%d ch2:%d\n", val0, val1, val2);
rx_pr("PLL_LCK_STS(tmds valid) = 0x%x\n",
rx_pr(" CA=%u\n", a.auds_ch_alloc);
rx_pr("CTS=%d, N=%d,", a.cts, a.n);
rx_pr("acr clk=%d\n", a.arc);
- if (rx.hdmirxdev->data->chip_id == CHIP_ID_TL1) {
+ if (rx.chip_id == CHIP_ID_TL1) {
rx_get_audio_N_CTS(&val0, &val1);
rx_pr("top CTS:%d, N:%d\n", val1, val0);
}
hdmirx_rd_dwc(DWC_HDCP_BKSV0));
}
-void dump_state(enum dumpinfo_e enable)
+void dump_state(int enable)
{
rx_get_video_info();
- if (enable & RX_DUMP_VIDEO) /* video info */
+ if (enable == RX_DUMP_VIDEO) /* video info */
dump_video_status();
- else if (enable & RX_DUMP_AUDIO) /* audio info */
+ else if (enable & RX_DUMP_ALL) {
+ dump_clk_status();
+ dump_phy_status();
+ dump_video_status();
+ dump_audio_status();
+ dump_hdcp_status();
+ } else if (enable & RX_DUMP_AUDIO) /* audio info */
dump_audio_status();
else if (enable & RX_DUMP_HDCP) /* hdcp info */
dump_hdcp_status();
dump_phy_status();
else if (enable & RX_DUMP_CLK) /* clk src info */
dump_clk_status();
- else {
- dump_clk_status();
- dump_phy_status();
+ else
dump_video_status();
- dump_audio_status();
- dump_hdcp_status();
- }
}
void rx_debug_help(void)
rx_pr("set pkt cnt:0x%x\n", value);
rx.empbuff.tmdspktcnt = value;
} else if (strncmp(input[0], "phyinit", 7) == 0) {
- aml_phy_bw_switch(rx_get_clock(TOP_HDMI_CABLECLK),
- rx_get_scdc_clkrate_sts());
+ aml_phy_bw_switch();
} else if (strncmp(input[0], "phyeq", 5) == 0) {
- aml_eq_setting(rx.physts.phy_bw);
+ //aml_eq_setting();
+ find_best_eq = 0x1111;
+ rx.phy.err_sum = 0xffffff;
} else if (strncmp(tmpbuf, "audio", 5) == 0) {
hdmirx_audio_fifo_rst();
}
rx_nosig_monitor();
if (!hdmirx_repeat_support() || !rx.firm_change) {
if (!sm_pause) {
- #ifdef USE_NEW_FSM_METHODE
rx_clkrate_monitor();
- #endif
rx_main_state_machine();
}
rx_pkt_check_content();
- #ifdef USE_NEW_FSM_METHODE
rx_err_monitor();
- #endif
-
#ifdef K_TEST_CHK_ERR_CNT
- if (err_chk_en || (rx.state != FSM_SIG_READY))
+ if (err_chk_en)
rx_monitor_error_counter();
+ rx_get_best_eq_setting();
#endif
}
}
#define PHY_REQUEST_CLK_MIN 170000000
#define PHY_REQUEST_CLK_MAX 370000000
#define TIMER_STATE_CHECK (1*HZ/100)
-#define USE_NEW_FSM_METHODE
struct freq_ref_s {
bool interlace;
};
enum dumpinfo_e {
- RX_DUMP_VIDEO = 0x01,
+ RX_DUMP_VIDEO = 0,
+ RX_DUMP_ALL = 1,
RX_DUMP_AUDIO = 0x02,
RX_DUMP_HDCP = 0x04,
RX_DUMP_PHY = 0x08,
- RX_DUMP_CLK = 0x10,
- RX_DUMP_ALL = 0x80,
+ RX_DUMP_CLK = 0x10
};
/* signal */
extern void rx_emp_resource_allocate(struct device *dev);
extern void rx_emp_data_capture(void);
extern void rx_tmds_data_capture(void);
-extern void dump_state(enum dumpinfo_e enable);
+extern void dump_state(int enable);
+extern void hdmirx_init_params(void);
#endif