@@ -30,6 +30,46 @@
#include <drm/drm_hdcp.h>
#include <drm/drm_dp_helper.h>
+/*
+ * drm_hdcp_update_change:
+ * Updating the HDCP property val along with uevent
+ *
+ * @hdcp: ptr to hdcp instance
+ * @enabled: status of HDCP encryption
+ * @status: Error status bits, if auth failed.
+ * @mute: uevent is mute or not
+ */
+static void drm_hdcp_update_change(struct drm_hdcp *hdcp, bool enabled,
+ uint64_t status, bool mute)
+{
+ struct drm_connector *connector = hdcp->connector;
+ char event_str[30];
+ uint64_t temp_state;
+
+ /* Mutex has to be acquired before entering this function */
+ WARN_ON(!mutex_is_locked(&hdcp->mutex));
+ temp_state = connector->hdcp_state;
+
+ if (enabled) {
+ temp_state &= ~(DRM_HDCP_ENABLE | DRM_HDCP_TYPE_MASK
+ | DRM_HDCP_STATUS_MASK);
+ temp_state |= hdcp->req_state;
+ } else {
+ temp_state &= DRM_HDCP_VER_SUPPORT_MASK;
+ temp_state |= (status & DRM_HDCP_STATUS_MASK);
+ }
+
+ connector->hdcp_state = temp_state;
+
+ if (!mute) {
+ sprintf(event_str, "HDCP=0x%llx", connector->hdcp_state);
+
+ /* Generating the uevent with custom string */
+ drm_sysfs_generate_uevent(hdcp->connector->dev, event_str);
+ }
+}
+
+
int drm_hdcp_enable(struct drm_connector *connector, uint8_t stream_type)
{
struct drm_hdcp *hdcp = connector->hdcp;
@@ -163,6 +163,9 @@ struct drm_hdcp {
#define DRM_HDCP_TYPE_SHIFT 4
#define DRM_HDCP_TYPE_MASK (0xFFULL<<DRM_HDCP_TYPE_SHIFT)
+#define DRM_HDCP_STATUS_SHIFT 20
+#define DRM_HDCP_STATUS_MASK (0xFULL<<DRM_HDCP_STATUS_SHIFT)
+
/* Functions exported */
extern int drm_hdcp_init(struct drm_connector *connector,
struct drm_hdcp *hdcp,
Implemented drm_hdcp_update_change() for updating the current status to the hdcp_property value. This will update the error status flag incase of encryption failure. Whenever there is a HDCP state change KOBJ_UEVENT will be broadcasted to notify the awaiting userspace consumers. Signed-off-by: Ramalingam C <ramalingam.c@intel.com> --- drivers/gpu/drm/drm_hdcp.c | 40 ++++++++++++++++++++++++++++++++++++++++ include/drm/drm_hdcp.h | 3 +++ 2 files changed, 43 insertions(+)