dev_name = "amhdmitx";
status = "okay";
vend-data = <&vend_data>;
- //pinctrl-names="hdmitx_hpd", "hdmitx_ddc";
- //pinctrl-0=<&hdmitx_hpd>;
- //pinctrl-1=<&hdmitx_ddc>;
+ pinctrl-names="default", "hdmitx_i2c";
+ pinctrl-0=<&hdmitx_hpd &hdmitx_ddc>;
+ pinctrl-1=<&hdmitx_hpd_gpio &c_i2c_master>;
clocks = <&clkc CLKID_VAPB_MUX>,
<&clkc CLKID_VPU_MUX>;
clock-names = "hdmi_vapb_clk",
dev_name = "amhdmitx";
status = "okay";
vend-data = <&vend_data>;
- //pinctrl-names="hdmitx_hpd", "hdmitx_ddc";
- //pinctrl-0=<&hdmitx_hpd>;
- //pinctrl-1=<&hdmitx_ddc>;
+ pinctrl-names="default", "hdmitx_i2c";
+ pinctrl-0=<&hdmitx_hpd &hdmitx_ddc>;
+ pinctrl-1=<&hdmitx_hpd_gpio &c_i2c_master>;
clocks = <&clkc CLKID_VAPB_MUX>,
<&clkc CLKID_VPU_MUX>;
clock-names = "hdmi_vapb_clk",
};
};
+ hdmitx_hpd: hdmitx_hpd {
+ mux {
+ groups = "hdmitx_hpd_in";
+ function = "hdmitx";
+ bias-disable;
+ };
+ };
+
+ hdmitx_hpd_gpio: hdmitx_hpd_gpio {
+ mux {
+ groups = "GPIOH_1";
+ function = "gpio_periphs";
+ bias-disable;
+ };
+ };
+
+ hdmitx_ddc: hdmitx_ddc {
+ mux {
+ groups = "hdmitx_sda",
+ "hdmitx_sck";
+ function = "hdmitx";
+ bias-disable;
+ };
+ };
+
+ c_i2c_master: c_i2c {
+ mux {
+ groups = "i2c0_sda_c",
+ "i2c0_sck_c";
+ function = "i2c3";
+ bias-disable;
+ };
+ };
+
wifi_32k_pins:wifi_32k_pins {
mux {
groups = "pwm_e";
return valid;
}
-/*
- * For some TVs, their EDID declare support 2160p60hz(>3.4Gbps) on SVDs,
- * but no HF_IEEEOUT, so consider they don't support that format.
- */
-static enum hdmi_vic hdmitx_edid_recheck_format(struct hdmitx_dev *hdev,
- enum hdmi_vic vic)
-{
- struct rx_cap *pRXCap = &(hdev->RXCap);
-
- switch (vic) {
- case HDMI_3840x2160p50_16x9:
- case HDMI_3840x2160p60_16x9:
- case HDMI_4096x2160p50_256x135:
- case HDMI_4096x2160p60_256x135:
- case HDMI_3840x2160p50_64x27:
- case HDMI_3840x2160p60_64x27:
- break;
- default:
- return vic;
- }
-
- if (!pRXCap->HF_IEEEOUI || ((pRXCap->Max_TMDS_Clock2 * 5) < 340))
- vic = HDMI_Unknown;
- return vic;
-}
-
/* force_flag: 0 means check with RX's edid */
/* 1 means no check wich RX's edid */
enum hdmi_vic hdmitx_edid_get_VIC(struct hdmitx_dev *hdev,
vic = HDMI_Unknown;
}
}
- vic = hdmitx_edid_recheck_format(hdev, vic);
return vic;
}
HDMI_4096x2160p25_256x135,
HDMI_4096x2160p30_256x135,
HDMI_VIC_END},
- 5940000, 2, 1, 1, VID_PLL_DIV_5, 2, 1, 1, -1},
+ 2970000, 1, 1, 1, VID_PLL_DIV_5, 2, 1, 1, -1},
{{HDMI_3840x2160p60_16x9,
HDMI_3840x2160p50_16x9,
HDMI_4096x2160p60_256x135,
HDMI_3840x2160p60_16x9_Y420,
HDMI_3840x2160p50_16x9_Y420,
HDMI_VIC_END},
- 5940000, 2, 1, 1, VID_PLL_DIV_5, 1, 2, 1, -1},
+ 2970000, 1, 1, 1, VID_PLL_DIV_5, 1, 2, 1, -1},
{{HDMI_VIC_FAKE,
HDMI_VIC_END},
3450000, 1, 2, 2, VID_PLL_DIV_5, 1, 1, 1, -1},
{
switch (clk) {
case 5940000:
- hd_write_reg(P_HHI_HDMI_PLL_CNTL0, 0x3b0004f7);
+ hd_write_reg(P_HHI_HDMI_PLL_CNTL0, 0x3b3a04f7);
hd_write_reg(P_HHI_HDMI_PLL_CNTL1, 0x00010000);
hd_write_reg(P_HHI_HDMI_PLL_CNTL2, 0x00000000);
- hd_write_reg(P_HHI_HDMI_PLL_CNTL3, 0x0a691c00);
- hd_write_reg(P_HHI_HDMI_PLL_CNTL4, 0x33771290);
+ hd_write_reg(P_HHI_HDMI_PLL_CNTL3, 0x2a29dc00);
+ hd_write_reg(P_HHI_HDMI_PLL_CNTL4, 0x65771290);
hd_write_reg(P_HHI_HDMI_PLL_CNTL5, 0x39270000);
hd_write_reg(P_HHI_HDMI_PLL_CNTL6, 0x50540000);
pr_info("HPLL: 0x%x\n", hd_read_reg(P_HHI_HDMI_PLL_CNTL0));
WAIT_FOR_PLL_LOCKED(P_HHI_HDMI_PLL_CNTL0);
pr_info("HPLL: 0x%x\n", hd_read_reg(P_HHI_HDMI_PLL_CNTL0));
break;
- case 4320000:
+ case 4324320:
hd_write_reg(P_HHI_HDMI_PLL_CNTL0, 0x3b0004b4);
hd_write_reg(P_HHI_HDMI_PLL_CNTL1, 0x00000000);
hd_write_reg(P_HHI_HDMI_PLL_CNTL2, 0x00000000);
#define HDMITX_SEC_REG_ADDR(reg) \
((HDMITX_SEC_REG_IDX << BASE_REG_OFFSET) + reg)
#define HDMITX_REG_ADDR(reg) \
- ((HDMITX_REG_IDX << BASE_REG_OFFSET) + (reg << 2))
+ ((HDMITX_REG_IDX << BASE_REG_OFFSET) + reg)
#define ELP_ESM_REG_ADDR(reg) \
((ELP_ESM_REG_IDX << BASE_REG_OFFSET) + (reg << 2))
#define P_HDMITX_DATA_PORT_SEC HDMITX_SEC_REG_ADDR(HDMITX_DATA_PORT_SEC)
#define HDMITX_CTRL_PORT_SEC (0x02 << 2)
#define P_HDMITX_CTRL_PORT_SEC HDMITX_SEC_REG_ADDR(HDMITX_CTRL_PORT_SEC)
-#define HDMITX_ADDR_PORT 0x00
+#define HDMITX_ADDR_PORT (0x00 << 2)
#define P_HDMITX_ADDR_PORT HDMITX_REG_ADDR(HDMITX_ADDR_PORT)
-#define HDMITX_DATA_PORT 0x01
+#define HDMITX_DATA_PORT (0x01 << 2)
#define P_HDMITX_DATA_PORT HDMITX_REG_ADDR(HDMITX_DATA_PORT)
-#define HDMITX_CTRL_PORT 0x02
+#define HDMITX_CTRL_PORT (0x02 << 2)
#define P_HDMITX_CTRL_PORT HDMITX_REG_ADDR(HDMITX_CTRL_PORT)
#define ELP_ESM_HPI_REG_BASE 0x0
unsigned long hdmitx_addr = 0;
unsigned int val;
- if (large_offset == 0x10) {
+ switch (large_offset) {
+ case 0x10:
+ /*DWC*/
hdmitx_addr = HDMITX_SEC_REG_ADDR(small_offset);
val = readb(TO_PMAP_ADDR(hdmitx_addr));
- } else if ((large_offset == 0x11) || (large_offset == 0x01))
+ break;
+ case 0x11:
+ case 0x01:
+ /*SECURITY DWC/TOP*/
val = hdmitx_rd_reg_normal(addr);
- else {
- hdmitx_addr = HDMITX_REG_ADDR(small_offset);
- val = readl(TO_PMAP_ADDR(hdmitx_addr));
+ break;
+ case 00:
+ default:
+ /*TOP*/
+ if ((small_offset >= 0x2000) && (small_offset <= 0x365E)) {
+ hdmitx_addr = HDMITX_REG_ADDR(small_offset);
+ val = readb(TO_PMAP_ADDR(hdmitx_addr));
+ } else {
+ hdmitx_addr = HDMITX_REG_ADDR((small_offset << 2));
+ val = readl(TO_PMAP_ADDR(hdmitx_addr));
+ }
+ break;
}
return val;
}
unsigned int small_offset = addr & ((1 << 24) - 1);
unsigned long hdmitx_addr = 0;
- if (large_offset == 0x10) {
+ switch (large_offset) {
+ case 0x10:
+ /*DWC*/
hdmitx_addr = HDMITX_SEC_REG_ADDR(small_offset);
writeb(data & 0xff, TO_PMAP_ADDR(hdmitx_addr));
- } else if ((large_offset == 0x11) || (large_offset == 0x01))
+ break;
+ case 0x11:
+ case 0x01:
+ /*SECURITY DWC/TOP*/
hdmitx_wr_reg_normal(addr, data);
- else {
- hdmitx_addr = HDMITX_REG_ADDR(small_offset);
- writel(data, TO_PMAP_ADDR(hdmitx_addr));
+ break;
+ case 00:
+ default:
+ /*TOP*/
+ if ((small_offset >= 0x2000) && (small_offset <= 0x365E)) {
+ hdmitx_addr = HDMITX_REG_ADDR(small_offset);
+ writeb(data & 0xff, TO_PMAP_ADDR(hdmitx_addr));
+ } else {
+ hdmitx_addr = HDMITX_REG_ADDR((small_offset << 2));
+ writel(data, TO_PMAP_ADDR(hdmitx_addr));
+ }
}
}
#define HDMITX_SEC_REG_ADDR(reg) \
((HDMITX_SEC_REG_IDX << BASE_REG_OFFSET) + reg)/*DWC*/
#define HDMITX_REG_ADDR(reg) \
- ((HDMITX_REG_IDX << BASE_REG_OFFSET) + (reg << 2))/*TOP*/
+ ((HDMITX_REG_IDX << BASE_REG_OFFSET) + reg)/*TOP*/
#define ELP_ESM_REG_ADDR(reg) \
((ELP_ESM_REG_IDX << BASE_REG_OFFSET) + (reg << 2))