mirror of
https://github.com/torvalds/linux.git
synced 2025-11-05 11:10:22 +02:00
drm/display: bridge-connector: hook in CEC notifier support
Allow HDMI DRM bridges to create CEC notifier. Physical address is handled automatically by drm_atomic_helper_connector_hdmi_hotplug() being called from .detect() path. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Reviewed-by: Maxime Ripard <mripard@kernel.org> Link: https://lore.kernel.org/r/20250517-drm-hdmi-connector-cec-v6-8-35651db6f19b@oss.qualcomm.com Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
This commit is contained in:
parent
603ce85427
commit
65a2575a68
2 changed files with 35 additions and 0 deletions
|
|
@ -20,6 +20,7 @@
|
||||||
#include <drm/drm_print.h>
|
#include <drm/drm_print.h>
|
||||||
#include <drm/drm_probe_helper.h>
|
#include <drm/drm_probe_helper.h>
|
||||||
#include <drm/display/drm_hdmi_audio_helper.h>
|
#include <drm/display/drm_hdmi_audio_helper.h>
|
||||||
|
#include <drm/display/drm_hdmi_cec_helper.h>
|
||||||
#include <drm/display/drm_hdmi_helper.h>
|
#include <drm/display/drm_hdmi_helper.h>
|
||||||
#include <drm/display/drm_hdmi_state_helper.h>
|
#include <drm/display/drm_hdmi_state_helper.h>
|
||||||
|
|
||||||
|
|
@ -113,6 +114,13 @@ struct drm_bridge_connector {
|
||||||
* &DRM_BRIDGE_OP_DP_AUDIO).
|
* &DRM_BRIDGE_OP_DP_AUDIO).
|
||||||
*/
|
*/
|
||||||
struct drm_bridge *bridge_dp_audio;
|
struct drm_bridge *bridge_dp_audio;
|
||||||
|
/**
|
||||||
|
* @bridge_hdmi_cec:
|
||||||
|
*
|
||||||
|
* The bridge in the chain that implements CEC support, if any (see
|
||||||
|
* DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER).
|
||||||
|
*/
|
||||||
|
struct drm_bridge *bridge_hdmi_cec;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define to_drm_bridge_connector(x) \
|
#define to_drm_bridge_connector(x) \
|
||||||
|
|
@ -662,6 +670,13 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
|
||||||
bridge_connector->bridge_dp_audio = bridge;
|
bridge_connector->bridge_dp_audio = bridge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bridge->ops & DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER) {
|
||||||
|
if (bridge_connector->bridge_hdmi_cec)
|
||||||
|
return ERR_PTR(-EBUSY);
|
||||||
|
|
||||||
|
bridge_connector->bridge_hdmi_cec = bridge;
|
||||||
|
}
|
||||||
|
|
||||||
if (!drm_bridge_get_next_bridge(bridge))
|
if (!drm_bridge_get_next_bridge(bridge))
|
||||||
connector_type = bridge->type;
|
connector_type = bridge->type;
|
||||||
|
|
||||||
|
|
@ -724,6 +739,15 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
|
||||||
return ERR_PTR(ret);
|
return ERR_PTR(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bridge_connector->bridge_hdmi_cec &&
|
||||||
|
bridge_connector->bridge_hdmi_cec->ops & DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER) {
|
||||||
|
ret = drmm_connector_hdmi_cec_notifier_register(connector,
|
||||||
|
NULL,
|
||||||
|
bridge->hdmi_cec_dev);
|
||||||
|
if (ret)
|
||||||
|
return ERR_PTR(ret);
|
||||||
|
}
|
||||||
|
|
||||||
drm_connector_helper_add(connector, &drm_bridge_connector_helper_funcs);
|
drm_connector_helper_add(connector, &drm_bridge_connector_helper_funcs);
|
||||||
|
|
||||||
if (bridge_connector->bridge_hpd)
|
if (bridge_connector->bridge_hpd)
|
||||||
|
|
|
||||||
|
|
@ -907,6 +907,11 @@ enum drm_bridge_ops {
|
||||||
* flag.
|
* flag.
|
||||||
*/
|
*/
|
||||||
DRM_BRIDGE_OP_DP_AUDIO = BIT(6),
|
DRM_BRIDGE_OP_DP_AUDIO = BIT(6),
|
||||||
|
/**
|
||||||
|
* @DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER: The bridge requires CEC notifier
|
||||||
|
* to be present.
|
||||||
|
*/
|
||||||
|
DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER = BIT(7),
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -1003,6 +1008,12 @@ struct drm_bridge {
|
||||||
*/
|
*/
|
||||||
unsigned int max_bpc;
|
unsigned int max_bpc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hdmi_cec_dev: device to be used as a containing device for CEC
|
||||||
|
* functions.
|
||||||
|
*/
|
||||||
|
struct device *hdmi_cec_dev;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hdmi_audio_dev: device to be used as a parent for the HDMI Codec if
|
* @hdmi_audio_dev: device to be used as a parent for the HDMI Codec if
|
||||||
* either of @DRM_BRIDGE_OP_HDMI_AUDIO or @DRM_BRIDGE_OP_DP_AUDIO is set.
|
* either of @DRM_BRIDGE_OP_HDMI_AUDIO or @DRM_BRIDGE_OP_DP_AUDIO is set.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue