* [PATCH 0/3] OMAPDSS: HDMI: HDMI Hot-plug detect support.
@ 2011-12-13 13:24 mythripk
2011-12-13 13:24 ` [PATCH 1/3] OMAPDSS: HDMI: HPD support in boardfile mythripk
0 siblings, 1 reply; 5+ messages in thread
From: mythripk @ 2011-12-13 13:24 UTC (permalink / raw)
To: tomi.valkeinen, linux-omap; +Cc: Mythri P K
From: Mythri P K <mythripk@ti.com>
HDMI even if enabled by default should be powered on only when the cable is
connected. This is supported by the Hot-plug feature.
Now when HDMI is enabled the following steps are followed:
-Display enable for HDMI is based on Hot-plug-detect(HPD).
-It registers to the GPIO irq handler and checks if cable is connected,
-If yes then it turns on HDMI
-If an HPD interrupt is received the corresponding IRQ handler is called where
it checks if it is a connect / disconnect based on which appropriate action
is taken.
Mythri P K (3):
OMAPDSS: HDMI: HPD support in boardfile
OMAPDSS: HDMI: HPD support added to HDMI driver
OMAPDSS: HDMI: Add option to enable HDMI in HPD mode
arch/arm/mach-omap2/board-4430sdp.c | 35 ++++--------
arch/arm/mach-omap2/board-omap4panda.c | 35 ++++---------
arch/arm/mach-omap2/display.c | 20 ++++++--
drivers/video/omap2/dss/dss.h | 2 +
drivers/video/omap2/dss/hdmi.c | 92 ++++++++++++++++++++++++++-----
drivers/video/omap2/dss/hdmi_panel.c | 54 ++++++++++++++++++-
include/video/omapdss.h | 10 +++-
7 files changed, 176 insertions(+), 72 deletions(-)
--
1.7.5.4
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] OMAPDSS: HDMI: HPD support in boardfile
2011-12-13 13:24 [PATCH 0/3] OMAPDSS: HDMI: HDMI Hot-plug detect support mythripk
@ 2011-12-13 13:24 ` mythripk
2011-12-13 13:24 ` [PATCH 2/3] OMAPDSS: HDMI: HPD support added to HDMI driver mythripk
2011-12-17 1:34 ` [PATCH 1/3] OMAPDSS: HDMI: HPD support in boardfile Tony Lindgren
0 siblings, 2 replies; 5+ messages in thread
From: mythripk @ 2011-12-13 13:24 UTC (permalink / raw)
To: tomi.valkeinen, linux-omap; +Cc: Mythri P K
From: Mythri P K <mythripk@ti.com>
Add support for HPD GPIO configuration in board file.
Also remove the enabling of GPIO's required for HDMI from
hdmi driver file to display.c based on the GPIO #'s sent from
board file.
Signed-off-by: Mythri P K <mythripk@ti.com>
---
arch/arm/mach-omap2/board-4430sdp.c | 35 ++++++++++---------------------
arch/arm/mach-omap2/board-omap4panda.c | 35 +++++++++----------------------
arch/arm/mach-omap2/display.c | 20 ++++++++++++++---
drivers/video/omap2/dss/hdmi.c | 16 +-------------
include/video/omapdss.h | 6 ++++-
5 files changed, 43 insertions(+), 69 deletions(-)
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index 1b7c5e5..ba32b81 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -52,8 +52,9 @@
#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_CT_CP_HPD 60 /* Hot plug pin for HDMI */
#define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
+#define HDMI_GPIO_HPD 63
#define DISPLAY_SEL_GPIO 59 /* LCD2/PicoDLP switch */
#define DLP_POWER_ON_GPIO 40
@@ -596,27 +597,11 @@ static void __init omap_sfh7741prox_init(void)
}
static struct gpio sdp4430_hdmi_gpios[] = {
- { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
- { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
+ {HDMI_GPIO_CT_CP_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ct_cp_hpd" },
+ {HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
+ {HDMI_GPIO_HPD, GPIOF_DIR_IN, "hdmi_gpio_hpd" },
};
-static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev)
-{
- int status;
-
- status = gpio_request_array(sdp4430_hdmi_gpios,
- ARRAY_SIZE(sdp4430_hdmi_gpios));
- if (status)
- pr_err("%s: Cannot request HDMI GPIOs\n", __func__);
-
- 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 nokia_dsi_panel_data dsi1_panel = {
.name = "taal",
@@ -735,9 +720,8 @@ 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,
+ .hpd_gpio = 63,
};
static struct picodlp_panel_data sdp4430_picodlp_pdata = {
@@ -835,9 +819,12 @@ static void omap_4430sdp_display_init(void)
* EDID read failure.
*/
if (cpu_is_omap446x() || (omap_rev() > OMAP4430_REV_ES2_2))
- omap_hdmi_init(OMAP_HDMI_EXTERNAL_PULLUP);
+ omap_hdmi_init(OMAP_HDMI_EXTERNAL_PULLUP, HDMI_GPIO_HPD,
+ sdp4430_hdmi_gpios,
+ ARRAY_SIZE(sdp4430_hdmi_gpios));
else
- omap_hdmi_init(0);
+ omap_hdmi_init(0, HDMI_GPIO_HPD, sdp4430_hdmi_gpios,
+ ARRAY_SIZE(sdp4430_hdmi_gpios));
}
#ifdef CONFIG_OMAP_MUX
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
index 212e06c..e13d116 100644
--- a/arch/arm/mach-omap2/board-omap4panda.c
+++ b/arch/arm/mach-omap2/board-omap4panda.c
@@ -51,8 +51,9 @@
#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_CT_CP_HPD 60 /* Hot plug pin for HDMI */
#define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
+#define HDMI_GPIO_HPD 63
/* wl127x BT, FM, GPS connectivity chip */
static int wl1271_gpios[] = {46, -1, -1};
@@ -479,35 +480,17 @@ int __init omap4_panda_dvi_init(void)
}
static struct gpio panda_hdmi_gpios[] = {
- { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
- { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
+ {HDMI_GPIO_CT_CP_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ct_cp_hpd" },
+ {HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
+ {HDMI_GPIO_HPD, GPIOF_DIR_IN, "hdmi_gpio_hpd" },
};
-static int omap4_panda_panel_enable_hdmi(struct omap_dss_device *dssdev)
-{
- int status;
-
- status = gpio_request_array(panda_hdmi_gpios,
- ARRAY_SIZE(panda_hdmi_gpios));
- if (status)
- pr_err("Cannot request HDMI GPIOs\n");
-
- return status;
-}
-
-static void omap4_panda_panel_disable_hdmi(struct omap_dss_device *dssdev)
-{
- gpio_free(HDMI_GPIO_LS_OE);
- gpio_free(HDMI_GPIO_HPD);
-}
-
static struct omap_dss_device omap4_panda_hdmi_device = {
.name = "hdmi",
.driver_name = "hdmi_panel",
.type = OMAP_DISPLAY_TYPE_HDMI,
- .platform_enable = omap4_panda_panel_enable_hdmi,
- .platform_disable = omap4_panda_panel_disable_hdmi,
.channel = OMAP_DSS_CHANNEL_DIGIT,
+ .hpd_gpio = 63,
};
static struct omap_dss_device *omap4_panda_dss_devices[] = {
@@ -551,9 +534,11 @@ void omap4_panda_display_init(void)
* EDID read failure.
*/
if (cpu_is_omap446x() || (omap_rev() > OMAP4430_REV_ES2_2))
- omap_hdmi_init(OMAP_HDMI_EXTERNAL_PULLUP);
+ omap_hdmi_init(OMAP_HDMI_EXTERNAL_PULLUP, HDMI_GPIO_HPD,
+ panda_hdmi_gpios, ARRAY_SIZE(panda_hdmi_gpios));
else
- omap_hdmi_init(0);
+ omap_hdmi_init(0, HDMI_GPIO_HPD, panda_hdmi_gpios,
+ ARRAY_SIZE(panda_hdmi_gpios));
}
static void __init omap4_panda_init(void)
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
index a75e179..10b47b1 100644
--- a/arch/arm/mach-omap2/display.c
+++ b/arch/arm/mach-omap2/display.c
@@ -29,6 +29,7 @@
#include <plat/omap-pm.h>
#include <plat/common.h>
+#include <linux/gpio.h>
#include "mux.h"
#include "control.h"
#include "display.h"
@@ -97,14 +98,14 @@ static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initdata = {
{ "dss_hdmi", "omapdss_hdmi", -1 },
};
-static void omap4_hdmi_mux_pads(int flags)
+static void omap4_hdmi_mux_pads(int flags, int hpd_gpio)
{
u32 reg;
u16 control_i2c_1;
/* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
omap_mux_init_signal("hdmi_hpd",
- OMAP_PIN_INPUT_PULLUP);
+ OMAP_PIN_INPUT_PULLDOWN);
omap_mux_init_signal("hdmi_cec",
OMAP_PIN_INPUT_PULLUP);
/* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
@@ -112,6 +113,10 @@ static void omap4_hdmi_mux_pads(int flags)
OMAP_PIN_INPUT_PULLUP);
omap_mux_init_signal("hdmi_ddc_sda",
OMAP_PIN_INPUT_PULLUP);
+ omap_mux_init_signal("gpmc_wait2.gpio_100",
+ OMAP_PIN_INPUT_PULLDOWN);
+ /* HPD GPIO needs to be muxed*/
+ omap_mux_init_gpio(hpd_gpio, OMAP_PIN_INPUT | OMAP_PULL_ENA);
if (flags & OMAP_HDMI_EXTERNAL_PULLUP) {
control_i2c_1 = OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_I2C_1;
@@ -155,10 +160,17 @@ static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
return 0;
}
-int omap_hdmi_init(int flags)
+int omap_hdmi_init(int flags, int hpd_gpio, struct gpio hdmi_gpios[], int size)
{
+ int status;
+
+ status = gpio_request_array(hdmi_gpios, size);
+ if (status) {
+ pr_err("%s: Cannot request HDMI GPIOs\n", __func__);
+ return status;
+ }
if (cpu_is_omap44xx())
- omap4_hdmi_mux_pads(flags);
+ omap4_hdmi_mux_pads(flags, hpd_gpio);
return 0;
}
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index c56378c..36a7541 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -508,26 +508,15 @@ int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev)
goto err0;
}
- if (dssdev->platform_enable) {
- r = dssdev->platform_enable(dssdev);
- if (r) {
- DSSERR("failed to enable GPIO's\n");
- goto err1;
- }
- }
-
r = hdmi_power_on(dssdev);
if (r) {
DSSERR("failed to power on device\n");
- goto err2;
+ goto err1;
}
mutex_unlock(&hdmi.lock);
return 0;
-err2:
- if (dssdev->platform_disable)
- dssdev->platform_disable(dssdev);
err1:
omap_dss_stop_device(dssdev);
err0:
@@ -543,9 +532,6 @@ void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev)
hdmi_power_off(dssdev);
- if (dssdev->platform_disable)
- dssdev->platform_disable(dssdev);
-
omap_dss_stop_device(dssdev);
mutex_unlock(&hdmi.lock);
diff --git a/include/video/omapdss.h b/include/video/omapdss.h
index df585b5..ffd5d42 100644
--- a/include/video/omapdss.h
+++ b/include/video/omapdss.h
@@ -21,6 +21,7 @@
#include <linux/list.h>
#include <linux/kobject.h>
#include <linux/device.h>
+#include <linux/gpio.h>
#define DISPC_IRQ_FRAMEDONE (1 << 0)
#define DISPC_IRQ_VSYNC (1 << 1)
@@ -312,7 +313,8 @@ struct omap_dss_board_info {
/* Init with the board info */
extern int omap_display_init(struct omap_dss_board_info *board_data);
/* HDMI mux init*/
-extern int omap_hdmi_init(int flags);
+extern int omap_hdmi_init(int flags, int hpd_gpio,
+ struct gpio hdmi_gpios[], int size);
struct omap_display_platform_data {
struct omap_dss_board_info *board_data;
@@ -552,6 +554,8 @@ struct omap_dss_device {
int reset_gpio;
+ int hpd_gpio;
+
int max_backlight_level;
const char *name;
--
1.7.5.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] OMAPDSS: HDMI: HPD support added to HDMI driver
2011-12-13 13:24 ` [PATCH 1/3] OMAPDSS: HDMI: HPD support in boardfile mythripk
@ 2011-12-13 13:24 ` mythripk
2011-12-13 13:24 ` [PATCH 3/3] OMAPDSS: HDMI: Add option to enable HDMI in HPD mode mythripk
2011-12-17 1:34 ` [PATCH 1/3] OMAPDSS: HDMI: HPD support in boardfile Tony Lindgren
1 sibling, 1 reply; 5+ messages in thread
From: mythripk @ 2011-12-13 13:24 UTC (permalink / raw)
To: tomi.valkeinen, linux-omap; +Cc: Mythri P K
From: Mythri P K <mythripk@ti.com>
GPIO based handling of connect/disconnect of the HDMI cable
(Hot-plug detect)is added to the HDMI driver.
Signed-off-by: Mythri P K <mythripk@ti.com>
---
drivers/video/omap2/dss/dss.h | 2 +
drivers/video/omap2/dss/hdmi.c | 76 ++++++++++++++++++++++++++++++++++++++++
include/video/omapdss.h | 3 ++
3 files changed, 81 insertions(+), 0 deletions(-)
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 6308fc5..c1279a3 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -498,6 +498,8 @@ int omapdss_hdmi_display_check_timing(struct omap_dss_device *dssdev,
struct omap_video_timings *timings);
int omapdss_hdmi_read_edid(u8 *buf, int len);
bool omapdss_hdmi_detect(void);
+int omapdss_hdmi_hpd_enable(struct omap_dss_device *dssdev);
+void omapdss_hdmi_hpd_disable(struct omap_dss_device *dssdev);
int hdmi_panel_init(void);
void hdmi_panel_exit(void);
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index 36a7541..1fe8e84 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -67,9 +67,12 @@ static struct {
struct mutex lock;
struct omap_display_platform_data *pdata;
struct platform_device *pdev;
+ struct omap_dss_device *dssdev;
+
struct hdmi_ip_data ip_data;
int code;
int mode;
+ int hpd;
struct clk *sys_clk;
} hdmi;
@@ -454,6 +457,32 @@ void hdmi_dump_regs(struct seq_file *s)
mutex_unlock(&hdmi.lock);
}
+static int hdmi_get_current_hpd(void)
+{
+ return gpio_get_value(hdmi.dssdev->hpd_gpio);
+}
+
+static irqreturn_t hpd_enable_handler(int irq, void *ptr)
+{
+ DSSDBG("hpd enable %d\n", hdmi.hpd);
+
+ if (hdmi.hpd)
+ hdmi.dssdev->driver->default_enable(hdmi.dssdev);
+ else
+ hdmi.dssdev->driver->default_disable(hdmi.dssdev);
+
+ return IRQ_HANDLED;
+}
+
+static irqreturn_t hpd_irq_handler(int irq, void *ptr)
+{
+ hdmi.hpd = hdmi_get_current_hpd();
+
+ DSSDBG("hpd %d\n", hdmi.hpd);
+
+ return IRQ_WAKE_THREAD;
+}
+
int omapdss_hdmi_read_edid(u8 *buf, int len)
{
int r;
@@ -488,6 +517,41 @@ bool omapdss_hdmi_detect(void)
return r == 1;
}
+void omapdss_hdmi_hpd_disable(struct omap_dss_device *dssdev)
+{
+ DSSDBG("Enter hdmi_hpd_disable\n");
+
+ if (hdmi.dssdev)
+ free_irq(gpio_to_irq(hdmi.dssdev->hpd_gpio), hpd_irq_handler);
+
+ mutex_unlock(&hdmi.lock);
+}
+
+int omapdss_hdmi_hpd_enable(struct omap_dss_device *dssdev)
+{
+ int r = 0;
+
+ DSSDBG("ENTER hdmi_hpd_enable\n");
+
+ mutex_lock(&hdmi.lock);
+
+ r = request_threaded_irq(gpio_to_irq(hdmi.dssdev->hpd_gpio),
+ hpd_irq_handler, hpd_enable_handler,
+ IRQF_DISABLED | IRQF_TRIGGER_RISING |
+ IRQF_TRIGGER_FALLING, "hpd", NULL);
+ if (r < 0) {
+ pr_err("hdmi: request_irq %d failed\n",
+ gpio_to_irq(hdmi.dssdev->hpd_gpio));
+ return -EINVAL;
+ }
+
+ r = hdmi_get_current_hpd();
+
+ mutex_unlock(&hdmi.lock);
+
+ return r;
+}
+
int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev)
{
int r = 0;
@@ -733,12 +797,24 @@ static int omapdss_hdmihw_probe(struct platform_device *pdev)
{
struct resource *hdmi_mem;
int r;
+ struct omap_dss_board_info *board_data;
hdmi.pdata = pdev->dev.platform_data;
hdmi.pdev = pdev;
mutex_init(&hdmi.lock);
+ /* save reference to HDMI device */
+ board_data = hdmi.pdata->board_data;
+ for (r = 0; r < board_data->num_devices; r++) {
+ if (board_data->devices[r]->type == OMAP_DISPLAY_TYPE_HDMI)
+ hdmi.dssdev = board_data->devices[r];
+ }
+ if (!hdmi.dssdev) {
+ DSSERR("can't get HDMI device\n");
+ return -EINVAL;
+ }
+
hdmi_mem = platform_get_resource(hdmi.pdev, IORESOURCE_MEM, 0);
if (!hdmi_mem) {
DSSERR("can't get IORESOURCE_MEM HDMI\n");
diff --git a/include/video/omapdss.h b/include/video/omapdss.h
index ffd5d42..82e2c3e 100644
--- a/include/video/omapdss.h
+++ b/include/video/omapdss.h
@@ -630,6 +630,9 @@ struct omap_dss_driver {
int (*read_edid)(struct omap_dss_device *dssdev, u8 *buf, int len);
bool (*detect)(struct omap_dss_device *dssdev);
+
+ int (*default_enable)(struct omap_dss_device *dssdev);
+ void (*default_disable)(struct omap_dss_device *dssdev);
};
int omap_dss_register_driver(struct omap_dss_driver *);
--
1.7.5.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/3] OMAPDSS: HDMI: Add option to enable HDMI in HPD mode
2011-12-13 13:24 ` [PATCH 2/3] OMAPDSS: HDMI: HPD support added to HDMI driver mythripk
@ 2011-12-13 13:24 ` mythripk
0 siblings, 0 replies; 5+ messages in thread
From: mythripk @ 2011-12-13 13:24 UTC (permalink / raw)
To: tomi.valkeinen, linux-omap; +Cc: Mythri P K
From: Mythri P K <mythripk@ti.com>
Add option in the panel to enable HDMI in HPD mode to enable the interrupt to
detect cable connect/disconnect, HDMI will be powered on only when the cable is
connected and powered down when cable is disconnected.
Signed-off-by: Mythri P K <mythripk@ti.com>
---
drivers/video/omap2/dss/hdmi_panel.c | 54 ++++++++++++++++++++++++++++++++--
include/video/omapdss.h | 1 +
2 files changed, 52 insertions(+), 3 deletions(-)
diff --git a/drivers/video/omap2/dss/hdmi_panel.c b/drivers/video/omap2/dss/hdmi_panel.c
index 533d5dc..0b8a8ac 100644
--- a/drivers/video/omap2/dss/hdmi_panel.c
+++ b/drivers/video/omap2/dss/hdmi_panel.c
@@ -61,7 +61,7 @@ static int hdmi_panel_enable(struct omap_dss_device *dssdev)
mutex_lock(&hdmi.hdmi_lock);
- if (dssdev->state != OMAP_DSS_DISPLAY_DISABLED) {
+ if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
r = -EINVAL;
goto err;
}
@@ -222,11 +222,57 @@ err:
return r;
}
+static void hdmi_hpd_disable(struct omap_dss_device *dssdev)
+{
+ mutex_lock(&hdmi.hdmi_lock);
+
+ if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE ||
+ dssdev->state == OMAP_DSS_DISPLAY_HOTPLUG)
+ omapdss_hdmi_hpd_disable(dssdev);
+
+ dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
+
+ mutex_unlock(&hdmi.hdmi_lock);
+}
+
+static int hdmi_hpd_enable(struct omap_dss_device *dssdev)
+{
+ int r = 0;
+ DSSDBG("ENTER hdmi_hpd_enable\n");
+
+ mutex_lock(&hdmi.hdmi_lock);
+
+ if (dssdev->state != OMAP_DSS_DISPLAY_DISABLED) {
+ r = -EINVAL;
+ goto err;
+ }
+
+ r = omapdss_hdmi_hpd_enable(dssdev);
+
+ if (r < 0) {
+ DSSERR("failed to power on\n");
+ goto err;
+ } else if (r == 1) {
+ r = omapdss_hdmi_display_enable(dssdev);
+ if (r) {
+ DSSERR("failed to power on\n");
+ goto err;
+ }
+ dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
+ } else {
+ dssdev->state = OMAP_DSS_DISPLAY_HOTPLUG;
+ }
+
+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,
+ .enable = hdmi_hpd_enable,
+ .disable = hdmi_hpd_disable,
.suspend = hdmi_panel_suspend,
.resume = hdmi_panel_resume,
.get_timings = hdmi_get_timings,
@@ -234,6 +280,8 @@ static struct omap_dss_driver hdmi_driver = {
.check_timings = hdmi_check_timings,
.read_edid = hdmi_read_edid,
.detect = hdmi_detect,
+ .default_enable = hdmi_panel_enable,
+ .default_disable = hdmi_panel_disable,
.driver = {
.name = "hdmi_panel",
.owner = THIS_MODULE,
diff --git a/include/video/omapdss.h b/include/video/omapdss.h
index 82e2c3e..5623a34 100644
--- a/include/video/omapdss.h
+++ b/include/video/omapdss.h
@@ -159,6 +159,7 @@ enum omap_dss_display_state {
OMAP_DSS_DISPLAY_DISABLED = 0,
OMAP_DSS_DISPLAY_ACTIVE,
OMAP_DSS_DISPLAY_SUSPENDED,
+ OMAP_DSS_DISPLAY_HOTPLUG,
};
/* XXX perhaps this should be removed */
--
1.7.5.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/3] OMAPDSS: HDMI: HPD support in boardfile
2011-12-13 13:24 ` [PATCH 1/3] OMAPDSS: HDMI: HPD support in boardfile mythripk
2011-12-13 13:24 ` [PATCH 2/3] OMAPDSS: HDMI: HPD support added to HDMI driver mythripk
@ 2011-12-17 1:34 ` Tony Lindgren
1 sibling, 0 replies; 5+ messages in thread
From: Tony Lindgren @ 2011-12-17 1:34 UTC (permalink / raw)
To: mythripk; +Cc: tomi.valkeinen, linux-omap
* mythripk@ti.com <mythripk@ti.com> [111213 05:01]:
> From: Mythri P K <mythripk@ti.com>
>
> Add support for HPD GPIO configuration in board file.
> Also remove the enabling of GPIO's required for HDMI from
> hdmi driver file to display.c based on the GPIO #'s sent from
> board file.
>
> Signed-off-by: Mythri P K <mythripk@ti.com>
Few cosmetic comments below, otherwise this one looks OK
for Tomi to queue when he's happy with it:
Acked-by: Tony Lindgren <tony@atomide.com>
> --- a/arch/arm/mach-omap2/board-4430sdp.c
> +++ b/arch/arm/mach-omap2/board-4430sdp.c
> @@ -52,8 +52,9 @@
> #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_CT_CP_HPD 60 /* Hot plug pin for HDMI */
> #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
> +#define HDMI_GPIO_HPD 63
> #define DISPLAY_SEL_GPIO 59 /* LCD2/PicoDLP switch */
> #define DLP_POWER_ON_GPIO 40
>
> @@ -596,27 +597,11 @@ static void __init omap_sfh7741prox_init(void)
> }
>
> static struct gpio sdp4430_hdmi_gpios[] = {
> - { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
> - { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
> + {HDMI_GPIO_CT_CP_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ct_cp_hpd" },
> + {HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
> + {HDMI_GPIO_HPD, GPIOF_DIR_IN, "hdmi_gpio_hpd" },
> };
Please add the trailing comma to the array entries. Also check the
spacing, now there's no space in the beginning but one at the end?
> --- a/arch/arm/mach-omap2/board-omap4panda.c
> +++ b/arch/arm/mach-omap2/board-omap4panda.c
> @@ -51,8 +51,9 @@
> #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_CT_CP_HPD 60 /* Hot plug pin for HDMI */
> #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
> +#define HDMI_GPIO_HPD 63
>
> /* wl127x BT, FM, GPS connectivity chip */
> static int wl1271_gpios[] = {46, -1, -1};
> @@ -479,35 +480,17 @@ int __init omap4_panda_dvi_init(void)
> }
>
> static struct gpio panda_hdmi_gpios[] = {
> - { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
> - { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
> + {HDMI_GPIO_CT_CP_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ct_cp_hpd" },
> + {HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
> + {HDMI_GPIO_HPD, GPIOF_DIR_IN, "hdmi_gpio_hpd" },
> };
Here too.
> --- a/arch/arm/mach-omap2/display.c
> +++ b/arch/arm/mach-omap2/display.c
> @@ -29,6 +29,7 @@
> #include <plat/omap-pm.h>
> #include <plat/common.h>
>
> +#include <linux/gpio.h>
> #include "mux.h"
> #include "control.h"
> #include "display.h"
This one will cause a merge conflict with common.h, but Tomi
already knows how to deal with that ;)
Regards,
Tony
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-12-17 1:34 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-13 13:24 [PATCH 0/3] OMAPDSS: HDMI: HDMI Hot-plug detect support mythripk
2011-12-13 13:24 ` [PATCH 1/3] OMAPDSS: HDMI: HPD support in boardfile mythripk
2011-12-13 13:24 ` [PATCH 2/3] OMAPDSS: HDMI: HPD support added to HDMI driver mythripk
2011-12-13 13:24 ` [PATCH 3/3] OMAPDSS: HDMI: Add option to enable HDMI in HPD mode mythripk
2011-12-17 1:34 ` [PATCH 1/3] OMAPDSS: HDMI: HPD support in boardfile Tony Lindgren
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.