summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArchit Taneja <archit@ti.com>2012-05-18 19:45:40 +0530
committerAndy Green <andy.green@linaro.org>2012-11-27 11:42:22 +0800
commitf224ef27c8d486437ef400f236bc72b03e7a4219 (patch)
tree1fdd4b16b6417b4e7a35639d7e6bba9c1fe31aa9
parent84ca80b6f80351487a0e277e0541c7b718ae99c2 (diff)
OMAPDSS: HDMI: interrupts handling patch for OMAP5
Handle the interrupt recieved from core, dummy for now. Signed-off-by: Mythri P K <mythripk@ti.com> Conflicts: drivers/video/omap2/dss/ti_hdmi.h
-rw-r--r--drivers/video/omap2/dss/dss_features.c1
-rw-r--r--drivers/video/omap2/dss/hdmi.c2
-rw-r--r--drivers/video/omap2/dss/ti_hdmi.h3
-rw-r--r--drivers/video/omap2/dss/ti_hdmi_5xxx_ip.c35
4 files changed, 38 insertions, 3 deletions
diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
index 63f679e8cc3..c8ab6424f6c 100644
--- a/drivers/video/omap2/dss/dss_features.c
+++ b/drivers/video/omap2/dss/dss_features.c
@@ -838,6 +838,7 @@ static const struct ti_hdmi_ip_ops omap5_hdmi_functions = {
.video_enable = ti_hdmi_4xxx_wp_video_start,
.video_disable = ti_hdmi_4xxx_wp_video_stop,
.irq_handler = ti_hdmi_4xxx_irq_handler,
+ .irq_process = ti_hdmi_5xxx_irq_process,
};
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index bb7a88b35b6..55f48f03e64 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -760,7 +760,7 @@ static irqreturn_t hdmi_irq_handler(int irq, void *arg)
r = hdmi.ip_data.ops->irq_handler(&hdmi.ip_data);
DSSDBG("Received HDMI IRQ = %08x\n", r);
-
+ r = hdmi.ip_data.ops->irq_process(&hdmi.ip_data);
return IRQ_HANDLED;
}
diff --git a/drivers/video/omap2/dss/ti_hdmi.h b/drivers/video/omap2/dss/ti_hdmi.h
index 6b379b2cae1..dd08db4497c 100644
--- a/drivers/video/omap2/dss/ti_hdmi.h
+++ b/drivers/video/omap2/dss/ti_hdmi.h
@@ -122,6 +122,8 @@ struct ti_hdmi_ip_ops {
int (*irq_handler) (struct hdmi_ip_data *ip_data);
+ int (*irq_process) (struct hdmi_ip_data *ip_data);
+
};
/*
@@ -207,4 +209,5 @@ void ti_hdmi_5xxx_basic_configure(struct hdmi_ip_data *ip_data);
void ti_hdmi_5xxx_core_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
int ti_hdmi_5xxx_read_edid(struct hdmi_ip_data *ip_data,
u8 *edid, int len);
+int ti_hdmi_5xxx_irq_process(struct hdmi_ip_data *ip_data);
#endif
diff --git a/drivers/video/omap2/dss/ti_hdmi_5xxx_ip.c b/drivers/video/omap2/dss/ti_hdmi_5xxx_ip.c
index 83557cbc6cb..34fe8f13334 100644
--- a/drivers/video/omap2/dss/ti_hdmi_5xxx_ip.c
+++ b/drivers/video/omap2/dss/ti_hdmi_5xxx_ip.c
@@ -87,7 +87,7 @@ static void hdmi_core_ddc_init(struct hdmi_ip_data *ip_data)
REG_FLD_MOD(core_sys_base, HDMI_CORE_I2CM_INT, 0x0, 2, 2);
/* Master clock division */
- REG_FLD_MOD(core_sys_base, HDMI_CORE_I2CM_DIV, 0x5, 2, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_I2CM_DIV, 0x5, 3, 0);
/* Standard speed counter */
REG_FLD_MOD(core_sys_base, HDMI_CORE_I2CM_SS_SCL_HCNT_1_ADDR, 0x0,
@@ -397,6 +397,9 @@ static void hdmi_enable_video_path(struct hdmi_ip_data *ip_data)
static void hdmi_core_mask_interrupts(struct hdmi_ip_data *ip_data)
{
void __iomem *core_sys_base = hdmi_core_sys_base(ip_data);
+
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_MUTE, 0xFF, 2, 0);
+
REG_FLD_MOD(core_sys_base, HDMI_CORE_VP_MASK, 0xff, 7, 0);
REG_FLD_MOD(core_sys_base, HDMI_CORE_FC_MASK0, 0xff, 7, 0);
REG_FLD_MOD(core_sys_base, HDMI_CORE_FC_MASK1, 0xfb, 7, 0);
@@ -413,13 +416,41 @@ static void hdmi_core_mask_interrupts(struct hdmi_ip_data *ip_data)
REG_FLD_MOD(core_sys_base, HDMI_CORE_CEC_MAGIC_MASK, 0xff, 7, 0);
REG_FLD_MOD(core_sys_base, HDMI_CORE_I2C1_MASK, 0xff, 7, 0);
REG_FLD_MOD(core_sys_base, HDMI_CORE_I2C2_MASK, 0xff, 7, 0);
+
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_FC_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_FC_STAT1, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_FC_STAT2, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_AS_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_PHY_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_I2CM_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_CEC_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_VP_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_I2CMPHY_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_MUTE, 0xff, 7, 0);
+
}
static void hdmi_core_enable_interrupts(struct hdmi_ip_data *ip_data)
{
void __iomem *core_sys_base = hdmi_core_sys_base(ip_data);
/* Unmute interrupts */
- REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_MUTE, 0x0, 1, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_MUTE, 0x0, 2, 0);
+}
+
+int ti_hdmi_5xxx_irq_process(struct hdmi_ip_data *ip_data)
+{
+ void __iomem *core_sys_base = hdmi_core_sys_base(ip_data);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_FC_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_FC_STAT1, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_FC_STAT2, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_AS_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_PHY_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_I2CM_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_CEC_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_VP_STAT0, 0xff, 7, 0);
+ REG_FLD_MOD(core_sys_base, HDMI_CORE_IH_I2CMPHY_STAT0, 0xff, 7, 0);
+
+ return 0;
}
void ti_hdmi_5xxx_basic_configure(struct hdmi_ip_data *ip_data)