mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
hdmitx: move work_internal_intr to delayed_work [1/1]
PD#SWPL-6894 Problem: Queue work 'work_internal_intr' cause the hdcp22 flicker Solution: Move work_internal_intr to delayed_work Verify: G12/U212 Change-Id: Ib05c82bb66c9ad7396790d5eb237ff486c56c980 Signed-off-by: Zongdong Jiao <zongdong.jiao@amlogic.com> Signed-off-by: Luan Yuan <luan.yuan@amlogic.com>
This commit is contained in:
@@ -3909,7 +3909,7 @@ static void hdmitx_hpd_plugout_handler(struct work_struct *work)
|
||||
|
||||
static void hdmitx_internal_intr_handler(struct work_struct *work)
|
||||
{
|
||||
struct hdmitx_dev *hdev = container_of((struct work_struct *)work,
|
||||
struct hdmitx_dev *hdev = container_of((struct delayed_work *)work,
|
||||
struct hdmitx_dev, work_internal_intr);
|
||||
|
||||
hdev->HWOp.DebugFun(hdev, "dumpintr");
|
||||
@@ -3962,7 +3962,7 @@ static int hdmi_task_handle(void *data)
|
||||
hdmitx_hpd_plugin_handler);
|
||||
INIT_DELAYED_WORK(&hdmitx_device->work_hpd_plugout,
|
||||
hdmitx_hpd_plugout_handler);
|
||||
INIT_WORK(&hdmitx_device->work_internal_intr,
|
||||
INIT_DELAYED_WORK(&hdmitx_device->work_internal_intr,
|
||||
hdmitx_internal_intr_handler);
|
||||
|
||||
/* for rx sense feature */
|
||||
|
||||
@@ -642,9 +642,8 @@ static irqreturn_t intr_handler(int irq, void *dev)
|
||||
hdmitx_wr_reg(HDMITX_TOP_INTR_STAT_CLR, ~0);
|
||||
hdmitx_wr_reg(HDMITX_DWC_HDCP22REG_STAT, 0xff);
|
||||
|
||||
pr_info(SYS "irq %x\n", dat_top);
|
||||
if (dat_dwc)
|
||||
pr_info(SYS "irq %x\n", dat_dwc);
|
||||
pr_info(SYS "irq %x %x\n", dat_top, dat_dwc);
|
||||
|
||||
if (hdev->hpd_lock == 1) {
|
||||
pr_info(HW "HDMI hpd locked\n");
|
||||
goto next;
|
||||
@@ -675,7 +674,8 @@ static irqreturn_t intr_handler(int irq, void *dev)
|
||||
/* internal interrupt */
|
||||
if (dat_top & (1 << 0)) {
|
||||
hdev->hdmitx_event |= HDMI_TX_INTERNAL_INTR;
|
||||
queue_work(hdev->hdmi_wq, &hdev->work_internal_intr);
|
||||
queue_delayed_work(hdev->hdmi_wq,
|
||||
&hdev->work_internal_intr, HZ / 10);
|
||||
}
|
||||
if (dat_top & (1 << 3)) {
|
||||
unsigned int rd_nonce_mode =
|
||||
@@ -2730,11 +2730,9 @@ do { \
|
||||
|
||||
#define DUMP_HDMITXREG_SECTION(start, end) \
|
||||
do { \
|
||||
if (start > end) { \
|
||||
pr_info("Error start = 0x%lx > end = 0x%lx\n", start, end); \
|
||||
if (start > end) \
|
||||
break; \
|
||||
} \
|
||||
pr_info("Start = 0x%lx End = 0x%lx\n", start, end); \
|
||||
\
|
||||
for (addr = start; addr < end + 1; addr++) { \
|
||||
val = hdmitx_rd_reg(addr); \
|
||||
if (val) \
|
||||
@@ -2746,7 +2744,12 @@ static void hdmitx_dump_intr(void)
|
||||
{
|
||||
unsigned int addr = 0, val = 0;
|
||||
|
||||
DUMP_HDMITXREG_SECTION(HDMITX_DWC_IH_FC_STAT0, HDMITX_DWC_IH_MUTE);
|
||||
DUMP_HDMITXREG_SECTION(HDMITX_DWC_IH_FC_STAT0,
|
||||
HDMITX_DWC_IH_I2CMPHY_STAT0);
|
||||
DUMP_HDMITXREG_SECTION(HDMITX_DWC_IH_DECODE, HDMITX_DWC_IH_DECODE);
|
||||
DUMP_HDMITXREG_SECTION(HDMITX_DWC_IH_MUTE_FC_STAT0,
|
||||
HDMITX_DWC_IH_MUTE_I2CMPHY_STAT0);
|
||||
DUMP_HDMITXREG_SECTION(HDMITX_DWC_IH_MUTE, HDMITX_DWC_IH_MUTE);
|
||||
}
|
||||
|
||||
static void mode420_half_horizontal_para(void)
|
||||
|
||||
@@ -307,7 +307,7 @@ struct hdmitx_dev {
|
||||
struct delayed_work work_hpd_plugin;
|
||||
struct delayed_work work_hpd_plugout;
|
||||
struct delayed_work work_rxsense;
|
||||
struct work_struct work_internal_intr;
|
||||
struct delayed_work work_internal_intr;
|
||||
struct work_struct work_hdr;
|
||||
struct delayed_work work_do_hdcp;
|
||||
#ifdef CONFIG_AML_HDMI_TX_14
|
||||
|
||||
Reference in New Issue
Block a user