mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 05:36:47 +00:00
linux: remove actually not needed patches
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
17773aab93
commit
2092dc5c70
File diff suppressed because it is too large
Load Diff
@ -1,123 +0,0 @@
|
||||
Adding HDMI type in dss_features , overlay and
|
||||
the manager so that HDMI type of display will be recognized.
|
||||
|
||||
Signed-off-by: Mythri P K <mythripk@ti.com>
|
||||
---
|
||||
arch/arm/plat-omap/include/plat/display.h | 1 +
|
||||
drivers/video/omap2/dss/display.c | 2 ++
|
||||
drivers/video/omap2/dss/dss_features.c | 2 +-
|
||||
drivers/video/omap2/dss/manager.c | 9 +++++++--
|
||||
drivers/video/omap2/dss/overlay.c | 6 ++++--
|
||||
5 files changed, 15 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h
|
||||
index e81ca66..5e04ddc 100644
|
||||
--- a/arch/arm/plat-omap/include/plat/display.h
|
||||
+++ b/arch/arm/plat-omap/include/plat/display.h
|
||||
@@ -58,6 +58,7 @@ enum omap_display_type {
|
||||
OMAP_DISPLAY_TYPE_SDI = 1 << 2,
|
||||
OMAP_DISPLAY_TYPE_DSI = 1 << 3,
|
||||
OMAP_DISPLAY_TYPE_VENC = 1 << 4,
|
||||
+ OMAP_DISPLAY_TYPE_HDMI = 1 << 5,
|
||||
};
|
||||
|
||||
enum omap_plane {
|
||||
diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c
|
||||
index 7d96b72..c40bcbd 100644
|
||||
--- a/drivers/video/omap2/dss/display.c
|
||||
+++ b/drivers/video/omap2/dss/display.c
|
||||
@@ -342,6 +342,7 @@ int omapdss_default_get_recommended_bpp(struct omap_dss_device *dssdev)
|
||||
return 16;
|
||||
case OMAP_DISPLAY_TYPE_VENC:
|
||||
case OMAP_DISPLAY_TYPE_SDI:
|
||||
+ case OMAP_DISPLAY_TYPE_HDMI:
|
||||
return 24;
|
||||
default:
|
||||
BUG();
|
||||
@@ -368,6 +369,7 @@ bool dss_use_replication(struct omap_dss_device *dssdev,
|
||||
case OMAP_DISPLAY_TYPE_DPI:
|
||||
bpp = dssdev->phy.dpi.data_lines;
|
||||
break;
|
||||
+ case OMAP_DISPLAY_TYPE_HDMI:
|
||||
case OMAP_DISPLAY_TYPE_VENC:
|
||||
case OMAP_DISPLAY_TYPE_SDI:
|
||||
bpp = 24;
|
||||
diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
|
||||
index 6eb6ec6..86dc848 100644
|
||||
--- a/drivers/video/omap2/dss/dss_features.c
|
||||
+++ b/drivers/video/omap2/dss/dss_features.c
|
||||
@@ -115,7 +115,7 @@ static const enum omap_display_type omap4_dss_supported_displays[] = {
|
||||
OMAP_DISPLAY_TYPE_DBI | OMAP_DISPLAY_TYPE_DSI,
|
||||
|
||||
/* OMAP_DSS_CHANNEL_DIGIT */
|
||||
- OMAP_DISPLAY_TYPE_VENC,
|
||||
+ OMAP_DISPLAY_TYPE_VENC | OMAP_DISPLAY_TYPE_HDMI,
|
||||
|
||||
/* OMAP_DSS_CHANNEL_LCD2 */
|
||||
OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI |
|
||||
diff --git a/drivers/video/omap2/dss/manager.c b/drivers/video/omap2/dss/manager.c
|
||||
index 1f53bf2..bcd37ec 100644
|
||||
--- a/drivers/video/omap2/dss/manager.c
|
||||
+++ b/drivers/video/omap2/dss/manager.c
|
||||
@@ -515,6 +515,8 @@ static int dss_mgr_wait_for_vsync(struct omap_overlay_manager *mgr)
|
||||
|
||||
if (mgr->device->type == OMAP_DISPLAY_TYPE_VENC) {
|
||||
irq = DISPC_IRQ_EVSYNC_ODD;
|
||||
+ } else if (mgr->device->type == OMAP_DISPLAY_TYPE_HDMI) {
|
||||
+ irq = DISPC_IRQ_EVSYNC_EVEN;
|
||||
} else {
|
||||
if (mgr->id == OMAP_DSS_CHANNEL_LCD)
|
||||
irq = DISPC_IRQ_VSYNC;
|
||||
@@ -536,7 +538,8 @@ static int dss_mgr_wait_for_go(struct omap_overlay_manager *mgr)
|
||||
if (!dssdev || dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
|
||||
return 0;
|
||||
|
||||
- if (dssdev->type == OMAP_DISPLAY_TYPE_VENC) {
|
||||
+ if (dssdev->type == OMAP_DISPLAY_TYPE_VENC
|
||||
+ || dssdev->type == OMAP_DISPLAY_TYPE_HDMI) {
|
||||
irq = DISPC_IRQ_EVSYNC_ODD | DISPC_IRQ_EVSYNC_EVEN;
|
||||
} else {
|
||||
if (dssdev->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) {
|
||||
@@ -613,7 +616,8 @@ int dss_mgr_wait_for_go_ovl(struct omap_overlay *ovl)
|
||||
if (!dssdev || dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
|
||||
return 0;
|
||||
|
||||
- if (dssdev->type == OMAP_DISPLAY_TYPE_VENC) {
|
||||
+ if (dssdev->type == OMAP_DISPLAY_TYPE_VENC
|
||||
+ || dssdev->type == OMAP_DISPLAY_TYPE_HDMI) {
|
||||
irq = DISPC_IRQ_EVSYNC_ODD | DISPC_IRQ_EVSYNC_EVEN;
|
||||
} else {
|
||||
if (dssdev->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) {
|
||||
@@ -1377,6 +1381,7 @@ static int omap_dss_mgr_apply(struct omap_overlay_manager *mgr)
|
||||
case OMAP_DISPLAY_TYPE_DBI:
|
||||
case OMAP_DISPLAY_TYPE_SDI:
|
||||
case OMAP_DISPLAY_TYPE_VENC:
|
||||
+ case OMAP_DISPLAY_TYPE_HDMI:
|
||||
default_get_overlay_fifo_thresholds(ovl->id, size,
|
||||
&oc->burst_size, &oc->fifo_low,
|
||||
&oc->fifo_high);
|
||||
diff --git a/drivers/video/omap2/dss/overlay.c b/drivers/video/omap2/dss/overlay.c
|
||||
index 996e9a4..f1aca6d 100644
|
||||
--- a/drivers/video/omap2/dss/overlay.c
|
||||
+++ b/drivers/video/omap2/dss/overlay.c
|
||||
@@ -679,7 +679,8 @@ void dss_recheck_connections(struct omap_dss_device *dssdev, bool force)
|
||||
lcd2_mgr->set_device(lcd2_mgr, dssdev);
|
||||
mgr = lcd2_mgr;
|
||||
}
|
||||
- } else if (dssdev->type != OMAP_DISPLAY_TYPE_VENC) {
|
||||
+ } else if (dssdev->type != OMAP_DISPLAY_TYPE_VENC
|
||||
+ && dssdev->type != OMAP_DISPLAY_TYPE_HDMI) {
|
||||
if (!lcd_mgr->device || force) {
|
||||
if (lcd_mgr->device)
|
||||
lcd_mgr->unset_device(lcd_mgr);
|
||||
@@ -688,7 +689,8 @@ void dss_recheck_connections(struct omap_dss_device *dssdev, bool force)
|
||||
}
|
||||
}
|
||||
|
||||
- if (dssdev->type == OMAP_DISPLAY_TYPE_VENC) {
|
||||
+ if (dssdev->type == OMAP_DISPLAY_TYPE_VENC
|
||||
+ || dssdev->type == OMAP_DISPLAY_TYPE_HDMI) {
|
||||
if (!tv_mgr->device || force) {
|
||||
if (tv_mgr->device)
|
||||
tv_mgr->unset_device(tv_mgr);
|
||||
-- 1.5.6.3
|
@ -1,47 +0,0 @@
|
||||
Signed-off-by: Mythri P K <mythripk@ti.com>
|
||||
---
|
||||
drivers/video/omap2/dss/dss.c | 5 +++++
|
||||
drivers/video/omap2/dss/dss.h | 6 ++++++
|
||||
2 files changed, 11 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
|
||||
index aed9345..0be83c8 100644
|
||||
--- a/drivers/video/omap2/dss/dss.c
|
||||
+++ b/drivers/video/omap2/dss/dss.c
|
||||
@@ -605,6 +605,11 @@ void dss_set_dac_pwrdn_bgz(bool enable)
|
||||
REG_FLD_MOD(DSS_CONTROL, enable, 5, 5); /* DAC Power-Down Control */
|
||||
}
|
||||
|
||||
+void dss_select_hdmi_venc_clk_source(enum dss_hdmi_venc_clk_source_select hdmi)
|
||||
+{
|
||||
+ REG_FLD_MOD(DSS_CONTROL, hdmi, 15, 15); /* VENC_HDMI_SWITCH */
|
||||
+}
|
||||
+
|
||||
static int dss_init(void)
|
||||
{
|
||||
int r;
|
||||
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
|
||||
index b845468..c2c0fcf 100644
|
||||
--- a/drivers/video/omap2/dss/dss.h
|
||||
+++ b/drivers/video/omap2/dss/dss.h
|
||||
@@ -132,6 +132,11 @@ struct dss_clk_source_name {
|
||||
const char *clksrc_name;
|
||||
};
|
||||
|
||||
+enum dss_hdmi_venc_clk_source_select {
|
||||
+ DSS_VENC_TV_CLK = 0,
|
||||
+ DSS_HDMI_M_PCLK = 1,
|
||||
+};
|
||||
+
|
||||
struct dss_clock_info {
|
||||
/* rates that we get with dividers below */
|
||||
unsigned long fck;
|
||||
@@ -220,6 +225,7 @@ void dss_recheck_connections(struct omap_dss_device *dssdev, bool force);
|
||||
int dss_init_platform_driver(void);
|
||||
void dss_uninit_platform_driver(void);
|
||||
|
||||
+void dss_select_hdmi_venc_clk_source(enum dss_hdmi_venc_clk_source_select);
|
||||
void dss_save_context(void);
|
||||
void dss_restore_context(void);
|
||||
void dss_clk_enable(enum dss_clock clks);
|
||||
-- 1.5.6.3
|
@ -1,46 +0,0 @@
|
||||
Adding function to reset/set gamma table bit for TV interface
|
||||
currentl only support for disabled is added.
|
||||
|
||||
Signed-off-by: Mythri P K <mythripk@ti.com>
|
||||
---
|
||||
drivers/video/omap2/dss/dispc.c | 13 +++++++++++++
|
||||
drivers/video/omap2/dss/dss.h | 1 +
|
||||
2 files changed, 14 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
|
||||
index b8c576a..9b86f5f 100644
|
||||
--- a/drivers/video/omap2/dss/dispc.c
|
||||
+++ b/drivers/video/omap2/dss/dispc.c
|
||||
@@ -1008,6 +1008,19 @@ void dispc_set_burst_size(enum omap_plane plane,
|
||||
enable_clocks(0);
|
||||
}
|
||||
|
||||
+void dispc_enable_gamma_table(bool enable)
|
||||
+{
|
||||
+ /* This is partially implemented to support only
|
||||
+ * disabling of the gamma table.
|
||||
+ */
|
||||
+ if (enable) {
|
||||
+ DSSWARN("Gamma table enabling for TV not yet supported");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ REG_FLD_MOD(DISPC_CONFIG, enable, 9, 9);
|
||||
+}
|
||||
+
|
||||
static void _dispc_set_vid_color_conv(enum omap_plane plane, bool enable)
|
||||
{
|
||||
u32 val;
|
||||
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
|
||||
index c2c0fcf..9f563a6 100644
|
||||
--- a/drivers/video/omap2/dss/dss.h
|
||||
+++ b/drivers/video/omap2/dss/dss.h
|
||||
@@ -376,6 +376,7 @@ void dispc_set_plane_size(enum omap_plane plane, u16 width, u16 height);
|
||||
void dispc_set_channel_out(enum omap_plane plane,
|
||||
enum omap_channel channel_out);
|
||||
|
||||
+void dispc_enable_gamma_table(bool enable);
|
||||
int dispc_setup_plane(enum omap_plane plane,
|
||||
u32 paddr, u16 screen_width,
|
||||
u16 pos_x, u16 pos_y,
|
||||
-- 1.5.6.3
|
@ -1,431 +0,0 @@
|
||||
Adding the hdmi interface driver header file (hdmi.h) to the dss driver.
|
||||
Register and structure declaration done here.
|
||||
|
||||
Signed-off-by: Mythri P K <mythripk@ti.com>
|
||||
---
|
||||
drivers/video/omap2/dss/hdmi.h | 415 ++++++++++++++++++++++++++++++++++++++++
|
||||
1 files changed, 415 insertions(+), 0 deletions(-)
|
||||
create mode 100644 drivers/video/omap2/dss/hdmi.h
|
||||
|
||||
diff --git a/drivers/video/omap2/dss/hdmi.h b/drivers/video/omap2/dss/hdmi.h
|
||||
new file mode 100644
|
||||
index 0000000..9887ab9
|
||||
--- /dev/null
|
||||
+++ b/drivers/video/omap2/dss/hdmi.h
|
||||
@@ -0,0 +1,415 @@
|
||||
+/*
|
||||
+ * hdmi.h
|
||||
+ *
|
||||
+ * HDMI driver definition for TI OMAP4 processors.
|
||||
+ *
|
||||
+ * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com/
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 2 as published by
|
||||
+ * the Free Software Foundation.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
+ * more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along with
|
||||
+ * this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+ */
|
||||
+
|
||||
+#ifndef _OMAP4_DSS_HDMI_H_
|
||||
+#define _OMAP4_DSS_HDMI_H_
|
||||
+
|
||||
+#include <linux/string.h>
|
||||
+#include <plat/display.h>
|
||||
+
|
||||
+#define HDMI_WP 0x0
|
||||
+#define HDMI_CORE_SYS 0x400
|
||||
+#define HDMI_CORE_AV 0x900
|
||||
+#define HDMI_PLLCTRL 0x200
|
||||
+#define HDMI_PHY 0x300
|
||||
+
|
||||
+struct hdmi_reg { u16 idx; };
|
||||
+
|
||||
+#define HDMI_REG(idx) ((const struct hdmi_reg) { idx })
|
||||
+
|
||||
+/* HDMI Wrapper */
|
||||
+#define HDMI_WP_REG(idx) HDMI_REG(HDMI_WP + idx)
|
||||
+
|
||||
+#define HDMI_WP_REVISION HDMI_WP_REG(0x0)
|
||||
+#define HDMI_WP_SYSCONFIG HDMI_WP_REG(0x10)
|
||||
+#define HDMI_WP_IRQSTATUS_RAW HDMI_WP_REG(0x24)
|
||||
+#define HDMI_WP_IRQSTATUS HDMI_WP_REG(0x28)
|
||||
+#define HDMI_WP_PWR_CTRL HDMI_WP_REG(0x40)
|
||||
+#define HDMI_WP_IRQENABLE_SET HDMI_WP_REG(0x2C)
|
||||
+#define HDMI_WP_VIDEO_CFG HDMI_WP_REG(0x50)
|
||||
+#define HDMI_WP_VIDEO_SIZE HDMI_WP_REG(0x60)
|
||||
+#define HDMI_WP_VIDEO_TIMING_H HDMI_WP_REG(0x68)
|
||||
+#define HDMI_WP_VIDEO_TIMING_V HDMI_WP_REG(0x6C)
|
||||
+#define HDMI_WP_WP_CLK HDMI_WP_REG(0x70)
|
||||
+
|
||||
+/* HDMI IP Core System */
|
||||
+#define HDMI_CORE_SYS_REG(idx) HDMI_REG(HDMI_CORE_SYS + idx)
|
||||
+
|
||||
+#define HDMI_CORE_SYS_VND_IDL HDMI_CORE_SYS_REG(0x0)
|
||||
+#define HDMI_CORE_SYS_DEV_IDL HDMI_CORE_SYS_REG(0x8)
|
||||
+#define HDMI_CORE_SYS_DEV_IDH HDMI_CORE_SYS_REG(0xC)
|
||||
+#define HDMI_CORE_SYS_DEV_REV HDMI_CORE_SYS_REG(0x10)
|
||||
+#define HDMI_CORE_SYS_SRST HDMI_CORE_SYS_REG(0x14)
|
||||
+#define HDMI_CORE_CTRL1 HDMI_CORE_SYS_REG(0x20)
|
||||
+#define HDMI_CORE_SYS_SYS_STAT HDMI_CORE_SYS_REG(0x24)
|
||||
+#define HDMI_CORE_SYS_VID_ACEN HDMI_CORE_SYS_REG(0x124)
|
||||
+#define HDMI_CORE_SYS_VID_MODE HDMI_CORE_SYS_REG(0x128)
|
||||
+#define HDMI_CORE_SYS_INTR_STATE HDMI_CORE_SYS_REG(0x1C0)
|
||||
+#define HDMI_CORE_SYS_INTR1 HDMI_CORE_SYS_REG(0x1C4)
|
||||
+#define HDMI_CORE_SYS_INTR2 HDMI_CORE_SYS_REG(0x1C8)
|
||||
+#define HDMI_CORE_SYS_INTR3 HDMI_CORE_SYS_REG(0x1CC)
|
||||
+#define HDMI_CORE_SYS_INTR4 HDMI_CORE_SYS_REG(0x1D0)
|
||||
+#define HDMI_CORE_SYS_UMASK1 HDMI_CORE_SYS_REG(0x1D4)
|
||||
+#define HDMI_CORE_SYS_TMDS_CTRL HDMI_CORE_SYS_REG(0x208)
|
||||
+#define HDMI_CORE_SYS_DE_DLY HDMI_CORE_SYS_REG(0xC8)
|
||||
+#define HDMI_CORE_SYS_DE_CTRL HDMI_CORE_SYS_REG(0xCC)
|
||||
+#define HDMI_CORE_SYS_DE_TOP HDMI_CORE_SYS_REG(0xD0)
|
||||
+#define HDMI_CORE_SYS_DE_CNTL HDMI_CORE_SYS_REG(0xD8)
|
||||
+#define HDMI_CORE_SYS_DE_CNTH HDMI_CORE_SYS_REG(0xDC)
|
||||
+#define HDMI_CORE_SYS_DE_LINL HDMI_CORE_SYS_REG(0xE0)
|
||||
+#define HDMI_CORE_SYS_DE_LINH_1 HDMI_CORE_SYS_REG(0xE4)
|
||||
+#define HDMI_CORE_CTRL1_VEN_FOLLOWVSYNC 0x1
|
||||
+#define HDMI_CORE_CTRL1_HEN_FOLLOWHSYNC 0x1
|
||||
+#define HDMI_CORE_CTRL1_BSEL_24BITBUS 0x1
|
||||
+#define HDMI_CORE_CTRL1_EDGE_RISINGEDGE 0x1
|
||||
+
|
||||
+/* HDMI DDC E-DID */
|
||||
+#define HDMI_CORE_DDC_CMD HDMI_CORE_SYS_REG(0x3CC)
|
||||
+#define HDMI_CORE_DDC_STATUS HDMI_CORE_SYS_REG(0x3C8)
|
||||
+#define HDMI_CORE_DDC_ADDR HDMI_CORE_SYS_REG(0x3B4)
|
||||
+#define HDMI_CORE_DDC_OFFSET HDMI_CORE_SYS_REG(0x3BC)
|
||||
+#define HDMI_CORE_DDC_COUNT1 HDMI_CORE_SYS_REG(0x3C0)
|
||||
+#define HDMI_CORE_DDC_COUNT2 HDMI_CORE_SYS_REG(0x3C4)
|
||||
+#define HDMI_CORE_DDC_DATA HDMI_CORE_SYS_REG(0x3D0)
|
||||
+#define HDMI_CORE_DDC_SEGM HDMI_CORE_SYS_REG(0x3B8)
|
||||
+
|
||||
+/* HDMI IP Core Audio Video */
|
||||
+#define HDMI_CORE_AV_REG(idx) HDMI_REG(HDMI_CORE_AV + idx)
|
||||
+
|
||||
+#define HDMI_CORE_AV_HDMI_CTRL HDMI_CORE_AV_REG(0xBC)
|
||||
+#define HDMI_CORE_AV_DPD HDMI_CORE_AV_REG(0xF4)
|
||||
+#define HDMI_CORE_AV_PB_CTRL1 HDMI_CORE_AV_REG(0xF8)
|
||||
+#define HDMI_CORE_AV_PB_CTRL2 HDMI_CORE_AV_REG(0xFC)
|
||||
+#define HDMI_CORE_AV_AVI_TYPE HDMI_CORE_AV_REG(0x100)
|
||||
+#define HDMI_CORE_AV_AVI_VERS HDMI_CORE_AV_REG(0x104)
|
||||
+#define HDMI_CORE_AV_AVI_LEN HDMI_CORE_AV_REG(0x108)
|
||||
+#define HDMI_CORE_AV_AVI_CHSUM HDMI_CORE_AV_REG(0x10C)
|
||||
+#define HDMI_CORE_AV_AVI_DBYTE(n) HDMI_CORE_AV_REG(n * 4 + 0x110)
|
||||
+#define HDMI_CORE_AV_AVI_DBYTE_NELEMS HDMI_CORE_AV_REG(15)
|
||||
+#define HDMI_CORE_AV_SPD_DBYTE HDMI_CORE_AV_REG(0x190)
|
||||
+#define HDMI_CORE_AV_SPD_DBYTE_NELEMS HDMI_CORE_AV_REG(27)
|
||||
+#define HDMI_CORE_AV_MPEG_DBYTE HDMI_CORE_AV_REG(0x290)
|
||||
+#define HDMI_CORE_AV_MPEG_DBYTE_NELEMS HDMI_CORE_AV_REG(27)
|
||||
+#define HDMI_CORE_AV_GEN_DBYTE HDMI_CORE_AV_REG(0x300)
|
||||
+#define HDMI_CORE_AV_GEN_DBYTE_NELEMS HDMI_CORE_AV_REG(31)
|
||||
+#define HDMI_CORE_AV_GEN2_DBYTE HDMI_CORE_AV_REG(0x380)
|
||||
+#define HDMI_CORE_AV_GEN2_DBYTE_NELEMS HDMI_CORE_AV_REG(31)
|
||||
+#define HDMI_CORE_AV_ACR_CTRL HDMI_CORE_AV_REG(0x4)
|
||||
+#define HDMI_CORE_AV_FREQ_SVAL HDMI_CORE_AV_REG(0x8)
|
||||
+#define HDMI_CORE_AV_N_SVAL1 HDMI_CORE_AV_REG(0xC)
|
||||
+#define HDMI_CORE_AV_N_SVAL2 HDMI_CORE_AV_REG(0x10)
|
||||
+#define HDMI_CORE_AV_N_SVAL3 HDMI_CORE_AV_REG(0x14)
|
||||
+#define HDMI_CORE_AV_CTS_SVAL1 HDMI_CORE_AV_REG(0x18)
|
||||
+#define HDMI_CORE_AV_CTS_SVAL2 HDMI_CORE_AV_REG(0x1C)
|
||||
+#define HDMI_CORE_AV_CTS_SVAL3 HDMI_CORE_AV_REG(0x20)
|
||||
+#define HDMI_CORE_AV_CTS_HVAL1 HDMI_CORE_AV_REG(0x24)
|
||||
+#define HDMI_CORE_AV_CTS_HVAL2 HDMI_CORE_AV_REG(0x28)
|
||||
+#define HDMI_CORE_AV_CTS_HVAL3 HDMI_CORE_AV_REG(0x2C)
|
||||
+#define HDMI_CORE_AV_AUD_MODE HDMI_CORE_AV_REG(0x50)
|
||||
+#define HDMI_CORE_AV_SPDIF_CTRL HDMI_CORE_AV_REG(0x54)
|
||||
+#define HDMI_CORE_AV_HW_SPDIF_FS HDMI_CORE_AV_REG(0x60)
|
||||
+#define HDMI_CORE_AV_SWAP_I2S HDMI_CORE_AV_REG(0x64)
|
||||
+#define HDMI_CORE_AV_SPDIF_ERTH HDMI_CORE_AV_REG(0x6C)
|
||||
+#define HDMI_CORE_AV_I2S_IN_MAP HDMI_CORE_AV_REG(0x70)
|
||||
+#define HDMI_CORE_AV_I2S_IN_CTRL HDMI_CORE_AV_REG(0x74)
|
||||
+#define HDMI_CORE_AV_I2S_CHST0 HDMI_CORE_AV_REG(0x78)
|
||||
+#define HDMI_CORE_AV_I2S_CHST1 HDMI_CORE_AV_REG(0x7C)
|
||||
+#define HDMI_CORE_AV_I2S_CHST2 HDMI_CORE_AV_REG(0x80)
|
||||
+#define HDMI_CORE_AV_I2S_CHST4 HDMI_CORE_AV_REG(0x84)
|
||||
+#define HDMI_CORE_AV_I2S_CHST5 HDMI_CORE_AV_REG(0x88)
|
||||
+#define HDMI_CORE_AV_ASRC HDMI_CORE_AV_REG(0x8C)
|
||||
+#define HDMI_CORE_AV_I2S_IN_LEN HDMI_CORE_AV_REG(0x90)
|
||||
+#define HDMI_CORE_AV_HDMI_CTRL HDMI_CORE_AV_REG(0xBC)
|
||||
+#define HDMI_CORE_AV_AUDO_TXSTAT HDMI_CORE_AV_REG(0xC0)
|
||||
+#define HDMI_CORE_AV_AUD_PAR_BUSCLK_1 HDMI_CORE_AV_REG(0xCC)
|
||||
+#define HDMI_CORE_AV_AUD_PAR_BUSCLK_2 HDMI_CORE_AV_REG(0xD0)
|
||||
+#define HDMI_CORE_AV_AUD_PAR_BUSCLK_3 HDMI_CORE_AV_REG(0xD4)
|
||||
+#define HDMI_CORE_AV_TEST_TXCTRL HDMI_CORE_AV_REG(0xF0)
|
||||
+#define HDMI_CORE_AV_DPD HDMI_CORE_AV_REG(0xF4)
|
||||
+#define HDMI_CORE_AV_PB_CTRL1 HDMI_CORE_AV_REG(0xF8)
|
||||
+#define HDMI_CORE_AV_PB_CTRL2 HDMI_CORE_AV_REG(0xFC)
|
||||
+#define HDMI_CORE_AV_AVI_TYPE HDMI_CORE_AV_REG(0x100)
|
||||
+#define HDMI_CORE_AV_AVI_VERS HDMI_CORE_AV_REG(0x104)
|
||||
+#define HDMI_CORE_AV_AVI_LEN HDMI_CORE_AV_REG(0x108)
|
||||
+#define HDMI_CORE_AV_AVI_CHSUM HDMI_CORE_AV_REG(0x10C)
|
||||
+#define HDMI_CORE_AV_SPD_TYPE HDMI_CORE_AV_REG(0x180)
|
||||
+#define HDMI_CORE_AV_SPD_VERS HDMI_CORE_AV_REG(0x184)
|
||||
+#define HDMI_CORE_AV_SPD_LEN HDMI_CORE_AV_REG(0x188)
|
||||
+#define HDMI_CORE_AV_SPD_CHSUM HDMI_CORE_AV_REG(0x18C)
|
||||
+#define HDMI_CORE_AV_MPEG_TYPE HDMI_CORE_AV_REG(0x280)
|
||||
+#define HDMI_CORE_AV_MPEG_VERS HDMI_CORE_AV_REG(0x284)
|
||||
+#define HDMI_CORE_AV_MPEG_LEN HDMI_CORE_AV_REG(0x288)
|
||||
+#define HDMI_CORE_AV_MPEG_CHSUM HDMI_CORE_AV_REG(0x28C)
|
||||
+#define HDMI_CORE_AV_CP_BYTE1 HDMI_CORE_AV_REG(0x37C)
|
||||
+#define HDMI_CORE_AV_CEC_ADDR_ID HDMI_CORE_AV_REG(0x3FC)
|
||||
+#define HDMI_CORE_AV_SPD_DBYTE_ELSIZE 0x4
|
||||
+#define HDMI_CORE_AV_GEN2_DBYTE_ELSIZE 0x4
|
||||
+#define HDMI_CORE_AV_MPEG_DBYTE_ELSIZE 0x4
|
||||
+#define HDMI_CORE_AV_GEN_DBYTE_ELSIZE 0x4
|
||||
+
|
||||
+/* PLL */
|
||||
+#define HDMI_PLL_REG(idx) HDMI_REG(HDMI_PLLCTRL + idx)
|
||||
+
|
||||
+#define PLLCTRL_PLL_CONTROL HDMI_PLL_REG(0x0)
|
||||
+#define PLLCTRL_PLL_STATUS HDMI_PLL_REG(0x4)
|
||||
+#define PLLCTRL_PLL_GO HDMI_PLL_REG(0x8)
|
||||
+#define PLLCTRL_CFG1 HDMI_PLL_REG(0xC)
|
||||
+#define PLLCTRL_CFG2 HDMI_PLL_REG(0x10)
|
||||
+#define PLLCTRL_CFG3 HDMI_PLL_REG(0x14)
|
||||
+#define PLLCTRL_CFG4 HDMI_PLL_REG(0x20)
|
||||
+
|
||||
+/* HDMI PHY */
|
||||
+#define HDMI_PHY_REG(idx) HDMI_REG(HDMI_PHY + idx)
|
||||
+
|
||||
+#define HDMI_TXPHY_TX_CTRL HDMI_PHY_REG(0x0)
|
||||
+#define HDMI_TXPHY_DIGITAL_CTRL HDMI_PHY_REG(0x4)
|
||||
+#define HDMI_TXPHY_POWER_CTRL HDMI_PHY_REG(0x8)
|
||||
+#define HDMI_TXPHY_PAD_CFG_CTRL HDMI_PHY_REG(0xC)
|
||||
+
|
||||
+/* HDMI EDID Length */
|
||||
+#define HDMI_EDID_MAX_LENGTH 256
|
||||
+#define EDID_TIMING_DESCRIPTOR_SIZE 0x12
|
||||
+#define EDID_DESCRIPTOR_BLOCK0_ADDRESS 0x36
|
||||
+#define EDID_DESCRIPTOR_BLOCK1_ADDRESS 0x80
|
||||
+#define EDID_SIZE_BLOCK0_TIMING_DESCRIPTOR 4
|
||||
+#define EDID_SIZE_BLOCK1_TIMING_DESCRIPTOR 4
|
||||
+
|
||||
+#define OMAP_HDMI_TIMINGS_NB 34
|
||||
+
|
||||
+#define REG_FLD_MOD(idx, val, start, end) \
|
||||
+ hdmi_write_reg(idx, FLD_MOD(hdmi_read_reg(idx), val, start, end))
|
||||
+#define REG_GET(idx, start, end) \
|
||||
+ FLD_GET(hdmi_read_reg(idx), start, end)
|
||||
+
|
||||
+/* HDMI timing structure */
|
||||
+struct hdmi_timings {
|
||||
+ struct omap_video_timings timings;
|
||||
+ int vsync_pol;
|
||||
+ int hsync_pol;
|
||||
+};
|
||||
+
|
||||
+enum hdmi_phy_pwr {
|
||||
+ HDMI_PHYPWRCMD_OFF = 0,
|
||||
+ HDMI_PHYPWRCMD_LDOON = 1,
|
||||
+ HDMI_PHYPWRCMD_TXON = 2
|
||||
+};
|
||||
+
|
||||
+enum hdmi_pll_pwr {
|
||||
+ HDMI_PLLPWRCMD_ALLOFF = 0,
|
||||
+ HDMI_PLLPWRCMD_PLLONLY = 1,
|
||||
+ HDMI_PLLPWRCMD_BOTHON_ALLCLKS = 2,
|
||||
+ HDMI_PLLPWRCMD_BOTHON_NOPHYCLK = 3
|
||||
+};
|
||||
+
|
||||
+enum hdmi_clk_refsel {
|
||||
+ HDMI_REFSEL_PCLK = 0,
|
||||
+ HDMI_REFSEL_REF1 = 1,
|
||||
+ HDMI_REFSEL_REF2 = 2,
|
||||
+ HDMI_REFSEL_SYSCLK = 3
|
||||
+};
|
||||
+
|
||||
+enum hdmi_core_inputbus_width {
|
||||
+ HDMI_INPUT_8BIT = 0,
|
||||
+ HDMI_INPUT_10BIT = 1,
|
||||
+ HDMI_INPUT_12BIT = 2
|
||||
+};
|
||||
+
|
||||
+enum hdmi_core_dither_trunc {
|
||||
+ HDMI_OUTPUTTRUNCATION_8BIT = 0,
|
||||
+ HDMI_OUTPUTTRUNCATION_10BIT = 1,
|
||||
+ HDMI_OUTPUTTRUNCATION_12BIT = 2,
|
||||
+ HDMI_OUTPUTDITHER_8BIT = 3,
|
||||
+ HDMI_OUTPUTDITHER_10BIT = 4,
|
||||
+ HDMI_OUTPUTDITHER_12BIT = 5
|
||||
+};
|
||||
+
|
||||
+enum hdmi_core_deepcolor_ed {
|
||||
+ HDMI_DEEPCOLORPACKECTDISABLE = 0,
|
||||
+ HDMI_DEEPCOLORPACKECTENABLE = 1
|
||||
+};
|
||||
+
|
||||
+enum hdmi_core_packet_mode {
|
||||
+ HDMI_PACKETMODERESERVEDVALUE = 0,
|
||||
+ HDMI_PACKETMODE24BITPERPIXEL = 4,
|
||||
+ HDMI_PACKETMODE30BITPERPIXEL = 5,
|
||||
+ HDMI_PACKETMODE36BITPERPIXEL = 6,
|
||||
+ HDMI_PACKETMODE48BITPERPIXEL = 7
|
||||
+};
|
||||
+
|
||||
+enum hdmi_core_hdmi_dvi {
|
||||
+ HDMI_DVI = 0,
|
||||
+ HDMI_HDMI = 1
|
||||
+};
|
||||
+
|
||||
+enum hdmi_core_tclkselclkmult {
|
||||
+ HDMI_FPLL05IDCK = 0,
|
||||
+ HDMI_FPLL10IDCK = 1,
|
||||
+ HDMI_FPLL20IDCK = 2,
|
||||
+ HDMI_FPLL40IDCK = 3
|
||||
+};
|
||||
+
|
||||
+enum hdmi_core_packet_ctrl {
|
||||
+ HDMI_PACKETENABLE = 1,
|
||||
+ HDMI_PACKETDISABLE = 0,
|
||||
+ HDMI_PACKETREPEATON = 1,
|
||||
+ HDMI_PACKETREPEATOFF = 0
|
||||
+};
|
||||
+
|
||||
+/* INFOFRAME_AVI_ definitions */
|
||||
+enum hdmi_core_infoframe {
|
||||
+ HDMI_INFOFRAME_AVI_DB1Y_RGB = 0,
|
||||
+ HDMI_INFOFRAME_AVI_DB1Y_YUV422 = 1,
|
||||
+ HDMI_INFOFRAME_AVI_DB1Y_YUV444 = 2,
|
||||
+ HDMI_INFOFRAME_AVI_DB1A_ACTIVE_FORMAT_OFF = 0,
|
||||
+ HDMI_INFOFRAME_AVI_DB1A_ACTIVE_FORMAT_ON = 1,
|
||||
+ HDMI_INFOFRAME_AVI_DB1B_NO = 0,
|
||||
+ HDMI_INFOFRAME_AVI_DB1B_VERT = 1,
|
||||
+ HDMI_INFOFRAME_AVI_DB1B_HORI = 2,
|
||||
+ HDMI_INFOFRAME_AVI_DB1B_VERTHORI = 3,
|
||||
+ HDMI_INFOFRAME_AVI_DB1S_0 = 0,
|
||||
+ HDMI_INFOFRAME_AVI_DB1S_1 = 1,
|
||||
+ HDMI_INFOFRAME_AVI_DB1S_2 = 2,
|
||||
+ HDMI_INFOFRAME_AVI_DB2C_NO = 0,
|
||||
+ HDMI_INFOFRAME_AVI_DB2C_ITU601 = 1,
|
||||
+ HDMI_INFOFRAME_AVI_DB2C_ITU709 = 2,
|
||||
+ HDMI_INFOFRAME_AVI_DB2C_EC_EXTENDED = 3,
|
||||
+ HDMI_INFOFRAME_AVI_DB2M_NO = 0,
|
||||
+ HDMI_INFOFRAME_AVI_DB2M_43 = 1,
|
||||
+ HDMI_INFOFRAME_AVI_DB2M_169 = 2,
|
||||
+ HDMI_INFOFRAME_AVI_DB2R_SAME = 8,
|
||||
+ HDMI_INFOFRAME_AVI_DB2R_43 = 9,
|
||||
+ HDMI_INFOFRAME_AVI_DB2R_169 = 10,
|
||||
+ HDMI_INFOFRAME_AVI_DB2R_149 = 11,
|
||||
+ HDMI_INFOFRAME_AVI_DB3ITC_NO = 0,
|
||||
+ HDMI_INFOFRAME_AVI_DB3ITC_YES = 1,
|
||||
+ HDMI_INFOFRAME_AVI_DB3EC_XVYUV601 = 0,
|
||||
+ HDMI_INFOFRAME_AVI_DB3EC_XVYUV709 = 1,
|
||||
+ HDMI_INFOFRAME_AVI_DB3Q_DEFAULT = 0,
|
||||
+ HDMI_INFOFRAME_AVI_DB3Q_LR = 1,
|
||||
+ HDMI_INFOFRAME_AVI_DB3Q_FR = 2,
|
||||
+ HDMI_INFOFRAME_AVI_DB3SC_NO = 0,
|
||||
+ HDMI_INFOFRAME_AVI_DB3SC_HORI = 1,
|
||||
+ HDMI_INFOFRAME_AVI_DB3SC_VERT = 2,
|
||||
+ HDMI_INFOFRAME_AVI_DB3SC_HORIVERT = 3,
|
||||
+ HDMI_INFOFRAME_AVI_DB5PR_NO = 0,
|
||||
+ HDMI_INFOFRAME_AVI_DB5PR_2 = 1,
|
||||
+ HDMI_INFOFRAME_AVI_DB5PR_3 = 2,
|
||||
+ HDMI_INFOFRAME_AVI_DB5PR_4 = 3,
|
||||
+ HDMI_INFOFRAME_AVI_DB5PR_5 = 4,
|
||||
+ HDMI_INFOFRAME_AVI_DB5PR_6 = 5,
|
||||
+ HDMI_INFOFRAME_AVI_DB5PR_7 = 6,
|
||||
+ HDMI_INFOFRAME_AVI_DB5PR_8 = 7,
|
||||
+ HDMI_INFOFRAME_AVI_DB5PR_9 = 8,
|
||||
+ HDMI_INFOFRAME_AVI_DB5PR_10 = 9
|
||||
+};
|
||||
+
|
||||
+enum hdmi_packing_mode {
|
||||
+ HDMI_PACK_10b_RGB_YUV444 = 0,
|
||||
+ HDMI_PACK_24b_RGB_YUV444_YUV422 = 1,
|
||||
+ HDMI_PACK_20b_YUV422 = 2,
|
||||
+ HDMI_PACK_ALREADYPACKED = 7
|
||||
+};
|
||||
+
|
||||
+struct hdmi_core_video_config {
|
||||
+ enum hdmi_core_inputbus_width ip_bus_width;
|
||||
+ enum hdmi_core_dither_trunc op_dither_truc;
|
||||
+ enum hdmi_core_deepcolor_ed deep_color_pkt;
|
||||
+ enum hdmi_core_packet_mode pkt_mode;
|
||||
+ enum hdmi_core_hdmi_dvi hdmi_dvi;
|
||||
+ enum hdmi_core_tclkselclkmult tclk_sel_clkmult;
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Refer to section 8.2 in HDMI 1.3 specification for
|
||||
+ * details about infoframe databytes
|
||||
+ */
|
||||
+struct hdmi_core_infoframe_avi {
|
||||
+ u8 db1_format;
|
||||
+ /* Y0, Y1 rgb,yCbCr */
|
||||
+ u8 db1_active_info;
|
||||
+ /* A0 Active information Present */
|
||||
+ u8 db1_bar_info_dv;
|
||||
+ /* B0, B1 Bar info data valid */
|
||||
+ u8 db1_scan_info;
|
||||
+ /* S0, S1 scan information */
|
||||
+ u8 db2_colorimetry;
|
||||
+ /* C0, C1 colorimetry */
|
||||
+ u8 db2_aspect_ratio;
|
||||
+ /* M0, M1 Aspect ratio (4:3, 16:9) */
|
||||
+ u8 db2_active_fmt_ar;
|
||||
+ /* R0...R3 Active format aspect ratio */
|
||||
+ u8 db3_itc;
|
||||
+ /* ITC IT content. */
|
||||
+ u8 db3_ec;
|
||||
+ /* EC0, EC1, EC2 Extended colorimetry */
|
||||
+ u8 db3_q_range;
|
||||
+ /* Q1, Q0 Quantization range */
|
||||
+ u8 db3_nup_scaling;
|
||||
+ /* SC1, SC0 Non-uniform picture scaling */
|
||||
+ u8 db4_videocode;
|
||||
+ /* VIC0..6 Video format identification */
|
||||
+ u8 db5_pixel_repeat;
|
||||
+ /* PR0..PR3 Pixel repetition factor */
|
||||
+ u16 db6_7_line_eoftop;
|
||||
+ /* Line number end of top bar */
|
||||
+ u16 db8_9_line_sofbottom;
|
||||
+ /* Line number start of bottom bar */
|
||||
+ u16 db10_11_pixel_eofleft;
|
||||
+ /* Pixel number end of left bar */
|
||||
+ u16 db12_13_pixel_sofright;
|
||||
+ /* Pixel number start of right bar */
|
||||
+};
|
||||
+
|
||||
+struct hdmi_core_packet_enable_repeat {
|
||||
+ u32 audio_pkt;
|
||||
+ u32 audio_pkt_repeat;
|
||||
+ u32 avi_infoframe;
|
||||
+ u32 avi_infoframe_repeat;
|
||||
+ u32 gen_cntrl_pkt;
|
||||
+ u32 gen_cntrl_pkt_repeat;
|
||||
+ u32 generic_pkt;
|
||||
+ u32 generic_pkt_repeat;
|
||||
+};
|
||||
+
|
||||
+struct hdmi_video_format {
|
||||
+ enum hdmi_packing_mode packing_mode;
|
||||
+ u32 y_res; /* Line per panel */
|
||||
+ u32 x_res; /* pixel per line */
|
||||
+};
|
||||
+
|
||||
+struct hdmi_video_interface {
|
||||
+ int vsp; /* Vsync polarity */
|
||||
+ int hsp; /* Hsync polarity */
|
||||
+ int interlacing;
|
||||
+ int tm; /* Timing mode */
|
||||
+};
|
||||
+
|
||||
+struct hdmi_cm {
|
||||
+ int code;
|
||||
+ int mode;
|
||||
+};
|
||||
+
|
||||
+struct hdmi_config {
|
||||
+ struct hdmi_timings timings;
|
||||
+ u16 interlace;
|
||||
+ struct hdmi_cm cm;
|
||||
+};
|
||||
+
|
||||
+#endif
|
||||
-- 1.5.6.3
|
File diff suppressed because it is too large
Load Diff
@ -1,252 +0,0 @@
|
||||
The panel driver(hdmi_omap4_panel.c) in omap2/dss acts as a controller
|
||||
to manage the enable and disable requests and synchronize audio and video.
|
||||
|
||||
Signed-off-by: Mythri P K <mythripk@ti.com>
|
||||
---
|
||||
drivers/video/omap2/dss/dss.h | 2 +
|
||||
drivers/video/omap2/dss/hdmi_omap4_panel.c | 222 ++++++++++++++++++++++++++++
|
||||
2 files changed, 224 insertions(+), 0 deletions(-)
|
||||
create mode 100644 drivers/video/omap2/dss/hdmi_omap4_panel.c
|
||||
|
||||
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
|
||||
index 6bf923c..05ccd00 100644
|
||||
--- a/drivers/video/omap2/dss/dss.h
|
||||
+++ b/drivers/video/omap2/dss/dss.h
|
||||
@@ -483,6 +483,8 @@ void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev);
|
||||
void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev);
|
||||
int omapdss_hdmi_display_check_timing(struct omap_dss_device *dssdev,
|
||||
struct omap_video_timings *timings);
|
||||
+int hdmi_panel_init(void);
|
||||
+void hdmi_panel_exit(void);
|
||||
|
||||
/* RFBI */
|
||||
#ifdef CONFIG_OMAP2_DSS_RFBI
|
||||
diff --git a/drivers/video/omap2/dss/hdmi_omap4_panel.c b/drivers/video/omap2/dss/hdmi_omap4_panel.c
|
||||
new file mode 100644
|
||||
index 0000000..ffb5de9
|
||||
--- /dev/null
|
||||
+++ b/drivers/video/omap2/dss/hdmi_omap4_panel.c
|
||||
@@ -0,0 +1,222 @@
|
||||
+/*
|
||||
+ * hdmi_omap4_panel.c
|
||||
+ *
|
||||
+ * HDMI library support functions for TI OMAP4 processors.
|
||||
+ *
|
||||
+ * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com/
|
||||
+ * Authors: Mythri P k <mythripk@ti.com>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 2 as published by
|
||||
+ * the Free Software Foundation.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
+ * more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along with
|
||||
+ * this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/mutex.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <plat/display.h>
|
||||
+
|
||||
+#include "dss.h"
|
||||
+
|
||||
+static struct {
|
||||
+ struct mutex hdmi_lock;
|
||||
+} hdmi;
|
||||
+
|
||||
+
|
||||
+static int hdmi_panel_probe(struct omap_dss_device *dssdev)
|
||||
+{
|
||||
+ DSSDBG("ENTER hdmi_panel_probe\n");
|
||||
+
|
||||
+ dssdev->panel.config = OMAP_DSS_LCD_TFT |
|
||||
+ OMAP_DSS_LCD_IVS | OMAP_DSS_LCD_IHS;
|
||||
+
|
||||
+ /*
|
||||
+ * Initialize the timings to 640 * 480
|
||||
+ * This is only for framebuffer update not for TV timing setting
|
||||
+ * Setting TV timing will be done only on enable
|
||||
+ */
|
||||
+ dssdev->panel.timings.x_res = 640;
|
||||
+ dssdev->panel.timings.y_res = 480;
|
||||
+
|
||||
+ DSSDBG("hdmi_panel_probe x_res= %d y_res = %d\n",
|
||||
+ dssdev->panel.timings.x_res,
|
||||
+ dssdev->panel.timings.y_res);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void hdmi_panel_remove(struct omap_dss_device *dssdev)
|
||||
+{
|
||||
+
|
||||
+}
|
||||
+
|
||||
+static int hdmi_panel_enable(struct omap_dss_device *dssdev)
|
||||
+{
|
||||
+ int r = 0;
|
||||
+ DSSDBG("ENTER hdmi_panel_enable\n");
|
||||
+
|
||||
+ mutex_lock(&hdmi.hdmi_lock);
|
||||
+
|
||||
+ if (dssdev->state != OMAP_DSS_DISPLAY_DISABLED) {
|
||||
+ r = -EINVAL;
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
+ r = omapdss_hdmi_display_enable(dssdev);
|
||||
+ if (r) {
|
||||
+ DSSERR("failed to power on\n");
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
+ dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
|
||||
+
|
||||
+err:
|
||||
+ mutex_unlock(&hdmi.hdmi_lock);
|
||||
+
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+static void hdmi_panel_disable(struct omap_dss_device *dssdev)
|
||||
+{
|
||||
+ mutex_lock(&hdmi.hdmi_lock);
|
||||
+
|
||||
+ if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE)
|
||||
+ omapdss_hdmi_display_disable(dssdev);
|
||||
+
|
||||
+ dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
|
||||
+
|
||||
+ mutex_unlock(&hdmi.hdmi_lock);
|
||||
+}
|
||||
+
|
||||
+static int hdmi_panel_suspend(struct omap_dss_device *dssdev)
|
||||
+{
|
||||
+ int r = 0;
|
||||
+
|
||||
+ mutex_lock(&hdmi.hdmi_lock);
|
||||
+
|
||||
+ if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) {
|
||||
+ r = -EINVAL;
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
+ dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED;
|
||||
+
|
||||
+ omapdss_hdmi_display_disable(dssdev);
|
||||
+
|
||||
+err:
|
||||
+ mutex_unlock(&hdmi.hdmi_lock);
|
||||
+
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+static int hdmi_panel_resume(struct omap_dss_device *dssdev)
|
||||
+{
|
||||
+ int r = 0;
|
||||
+
|
||||
+ mutex_lock(&hdmi.hdmi_lock);
|
||||
+
|
||||
+ if (dssdev->state != OMAP_DSS_DISPLAY_SUSPENDED) {
|
||||
+ r = -EINVAL;
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
+ r = omapdss_hdmi_display_enable(dssdev);
|
||||
+ if (r) {
|
||||
+ DSSERR("failed to power on\n");
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
+ dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
|
||||
+
|
||||
+err:
|
||||
+ mutex_unlock(&hdmi.hdmi_lock);
|
||||
+
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+static void hdmi_get_timings(struct omap_dss_device *dssdev,
|
||||
+ struct omap_video_timings *timings)
|
||||
+{
|
||||
+ mutex_lock(&hdmi.hdmi_lock);
|
||||
+
|
||||
+ *timings = dssdev->panel.timings;
|
||||
+
|
||||
+ mutex_unlock(&hdmi.hdmi_lock);
|
||||
+}
|
||||
+
|
||||
+static void hdmi_set_timings(struct omap_dss_device *dssdev,
|
||||
+ struct omap_video_timings *timings)
|
||||
+{
|
||||
+ DSSDBG("hdmi_set_timings\n");
|
||||
+
|
||||
+ mutex_lock(&hdmi.hdmi_lock);
|
||||
+
|
||||
+ dssdev->panel.timings = *timings;
|
||||
+
|
||||
+ if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
|
||||
+ /* turn the hdmi off and on to get new timings to use */
|
||||
+ omapdss_hdmi_display_disable(dssdev);
|
||||
+ omapdss_hdmi_display_set_timing(dssdev);
|
||||
+ }
|
||||
+
|
||||
+ mutex_unlock(&hdmi.hdmi_lock);
|
||||
+}
|
||||
+
|
||||
+static int hdmi_check_timings(struct omap_dss_device *dssdev,
|
||||
+ struct omap_video_timings *timings)
|
||||
+{
|
||||
+ int r = 0;
|
||||
+
|
||||
+ DSSDBG("hdmi_check_timings\n");
|
||||
+
|
||||
+ mutex_lock(&hdmi.hdmi_lock);
|
||||
+
|
||||
+ r = omapdss_hdmi_display_check_timing(dssdev, timings);
|
||||
+ if (r) {
|
||||
+ DSSERR("Timing cannot be applied\n");
|
||||
+ goto err;
|
||||
+ }
|
||||
+err:
|
||||
+ mutex_unlock(&hdmi.hdmi_lock);
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+static struct omap_dss_driver hdmi_driver = {
|
||||
+ .probe = hdmi_panel_probe,
|
||||
+ .remove = hdmi_panel_remove,
|
||||
+ .enable = hdmi_panel_enable,
|
||||
+ .disable = hdmi_panel_disable,
|
||||
+ .suspend = hdmi_panel_suspend,
|
||||
+ .resume = hdmi_panel_resume,
|
||||
+ .get_timings = hdmi_get_timings,
|
||||
+ .set_timings = hdmi_set_timings,
|
||||
+ .check_timings = hdmi_check_timings,
|
||||
+ .driver = {
|
||||
+ .name = "hdmi_panel",
|
||||
+ .owner = THIS_MODULE,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+int hdmi_panel_init(void)
|
||||
+{
|
||||
+ mutex_init(&hdmi.hdmi_lock);
|
||||
+
|
||||
+ omap_dss_register_driver(&hdmi_driver);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+void hdmi_panel_exit(void)
|
||||
+{
|
||||
+ omap_dss_unregister_driver(&hdmi_driver);
|
||||
+
|
||||
+}
|
||||
-- 1.5.6.3
|
@ -1,36 +0,0 @@
|
||||
Signed-off-by: Mythri P K <mythripk@ti.com>
|
||||
---
|
||||
drivers/video/omap2/dss/Kconfig | 8 ++++++++
|
||||
drivers/video/omap2/dss/Makefile | 2 ++
|
||||
2 files changed, 10 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/omap2/dss/Kconfig b/drivers/video/omap2/dss/Kconfig
|
||||
index db01473..bfc5da0 100644
|
||||
--- a/drivers/video/omap2/dss/Kconfig
|
||||
+++ b/drivers/video/omap2/dss/Kconfig
|
||||
@@ -60,6 +60,14 @@ config OMAP2_DSS_VENC
|
||||
help
|
||||
OMAP Video Encoder support for S-Video and composite TV-out.
|
||||
|
||||
+config OMAP4_DSS_HDMI
|
||||
+ bool "HDMI support"
|
||||
+ depends on ARCH_OMAP4
|
||||
+ default y
|
||||
+ help
|
||||
+ HDMI Interface. This adds the High Definition Multimedia Interface.
|
||||
+ See http://www.hdmi.org/ for HDMI specification.
|
||||
+
|
||||
config OMAP2_DSS_SDI
|
||||
bool "SDI support"
|
||||
depends on ARCH_OMAP3
|
||||
diff --git a/drivers/video/omap2/dss/Makefile b/drivers/video/omap2/dss/Makefile
|
||||
index 7db17b5..10d9d3b 100644
|
||||
--- a/drivers/video/omap2/dss/Makefile
|
||||
+++ b/drivers/video/omap2/dss/Makefile
|
||||
@@ -5,3 +5,5 @@ omapdss-$(CONFIG_OMAP2_DSS_RFBI) += rfbi.o
|
||||
omapdss-$(CONFIG_OMAP2_DSS_VENC) += venc.o
|
||||
omapdss-$(CONFIG_OMAP2_DSS_SDI) += sdi.o
|
||||
omapdss-$(CONFIG_OMAP2_DSS_DSI) += dsi.o
|
||||
+omapdss-$(CONFIG_OMAP4_DSS_HDMI) += hdmi.o \
|
||||
+ hdmi_omap4_panel.o
|
||||
-- 1.5.6.3
|
@ -1,43 +0,0 @@
|
||||
calling the platform registration of HDMI driver from core
|
||||
during initialization.
|
||||
|
||||
Signed-off-by: Mythri P K <mythripk@ti.com>
|
||||
---
|
||||
drivers/video/omap2/dss/core.c | 9 +++++++++
|
||||
1 files changed, 9 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
|
||||
index c2f930b..1aa2ed1 100644
|
||||
--- a/drivers/video/omap2/dss/core.c
|
||||
+++ b/drivers/video/omap2/dss/core.c
|
||||
@@ -209,6 +209,12 @@ static int omap_dss_probe(struct platform_device *pdev)
|
||||
goto err_dsi;
|
||||
}
|
||||
|
||||
+ r = hdmi_init_platform_driver();
|
||||
+ if (r) {
|
||||
+ DSSERR("Failed to initialize hdmi\n");
|
||||
+ goto err_hdmi;
|
||||
+ }
|
||||
+
|
||||
r = dss_initialize_debugfs();
|
||||
if (r)
|
||||
goto err_debugfs;
|
||||
@@ -238,6 +244,8 @@ static int omap_dss_probe(struct platform_device *pdev)
|
||||
err_register:
|
||||
dss_uninitialize_debugfs();
|
||||
err_debugfs:
|
||||
+ hdmi_uninit_platform_driver();
|
||||
+err_hdmi:
|
||||
dsi_uninit_platform_driver();
|
||||
err_dsi:
|
||||
venc_uninit_platform_driver();
|
||||
@@ -263,6 +271,7 @@ static int omap_dss_remove(struct platform_device *pdev)
|
||||
dispc_uninit_platform_driver();
|
||||
rfbi_uninit_platform_driver();
|
||||
dsi_uninit_platform_driver();
|
||||
+ hdmi_uninit_platform_driver();
|
||||
dss_uninit_platform_driver();
|
||||
|
||||
dss_uninit_overlays(pdev);
|
||||
-- 1.5.6.3
|
@ -1,118 +0,0 @@
|
||||
Adding board file structure for display which adds the display
|
||||
structure with HDMI as the default driver when the display init
|
||||
is called.
|
||||
HDMI GPIO configurations are also done in this file.
|
||||
|
||||
Signed-off-by: Mythri P K <mythripk@ti.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-4430sdp.c | 75 +++++++++++++++++++++++++++++++++++
|
||||
1 files changed, 75 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
|
||||
index 85805d4..f5fcc5f 100644
|
||||
--- a/arch/arm/mach-omap2/board-4430sdp.c
|
||||
+++ b/arch/arm/mach-omap2/board-4430sdp.c
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <plat/usb.h>
|
||||
#include <plat/mmc.h>
|
||||
#include <plat/omap4-keypad.h>
|
||||
+#include <plat/display.h>
|
||||
|
||||
#include "mux.h"
|
||||
#include "hsmmc.h"
|
||||
@@ -47,6 +48,8 @@
|
||||
#define ETH_KS8851_QUART 138
|
||||
#define OMAP4_SFH7741_SENSOR_OUTPUT_GPIO 184
|
||||
#define OMAP4_SFH7741_ENABLE_GPIO 188
|
||||
+#define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */
|
||||
+#define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
|
||||
|
||||
static const int sdp4430_keymap[] = {
|
||||
KEY(0, 0, KEY_E),
|
||||
@@ -620,6 +623,76 @@ static void __init omap_sfh7741prox_init(void)
|
||||
}
|
||||
}
|
||||
|
||||
+static void sdp4430_hdmi_mux_init(void)
|
||||
+{
|
||||
+ /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
|
||||
+ omap_mux_init_signal("hdmi_hpd",
|
||||
+ OMAP_PIN_INPUT_PULLUP);
|
||||
+ omap_mux_init_signal("hdmi_cec",
|
||||
+ OMAP_PIN_INPUT_PULLUP);
|
||||
+ /* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
|
||||
+ omap_mux_init_signal("hdmi_ddc_scl",
|
||||
+ OMAP_PIN_INPUT_PULLUP);
|
||||
+ omap_mux_init_signal("hdmi_ddc_sda",
|
||||
+ OMAP_PIN_INPUT_PULLUP);
|
||||
+}
|
||||
+
|
||||
+static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev)
|
||||
+{
|
||||
+ int status;
|
||||
+
|
||||
+ status = gpio_request_one(HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH,
|
||||
+ "hdmi_gpio_hpd");
|
||||
+ if (status) {
|
||||
+ pr_err("Cannot request GPIO %d\n", HDMI_GPIO_HPD);
|
||||
+ return status;
|
||||
+ }
|
||||
+ status = gpio_request_one(HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH,
|
||||
+ "hdmi_gpio_ls_oe");
|
||||
+ if (status) {
|
||||
+ pr_err("Cannot request GPIO %d\n", HDMI_GPIO_LS_OE);
|
||||
+ goto error1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+error1:
|
||||
+ gpio_free(HDMI_GPIO_HPD);
|
||||
+
|
||||
+ return status;
|
||||
+}
|
||||
+
|
||||
+static void sdp4430_panel_disable_hdmi(struct omap_dss_device *dssdev)
|
||||
+{
|
||||
+ gpio_free(HDMI_GPIO_LS_OE);
|
||||
+ gpio_free(HDMI_GPIO_HPD);
|
||||
+}
|
||||
+
|
||||
+static struct omap_dss_device sdp4430_hdmi_device = {
|
||||
+ .name = "hdmi",
|
||||
+ .driver_name = "hdmi_panel",
|
||||
+ .type = OMAP_DISPLAY_TYPE_HDMI,
|
||||
+ .platform_enable = sdp4430_panel_enable_hdmi,
|
||||
+ .platform_disable = sdp4430_panel_disable_hdmi,
|
||||
+ .channel = OMAP_DSS_CHANNEL_DIGIT,
|
||||
+};
|
||||
+
|
||||
+static struct omap_dss_device *sdp4430_dss_devices[] = {
|
||||
+ &sdp4430_hdmi_device,
|
||||
+};
|
||||
+
|
||||
+static struct omap_dss_board_info sdp4430_dss_data = {
|
||||
+ .num_devices = ARRAY_SIZE(sdp4430_dss_devices),
|
||||
+ .devices = sdp4430_dss_devices,
|
||||
+ .default_device = &sdp4430_hdmi_device,
|
||||
+};
|
||||
+
|
||||
+void omap_4430sdp_display_init(void)
|
||||
+{
|
||||
+ sdp4430_hdmi_mux_init();
|
||||
+ omap_display_init(&sdp4430_dss_data);
|
||||
+}
|
||||
+
|
||||
#ifdef CONFIG_OMAP_MUX
|
||||
static struct omap_board_mux board_mux[] __initdata = {
|
||||
OMAP4_MUX(USBB2_ULPITLL_CLK, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
|
||||
@@ -661,6 +734,8 @@ static void __init omap_4430sdp_init(void)
|
||||
status = omap4_keyboard_init(&sdp4430_keypad_data);
|
||||
if (status)
|
||||
pr_err("Keypad initialization failed: %d\n", status);
|
||||
+
|
||||
+ omap_4430sdp_display_init();
|
||||
}
|
||||
|
||||
static void __init omap_4430sdp_map_io(void)
|
||||
-- 1.5.6.3
|
@ -1,117 +0,0 @@
|
||||
Adding board file structure for display which adds the display
|
||||
structure with HDMI as the default driver when the display init
|
||||
is called.
|
||||
HDMI GPIO configurations are also done in this file.
|
||||
|
||||
Signed-off-by: Mythri P K <mythripk@ti.com>
|
||||
---
|
||||
arch/arm/mach-omap2/board-omap4panda.c | 74 ++++++++++++++++++++++++++++++++
|
||||
1 files changed, 74 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
|
||||
index a94ce07..4869c0f 100644
|
||||
--- a/arch/arm/mach-omap2/board-omap4panda.c
|
||||
+++ b/arch/arm/mach-omap2/board-omap4panda.c
|
||||
@@ -34,6 +34,7 @@
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
+#include <plat/display.h>
|
||||
|
||||
#include <plat/board.h>
|
||||
#include <plat/common.h>
|
||||
@@ -49,6 +50,8 @@
|
||||
#define GPIO_HUB_NRESET 62
|
||||
#define GPIO_WIFI_PMENA 43
|
||||
#define GPIO_WIFI_IRQ 53
|
||||
+#define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */
|
||||
+#define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
|
||||
|
||||
/* wl127x BT, FM, GPS connectivity chip */
|
||||
static int wl1271_gpios[] = {46, -1, -1};
|
||||
@@ -467,6 +470,76 @@ static struct omap_board_mux board_mux[] __initdata = {
|
||||
#define board_mux NULL
|
||||
#endif
|
||||
|
||||
+static void sdp4430_hdmi_mux_init(void)
|
||||
+{
|
||||
+ /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
|
||||
+ omap_mux_init_signal("hdmi_hpd",
|
||||
+ OMAP_PIN_INPUT_PULLUP);
|
||||
+ omap_mux_init_signal("hdmi_cec",
|
||||
+ OMAP_PIN_INPUT_PULLUP);
|
||||
+ /* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
|
||||
+ omap_mux_init_signal("hdmi_ddc_scl",
|
||||
+ OMAP_PIN_INPUT_PULLUP);
|
||||
+ omap_mux_init_signal("hdmi_ddc_sda",
|
||||
+ OMAP_PIN_INPUT_PULLUP);
|
||||
+}
|
||||
+
|
||||
+static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev)
|
||||
+{
|
||||
+ int status;
|
||||
+
|
||||
+ status = gpio_request_one(HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH,
|
||||
+ "hdmi_gpio_hpd");
|
||||
+ if (status) {
|
||||
+ pr_err("Cannot request GPIO %d\n", HDMI_GPIO_HPD);
|
||||
+ return status;
|
||||
+ }
|
||||
+ status = gpio_request_one(HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH,
|
||||
+ "hdmi_gpio_ls_oe");
|
||||
+ if (status) {
|
||||
+ pr_err("Cannot request GPIO %d\n", HDMI_GPIO_LS_OE);
|
||||
+ goto error1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+error1:
|
||||
+ gpio_free(HDMI_GPIO_HPD);
|
||||
+
|
||||
+ return status;
|
||||
+}
|
||||
+
|
||||
+static void sdp4430_panel_disable_hdmi(struct omap_dss_device *dssdev)
|
||||
+{
|
||||
+ gpio_free(HDMI_GPIO_LS_OE);
|
||||
+ gpio_free(HDMI_GPIO_HPD);
|
||||
+}
|
||||
+
|
||||
+static struct omap_dss_device sdp4430_hdmi_device = {
|
||||
+ .name = "hdmi",
|
||||
+ .driver_name = "hdmi_panel",
|
||||
+ .type = OMAP_DISPLAY_TYPE_HDMI,
|
||||
+ .platform_enable = sdp4430_panel_enable_hdmi,
|
||||
+ .platform_disable = sdp4430_panel_disable_hdmi,
|
||||
+ .channel = OMAP_DSS_CHANNEL_DIGIT,
|
||||
+};
|
||||
+
|
||||
+static struct omap_dss_device *sdp4430_dss_devices[] = {
|
||||
+ &sdp4430_hdmi_device,
|
||||
+};
|
||||
+
|
||||
+static struct omap_dss_board_info sdp4430_dss_data = {
|
||||
+ .num_devices = ARRAY_SIZE(sdp4430_dss_devices),
|
||||
+ .devices = sdp4430_dss_devices,
|
||||
+ .default_device = &sdp4430_hdmi_device,
|
||||
+};
|
||||
+
|
||||
+void omap_panda_display_init(void)
|
||||
+{
|
||||
+ sdp4430_hdmi_mux_init();
|
||||
+ omap_display_init(&sdp4430_dss_data);
|
||||
+}
|
||||
+
|
||||
static void __init omap4_panda_init(void)
|
||||
{
|
||||
int package = OMAP_PACKAGE_CBS;
|
||||
@@ -485,6 +558,7 @@ static void __init omap4_panda_init(void)
|
||||
omap4_twl6030_hsmmc_init(mmc);
|
||||
omap4_ehci_init();
|
||||
usb_musb_init(&musb_board_data);
|
||||
+ omap_panda_display_init();
|
||||
}
|
||||
|
||||
static void __init omap4_panda_map_io(void)
|
||||
-- 1.5.6.3
|
Loading…
x
Reference in New Issue
Block a user