drm/tegra: Refactor CEC support
authorThierry Reding <treding@nvidia.com>
Mon, 10 Dec 2018 16:34:54 +0000 (17:34 +0100)
committerThierry Reding <treding@nvidia.com>
Wed, 16 Jan 2019 12:09:32 +0000 (13:09 +0100)
Most of the CEC support code already lives in the "output" library code.
Move registration and unregistration to the library code as well to make
use of the same code with HDMI on Tegra210 and later via the SOR.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/gpu/drm/tegra/drm.h
drivers/gpu/drm/tegra/hdmi.c
drivers/gpu/drm/tegra/output.c

index 1012335bb4892ff0c9db6896ad72888b07852c24..f1763b4d5b5fb0aba7613c2a2ec418ec7037e10f 100644 (file)
@@ -124,7 +124,7 @@ struct tegra_output {
        struct drm_panel *panel;
        struct i2c_adapter *ddc;
        const struct edid *edid;
-       struct cec_notifier *notifier;
+       struct cec_notifier *cec;
        unsigned int hpd_irq;
        int hpd_gpio;
        enum of_gpio_flags hpd_gpio_flags;
index 0082468f703c8c12ec89b142142b61b84b22fe89..d1997394561468fefb7afd616a9e706374eb95c4 100644 (file)
@@ -22,8 +22,6 @@
 
 #include <sound/hda_verbs.h>
 
-#include <media/cec-notifier.h>
-
 #include "hdmi.h"
 #include "drm.h"
 #include "dc.h"
@@ -1709,10 +1707,6 @@ static int tegra_hdmi_probe(struct platform_device *pdev)
                return PTR_ERR(hdmi->vdd);
        }
 
-       hdmi->output.notifier = cec_notifier_get(&pdev->dev);
-       if (hdmi->output.notifier == NULL)
-               return -ENOMEM;
-
        hdmi->output.dev = &pdev->dev;
 
        err = tegra_output_probe(&hdmi->output);
@@ -1771,9 +1765,6 @@ static int tegra_hdmi_remove(struct platform_device *pdev)
 
        tegra_output_remove(&hdmi->output);
 
-       if (hdmi->output.notifier)
-               cec_notifier_put(hdmi->output.notifier);
-
        return 0;
 }
 
index c662efc7e4139323d4c7d40b447b3466e2c5ce97..9c2b9dad55c301d29560b0c6220eb34c5b42f12b 100644 (file)
@@ -36,7 +36,7 @@ int tegra_output_connector_get_modes(struct drm_connector *connector)
        else if (output->ddc)
                edid = drm_get_edid(connector, output->ddc);
 
-       cec_notifier_set_phys_addr_from_edid(output->notifier, edid);
+       cec_notifier_set_phys_addr_from_edid(output->cec, edid);
        drm_connector_update_edid_property(connector, edid);
 
        if (edid) {
@@ -73,7 +73,7 @@ tegra_output_connector_detect(struct drm_connector *connector, bool force)
        }
 
        if (status != connector_status_connected)
-               cec_notifier_phys_addr_invalidate(output->notifier);
+               cec_notifier_phys_addr_invalidate(output->cec);
 
        return status;
 }
@@ -174,11 +174,18 @@ int tegra_output_probe(struct tegra_output *output)
                disable_irq(output->hpd_irq);
        }
 
+       output->cec = cec_notifier_get(output->dev);
+       if (!output->cec)
+               return -ENOMEM;
+
        return 0;
 }
 
 void tegra_output_remove(struct tegra_output *output)
 {
+       if (output->cec)
+               cec_notifier_put(output->cec);
+
        if (gpio_is_valid(output->hpd_gpio)) {
                free_irq(output->hpd_irq, output);
                gpio_free(output->hpd_gpio);