Message ID | 20181210163455.13627-1-thierry.reding@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | drm/tegra: Refactor CEC support | expand |
On 12/10/18 5:34 PM, Thierry Reding wrote: > From: Thierry Reding <treding@nvidia.com> > > 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> Thanks! Hans > --- > 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(-) > > diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h > index 019862a41cb4..dbc9e11b0aec 100644 > --- a/drivers/gpu/drm/tegra/drm.h > +++ b/drivers/gpu/drm/tegra/drm.h > @@ -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; > diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c > index 0082468f703c..d19973945614 100644 > --- a/drivers/gpu/drm/tegra/hdmi.c > +++ b/drivers/gpu/drm/tegra/hdmi.c > @@ -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; > } > > diff --git a/drivers/gpu/drm/tegra/output.c b/drivers/gpu/drm/tegra/output.c > index c662efc7e413..9c2b9dad55c3 100644 > --- a/drivers/gpu/drm/tegra/output.c > +++ b/drivers/gpu/drm/tegra/output.c > @@ -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); >
On 12/10/18 5:36 PM, Hans Verkuil wrote: > On 12/10/18 5:34 PM, Thierry Reding wrote: >> From: Thierry Reding <treding@nvidia.com> >> >> 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> 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 > > Thanks! > > Hans > >> --- >> 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(-) >> >> diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h >> index 019862a41cb4..dbc9e11b0aec 100644 >> --- a/drivers/gpu/drm/tegra/drm.h >> +++ b/drivers/gpu/drm/tegra/drm.h >> @@ -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; >> diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c >> index 0082468f703c..d19973945614 100644 >> --- a/drivers/gpu/drm/tegra/hdmi.c >> +++ b/drivers/gpu/drm/tegra/hdmi.c >> @@ -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; >> } >> >> diff --git a/drivers/gpu/drm/tegra/output.c b/drivers/gpu/drm/tegra/output.c >> index c662efc7e413..9c2b9dad55c3 100644 >> --- a/drivers/gpu/drm/tegra/output.c >> +++ b/drivers/gpu/drm/tegra/output.c >> @@ -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); >> >
On 12/10/18 6:07 PM, Hans Verkuil wrote: > On 12/10/18 5:36 PM, Hans Verkuil wrote: >> On 12/10/18 5:34 PM, Thierry Reding wrote: >>> From: Thierry Reding <treding@nvidia.com> >>> >>> 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> > > 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
diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h index 019862a41cb4..dbc9e11b0aec 100644 --- a/drivers/gpu/drm/tegra/drm.h +++ b/drivers/gpu/drm/tegra/drm.h @@ -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; diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c index 0082468f703c..d19973945614 100644 --- a/drivers/gpu/drm/tegra/hdmi.c +++ b/drivers/gpu/drm/tegra/hdmi.c @@ -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; } diff --git a/drivers/gpu/drm/tegra/output.c b/drivers/gpu/drm/tegra/output.c index c662efc7e413..9c2b9dad55c3 100644 --- a/drivers/gpu/drm/tegra/output.c +++ b/drivers/gpu/drm/tegra/output.c @@ -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);