Commit f25d0a68 authored by Thierry Reding's avatar Thierry Reding

drm/tegra: Refactor CEC support

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: default avatarThierry Reding <treding@nvidia.com>
Reviewed-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent bfeffd15
...@@ -124,7 +124,7 @@ struct tegra_output { ...@@ -124,7 +124,7 @@ struct tegra_output {
struct drm_panel *panel; struct drm_panel *panel;
struct i2c_adapter *ddc; struct i2c_adapter *ddc;
const struct edid *edid; const struct edid *edid;
struct cec_notifier *notifier; struct cec_notifier *cec;
unsigned int hpd_irq; unsigned int hpd_irq;
int hpd_gpio; int hpd_gpio;
enum of_gpio_flags hpd_gpio_flags; enum of_gpio_flags hpd_gpio_flags;
......
...@@ -22,8 +22,6 @@ ...@@ -22,8 +22,6 @@
#include <sound/hda_verbs.h> #include <sound/hda_verbs.h>
#include <media/cec-notifier.h>
#include "hdmi.h" #include "hdmi.h"
#include "drm.h" #include "drm.h"
#include "dc.h" #include "dc.h"
...@@ -1709,10 +1707,6 @@ static int tegra_hdmi_probe(struct platform_device *pdev) ...@@ -1709,10 +1707,6 @@ static int tegra_hdmi_probe(struct platform_device *pdev)
return PTR_ERR(hdmi->vdd); 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; hdmi->output.dev = &pdev->dev;
err = tegra_output_probe(&hdmi->output); err = tegra_output_probe(&hdmi->output);
...@@ -1771,9 +1765,6 @@ static int tegra_hdmi_remove(struct platform_device *pdev) ...@@ -1771,9 +1765,6 @@ static int tegra_hdmi_remove(struct platform_device *pdev)
tegra_output_remove(&hdmi->output); tegra_output_remove(&hdmi->output);
if (hdmi->output.notifier)
cec_notifier_put(hdmi->output.notifier);
return 0; return 0;
} }
......
...@@ -36,7 +36,7 @@ int tegra_output_connector_get_modes(struct drm_connector *connector) ...@@ -36,7 +36,7 @@ int tegra_output_connector_get_modes(struct drm_connector *connector)
else if (output->ddc) else if (output->ddc)
edid = drm_get_edid(connector, 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); drm_connector_update_edid_property(connector, edid);
if (edid) { if (edid) {
...@@ -73,7 +73,7 @@ tegra_output_connector_detect(struct drm_connector *connector, bool force) ...@@ -73,7 +73,7 @@ tegra_output_connector_detect(struct drm_connector *connector, bool force)
} }
if (status != connector_status_connected) if (status != connector_status_connected)
cec_notifier_phys_addr_invalidate(output->notifier); cec_notifier_phys_addr_invalidate(output->cec);
return status; return status;
} }
...@@ -174,11 +174,18 @@ int tegra_output_probe(struct tegra_output *output) ...@@ -174,11 +174,18 @@ int tegra_output_probe(struct tegra_output *output)
disable_irq(output->hpd_irq); disable_irq(output->hpd_irq);
} }
output->cec = cec_notifier_get(output->dev);
if (!output->cec)
return -ENOMEM;
return 0; return 0;
} }
void tegra_output_remove(struct tegra_output *output) void tegra_output_remove(struct tegra_output *output)
{ {
if (output->cec)
cec_notifier_put(output->cec);
if (gpio_is_valid(output->hpd_gpio)) { if (gpio_is_valid(output->hpd_gpio)) {
free_irq(output->hpd_irq, output); free_irq(output->hpd_irq, output);
gpio_free(output->hpd_gpio); gpio_free(output->hpd_gpio);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment