diff options
author | Archit Taneja <archit@ti.com> | 2012-05-18 19:45:40 +0530 |
---|---|---|
committer | Andy Green <andy.green@linaro.org> | 2012-11-27 11:42:22 +0800 |
commit | f224ef27c8d486437ef400f236bc72b03e7a4219 (patch) | |
tree | 1fdd4b16b6417b4e7a35639d7e6bba9c1fe31aa9 | |
parent | 84ca80b6f80351487a0e277e0541c7b718ae99c2 (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.c | 1 | ||||
-rw-r--r-- | drivers/video/omap2/dss/hdmi.c | 2 | ||||
-rw-r--r-- | drivers/video/omap2/dss/ti_hdmi.h | 3 | ||||
-rw-r--r-- | drivers/video/omap2/dss/ti_hdmi_5xxx_ip.c | 35 |
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) |