aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSean Paul <seanpaul@chromium.org>2013-01-16 10:17:20 -0500
committerInki Dae <inki.dae@samsung.com>2013-01-25 00:38:45 -0500
commit77006a7ac8d0122a64512958e0a1e34d9e9f39a3 (patch)
tree507c5b97efbd3e72ee13acfc7193338d9990e24e /drivers
parent0315a902c0ca7f54f992fc8062158092ed57b062 (diff)
drm/exynos: Remove "internal" interrupt handling
Remove the "internal" interrupt handling since it's never invoked and remove "external" reference. This patch removes a bunch of dead code and clarifies how hotplugging is handled in the HDMI driver. Signed-off-by: Sean Paul <seanpaul@chromium.org> Signed-off-by: Inki Dae <inki.dae@samsung.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/exynos/exynos_hdmi.c74
1 files changed, 14 insertions, 60 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index b490afa781dc..41ba9dc7f5c7 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -98,8 +98,7 @@ struct hdmi_context {
98 98
99 void __iomem *regs; 99 void __iomem *regs;
100 void *parent_ctx; 100 void *parent_ctx;
101 int external_irq; 101 int irq;
102 int internal_irq;
103 102
104 struct i2c_client *ddc_port; 103 struct i2c_client *ddc_port;
105 struct i2c_client *hdmiphy_port; 104 struct i2c_client *hdmiphy_port;
@@ -1656,7 +1655,7 @@ static void hdmi_conf_init(struct hdmi_context *hdata)
1656{ 1655{
1657 struct hdmi_infoframe infoframe; 1656 struct hdmi_infoframe infoframe;
1658 1657
1659 /* disable HPD interrupts */ 1658 /* disable HPD interrupts from HDMI IP block, use GPIO instead */
1660 hdmi_reg_writemask(hdata, HDMI_INTC_CON, 0, HDMI_INTC_EN_GLOBAL | 1659 hdmi_reg_writemask(hdata, HDMI_INTC_CON, 0, HDMI_INTC_EN_GLOBAL |
1661 HDMI_INTC_EN_HPD_PLUG | HDMI_INTC_EN_HPD_UNPLUG); 1660 HDMI_INTC_EN_HPD_PLUG | HDMI_INTC_EN_HPD_UNPLUG);
1662 1661
@@ -2260,7 +2259,7 @@ static struct exynos_hdmi_ops hdmi_ops = {
2260 .dpms = hdmi_dpms, 2259 .dpms = hdmi_dpms,
2261}; 2260};
2262 2261
2263static irqreturn_t hdmi_external_irq_thread(int irq, void *arg) 2262static irqreturn_t hdmi_irq_thread(int irq, void *arg)
2264{ 2263{
2265 struct exynos_drm_hdmi_context *ctx = arg; 2264 struct exynos_drm_hdmi_context *ctx = arg;
2266 struct hdmi_context *hdata = ctx->ctx; 2265 struct hdmi_context *hdata = ctx->ctx;
@@ -2275,31 +2274,6 @@ static irqreturn_t hdmi_external_irq_thread(int irq, void *arg)
2275 return IRQ_HANDLED; 2274 return IRQ_HANDLED;
2276} 2275}
2277 2276
2278static irqreturn_t hdmi_internal_irq_thread(int irq, void *arg)
2279{
2280 struct exynos_drm_hdmi_context *ctx = arg;
2281 struct hdmi_context *hdata = ctx->ctx;
2282 u32 intc_flag;
2283
2284 intc_flag = hdmi_reg_read(hdata, HDMI_INTC_FLAG);
2285 /* clearing flags for HPD plug/unplug */
2286 if (intc_flag & HDMI_INTC_FLAG_HPD_UNPLUG) {
2287 DRM_DEBUG_KMS("unplugged\n");
2288 hdmi_reg_writemask(hdata, HDMI_INTC_FLAG, ~0,
2289 HDMI_INTC_FLAG_HPD_UNPLUG);
2290 }
2291 if (intc_flag & HDMI_INTC_FLAG_HPD_PLUG) {
2292 DRM_DEBUG_KMS("plugged\n");
2293 hdmi_reg_writemask(hdata, HDMI_INTC_FLAG, ~0,
2294 HDMI_INTC_FLAG_HPD_PLUG);
2295 }
2296
2297 if (ctx->drm_dev)
2298 drm_helper_hpd_irq_event(ctx->drm_dev);
2299
2300 return IRQ_HANDLED;
2301}
2302
2303static int hdmi_resources_init(struct hdmi_context *hdata) 2277static int hdmi_resources_init(struct hdmi_context *hdata)
2304{ 2278{
2305 struct device *dev = hdata->dev; 2279 struct device *dev = hdata->dev;
@@ -2550,39 +2524,24 @@ static int hdmi_probe(struct platform_device *pdev)
2550 2524
2551 hdata->hdmiphy_port = hdmi_hdmiphy; 2525 hdata->hdmiphy_port = hdmi_hdmiphy;
2552 2526
2553 hdata->external_irq = gpio_to_irq(hdata->hpd_gpio); 2527 hdata->irq = gpio_to_irq(hdata->hpd_gpio);
2554 if (hdata->external_irq < 0) { 2528 if (hdata->irq < 0) {
2555 DRM_ERROR("failed to get GPIO external irq\n"); 2529 DRM_ERROR("failed to get GPIO irq\n");
2556 ret = hdata->external_irq; 2530 ret = hdata->irq;
2557 goto err_hdmiphy;
2558 }
2559
2560 hdata->internal_irq = platform_get_irq(pdev, 0);
2561 if (hdata->internal_irq < 0) {
2562 DRM_ERROR("failed to get platform internal irq\n");
2563 ret = hdata->internal_irq;
2564 goto err_hdmiphy; 2531 goto err_hdmiphy;
2565 } 2532 }
2566 2533
2567 hdata->hpd = gpio_get_value(hdata->hpd_gpio); 2534 hdata->hpd = gpio_get_value(hdata->hpd_gpio);
2568 2535
2569 ret = request_threaded_irq(hdata->external_irq, NULL, 2536 ret = request_threaded_irq(hdata->irq, NULL,
2570 hdmi_external_irq_thread, IRQF_TRIGGER_RISING | 2537 hdmi_irq_thread, IRQF_TRIGGER_RISING |
2571 IRQF_TRIGGER_FALLING | IRQF_ONESHOT, 2538 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
2572 "hdmi_external", drm_hdmi_ctx); 2539 "hdmi", drm_hdmi_ctx);
2573 if (ret) { 2540 if (ret) {
2574 DRM_ERROR("failed to register hdmi external interrupt\n"); 2541 DRM_ERROR("failed to register hdmi interrupt\n");
2575 goto err_hdmiphy; 2542 goto err_hdmiphy;
2576 } 2543 }
2577 2544
2578 ret = request_threaded_irq(hdata->internal_irq, NULL,
2579 hdmi_internal_irq_thread, IRQF_ONESHOT,
2580 "hdmi_internal", drm_hdmi_ctx);
2581 if (ret) {
2582 DRM_ERROR("failed to register hdmi internal interrupt\n");
2583 goto err_free_irq;
2584 }
2585
2586 /* Attach HDMI Driver to common hdmi. */ 2545 /* Attach HDMI Driver to common hdmi. */
2587 exynos_hdmi_drv_attach(drm_hdmi_ctx); 2546 exynos_hdmi_drv_attach(drm_hdmi_ctx);
2588 2547
@@ -2593,8 +2552,6 @@ static int hdmi_probe(struct platform_device *pdev)
2593 2552
2594 return 0; 2553 return 0;
2595 2554
2596err_free_irq:
2597 free_irq(hdata->external_irq, drm_hdmi_ctx);
2598err_hdmiphy: 2555err_hdmiphy:
2599 i2c_del_driver(&hdmiphy_driver); 2556 i2c_del_driver(&hdmiphy_driver);
2600err_ddc: 2557err_ddc:
@@ -2612,8 +2569,7 @@ static int hdmi_remove(struct platform_device *pdev)
2612 2569
2613 pm_runtime_disable(dev); 2570 pm_runtime_disable(dev);
2614 2571
2615 free_irq(hdata->internal_irq, hdata); 2572 free_irq(hdata->irq, hdata);
2616 free_irq(hdata->external_irq, hdata);
2617 2573
2618 2574
2619 /* hdmiphy i2c driver */ 2575 /* hdmiphy i2c driver */
@@ -2632,8 +2588,7 @@ static int hdmi_suspend(struct device *dev)
2632 2588
2633 DRM_DEBUG_KMS("[%d] %s\n", __LINE__, __func__); 2589 DRM_DEBUG_KMS("[%d] %s\n", __LINE__, __func__);
2634 2590
2635 disable_irq(hdata->internal_irq); 2591 disable_irq(hdata->irq);
2636 disable_irq(hdata->external_irq);
2637 2592
2638 hdata->hpd = false; 2593 hdata->hpd = false;
2639 if (ctx->drm_dev) 2594 if (ctx->drm_dev)
@@ -2658,8 +2613,7 @@ static int hdmi_resume(struct device *dev)
2658 2613
2659 hdata->hpd = gpio_get_value(hdata->hpd_gpio); 2614 hdata->hpd = gpio_get_value(hdata->hpd_gpio);
2660 2615
2661 enable_irq(hdata->external_irq); 2616 enable_irq(hdata->irq);
2662 enable_irq(hdata->internal_irq);
2663 2617
2664 if (!pm_runtime_suspended(dev)) { 2618 if (!pm_runtime_suspended(dev)) {
2665 DRM_DEBUG_KMS("%s : Already resumed\n", __func__); 2619 DRM_DEBUG_KMS("%s : Already resumed\n", __func__);