[media] sti: hdmi: add CEC notifier support
Implement the CEC notifier support to allow CEC drivers to be informed when there is a new physical address. Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
Родитель
e3a93adcc4
Коммит
bca55958ea
|
@ -771,6 +771,8 @@ static void sti_hdmi_disable(struct drm_bridge *bridge)
|
|||
clk_disable_unprepare(hdmi->clk_pix);
|
||||
|
||||
hdmi->enabled = false;
|
||||
|
||||
cec_notifier_set_phys_addr(hdmi->notifier, CEC_PHYS_ADDR_INVALID);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -973,6 +975,7 @@ static int sti_hdmi_connector_get_modes(struct drm_connector *connector)
|
|||
DRM_DEBUG_KMS("%s : %dx%d cm\n",
|
||||
(hdmi->hdmi_monitor ? "hdmi monitor" : "dvi monitor"),
|
||||
edid->width_cm, edid->height_cm);
|
||||
cec_notifier_set_phys_addr_from_edid(hdmi->notifier, edid);
|
||||
|
||||
count = drm_add_edid_modes(connector, edid);
|
||||
drm_mode_connector_update_edid_property(connector, edid);
|
||||
|
@ -1035,6 +1038,7 @@ sti_hdmi_connector_detect(struct drm_connector *connector, bool force)
|
|||
}
|
||||
|
||||
DRM_DEBUG_DRIVER("hdmi cable disconnected\n");
|
||||
cec_notifier_set_phys_addr(hdmi->notifier, CEC_PHYS_ADDR_INVALID);
|
||||
return connector_status_disconnected;
|
||||
}
|
||||
|
||||
|
@ -1423,6 +1427,10 @@ 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))
|
||||
|
@ -1442,11 +1450,14 @@ 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;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <media/cec-notifier.h>
|
||||
|
||||
#define HDMI_STA 0x0010
|
||||
#define HDMI_STA_DLL_LCK BIT(5)
|
||||
|
@ -64,6 +65,7 @@ static const struct drm_prop_enum_list colorspace_mode_names[] = {
|
|||
* @audio_pdev: ASoC hdmi-codec platform device
|
||||
* @audio: hdmi audio parameters.
|
||||
* @drm_connector: hdmi connector
|
||||
* @notifier: hotplug detect notifier
|
||||
*/
|
||||
struct sti_hdmi {
|
||||
struct device dev;
|
||||
|
@ -89,6 +91,7 @@ struct sti_hdmi {
|
|||
struct platform_device *audio_pdev;
|
||||
struct hdmi_audio_params audio;
|
||||
struct drm_connector *drm_connector;
|
||||
struct cec_notifier *notifier;
|
||||
};
|
||||
|
||||
u32 hdmi_read(struct sti_hdmi *hdmi, int offset);
|
||||
|
|
Загрузка…
Ссылка в новой задаче