OSDN Git Service

drm/tegra: Use cec_notifier_conn_(un)register()
authorDariusz Marcinkiewicz <darekm@google.com>
Wed, 14 Aug 2019 10:45:05 +0000 (12:45 +0200)
committerThierry Reding <treding@nvidia.com>
Thu, 24 Oct 2019 16:47:13 +0000 (18:47 +0200)
Use the new cec_notifier_conn_(un)register() functions to
(un)register the notifier for the HDMI connector, and fill in
the cec_connector_info.

Signed-off-by: Dariusz Marcinkiewicz <darekm@google.com>
Tested-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Acked-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/gpu/drm/tegra/output.c

index bdcaa4c..3437373 100644 (file)
@@ -70,6 +70,11 @@ tegra_output_connector_detect(struct drm_connector *connector, bool force)
 
 void tegra_output_connector_destroy(struct drm_connector *connector)
 {
+       struct tegra_output *output = connector_to_output(connector);
+
+       if (output->cec)
+               cec_notifier_conn_unregister(output->cec);
+
        drm_connector_unregister(connector);
        drm_connector_cleanup(connector);
 }
@@ -163,18 +168,11 @@ 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 (output->hpd_gpio)
                free_irq(output->hpd_irq, output);
 
@@ -184,6 +182,7 @@ void tegra_output_remove(struct tegra_output *output)
 
 int tegra_output_init(struct drm_device *drm, struct tegra_output *output)
 {
+       int connector_type;
        int err;
 
        if (output->panel) {
@@ -199,6 +198,21 @@ int tegra_output_init(struct drm_device *drm, struct tegra_output *output)
        if (output->hpd_gpio)
                enable_irq(output->hpd_irq);
 
+       connector_type = output->connector.connector_type;
+       /*
+        * Create a CEC notifier for HDMI connector.
+        */
+       if (connector_type == DRM_MODE_CONNECTOR_HDMIA ||
+           connector_type == DRM_MODE_CONNECTOR_HDMIB) {
+               struct cec_connector_info conn_info;
+
+               cec_fill_conn_info_from_drm(&conn_info, &output->connector);
+               output->cec = cec_notifier_conn_register(output->dev, NULL,
+                                                        &conn_info);
+               if (!output->cec)
+                       return -ENOMEM;
+       }
+
        return 0;
 }