drm/tegra: Refactor CEC support
PATCH 1/1 drm/tegra: Refactor CEC support
From: Thierry Reding <[email protected]>
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.
--- drivers/gpu/drm/tegra/drm.h | 2 +- drivers/gpu/drm/tegra/hdmi.c | 9 --------- drivers/gpu/drm/tegra/output.c | 11 +++++++++-- 3 files changed, 10 insertions(+), 12 deletions(-)
drivers/gpu/drm/tegra/drm.h +1 -1
@@ -132,7 +132,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;
drivers/gpu/drm/tegra/hdmi.c +0 -9
@@ -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 ; }
drivers/gpu/drm/tegra/output.c +9 -2
@@ -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);
Signature · 6 lines
2.19.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Quoted 7 lines · Thierry Reding
From: Thierry Reding <[email protected]>
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 <[email protected]>
Thanks!
Hans
Quoted 85 lines
--- drivers/gpu/drm/tegra/drm.h | 2 +- drivers/gpu/drm/tegra/hdmi.c | 9 --------- drivers/gpu/drm/tegra/output.c | 11 +++++++++-- 3 files changed, 10 insertions(+), 12 deletions(-)drivers/gpu/drm/tegra/drm.h +1
-1@@ -132,7 +132,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;drivers/gpu/drm/tegra/hdmi.c +0
-9@@ -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 ; }drivers/gpu/drm/tegra/output.c +6
-2@@ -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 ;
drivers/gpu/drm/tegra/output.c int tegra_output_probe(struct tegra_output *output) · line 191
Quoted 10 lines
drivers/gpu/drm/tegra/output.c +3
-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);
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Quoted 10 lines · Hans Verkuil
Quoted 7 lines · Thierry Reding
From: Thierry Reding <[email protected]>
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 <[email protected]>Reviewed-by Hans Verkuil <[email protected]>
But read my reply to "[PATCH 1/2] media: tegra-cec: Support Tegra186 and Tegra194". You may want to take a different approach here.
Regards,
Hans
Quoted 91 lines
Thanks!
Hans
Quoted 86 lines
--- drivers/gpu/drm/tegra/drm.h | 2 +- drivers/gpu/drm/tegra/hdmi.c | 9 --------- drivers/gpu/drm/tegra/output.c | 11 +++++++++-- 3 files changed, 10 insertions(+), 12 deletions(-)drivers/gpu/drm/tegra/drm.h +1
-1@@ -132,7 +132,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;drivers/gpu/drm/tegra/hdmi.c +0
-9@@ -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 ; }drivers/gpu/drm/tegra/output.c +6
-2@@ -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 ; }
Quoted 10 lines
drivers/gpu/drm/tegra/output.c int tegra_output_probe(struct tegra_output *output) · line 191
Quoted 9 lines
drivers/gpu/drm/tegra/output.c +3
-0void 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);
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Quoted 8 lines · Hans Verkuil
Quoted 7 lines · Hans Verkuil
Quoted 6 lines · Thierry Reding
From: Thierry Reding <[email protected]>
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.
Quoted 6 lines
Quoted 3 lines
Quoted 1 line
Signed-off-by Thierry Reding <[email protected]>Reviewed-by Hans Verkuil <[email protected]>But read my reply to "[PATCH 1/2] media: tegra-cec: Support Tegra186 and Tegra194". You may want to take a different approach here.
Ignore this last comment, this code is fine.
Regards,
Hans
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel