Le jeu. 22 août 2019 à 10:11, Hans Verkuil hverkuil-cisco@xs4all.nl a écrit :
Adding Benjamin Gaignard.
Benjamin, can you take a look at this and Ack it (or merge it if you prefer) and ideally test it as well. This is the only patch in this series that I could not test since I don't have any hardware.
Looks good for me.
Applied on drm-misc-next, Thanks, Benjamin
Regards,
Hans
On 8/14/19 12:45 PM, Dariusz Marcinkiewicz wrote:
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.
Changes since v2: Don't invalidate physical address before unregistering the notifier.
Signed-off-by: Dariusz Marcinkiewicz darekm@google.com
drivers/gpu/drm/sti/sti_hdmi.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c index 9862c322f0c4a..bd15902b825ad 100644 --- a/drivers/gpu/drm/sti/sti_hdmi.c +++ b/drivers/gpu/drm/sti/sti_hdmi.c @@ -1256,6 +1256,7 @@ static int sti_hdmi_bind(struct device *dev, struct device *master, void *data) struct drm_device *drm_dev = data; struct drm_encoder *encoder; struct sti_hdmi_connector *connector;
struct cec_connector_info conn_info; struct drm_connector *drm_connector; struct drm_bridge *bridge; int err;
@@ -1318,6 +1319,14 @@ static int sti_hdmi_bind(struct device *dev, struct device *master, void *data) goto err_sysfs; }
cec_fill_conn_info_from_drm(&conn_info, drm_connector);
hdmi->notifier = cec_notifier_conn_register(&hdmi->dev, NULL,
&conn_info);
if (!hdmi->notifier) {
hdmi->drm_connector = NULL;
return -ENOMEM;
}
/* Enable default interrupts */ hdmi_write(hdmi, HDMI_DEFAULT_INT, HDMI_INT_EN);
@@ -1331,6 +1340,9 @@ static int sti_hdmi_bind(struct device *dev, struct device *master, void *data) static void sti_hdmi_unbind(struct device *dev, struct device *master, void *data) {
struct sti_hdmi *hdmi = dev_get_drvdata(dev);
cec_notifier_conn_unregister(hdmi->notifier);
}
static const struct component_ops sti_hdmi_ops = { @@ -1436,10 +1448,6 @@ static int sti_hdmi_probe(struct platform_device *pdev) goto release_adapter; }
hdmi->notifier = cec_notifier_get(&pdev->dev);
if (!hdmi->notifier)
goto release_adapter;
hdmi->reset = devm_reset_control_get(dev, "hdmi"); /* Take hdmi out of reset */ if (!IS_ERR(hdmi->reset))
@@ -1459,14 +1467,11 @@ static int sti_hdmi_remove(struct platform_device *pdev) { struct sti_hdmi *hdmi = dev_get_drvdata(&pdev->dev);
cec_notifier_set_phys_addr(hdmi->notifier, CEC_PHYS_ADDR_INVALID);
i2c_put_adapter(hdmi->ddc_adapt); if (hdmi->audio_pdev) platform_device_unregister(hdmi->audio_pdev); component_del(&pdev->dev, &sti_hdmi_ops);
cec_notifier_put(hdmi->notifier); return 0;
}