summaryrefslogtreecommitdiff
path: root/drivers/misc/hdcp.c
diff options
context:
space:
mode:
authorAjay Singh Parmar <aparmar@codeaurora.org>2015-10-08 14:37:52 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:46:30 -0700
commit7f60965397e5eb2516a47aa0c6311e0e4e7968b9 (patch)
treea2a1247dc5cce466e2bb2060d65148dfd93f4ac9 /drivers/misc/hdcp.c
parent233a722f7f0626c85477d040c63f34afc2ae5369 (diff)
msm: mdss: hdmi: load hdcp1.x app only at bootup
Do not load hdcp1.x app at runtime and keep the app status for future use. Whenever cable is connected and hdcp 1.x needs to be started, just set keys using app. This avoids any possible app load - unload issues in some corner cases. Change-Id: Ic7f55ab74d6cb6b9ff654eb32c0bed8a44f70007 Signed-off-by: Ajay Singh Parmar <aparmar@codeaurora.org>
Diffstat (limited to 'drivers/misc/hdcp.c')
-rw-r--r--drivers/misc/hdcp.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/drivers/misc/hdcp.c b/drivers/misc/hdcp.c
index f19f8425c237..74449d8186d9 100644
--- a/drivers/misc/hdcp.c
+++ b/drivers/misc/hdcp.c
@@ -365,6 +365,9 @@ struct hdcp_lib_message_map {
const char *msg_name;
};
+static struct qseecom_handle *hdcp1_handle;
+static bool hdcp1_supported = true;
+
static const char *hdcp_lib_message_name(int msg_id)
{
/*
@@ -1168,24 +1171,35 @@ static void hdcp_lib_topology_work(struct kthread_work *work)
}
}
+bool hdcp1_check_if_supported_load_app(void)
+{
+ int rc = 0;
+
+ /* start hdcp1 app */
+ if (hdcp1_supported && !hdcp1_handle) {
+ rc = qseecom_start_app(&hdcp1_handle, HDCP1_APP_NAME,
+ QSEECOM_SBUFF_SIZE);
+ if (rc) {
+ pr_err("qseecom_start_app failed %d\n", rc);
+ hdcp1_supported = false;
+ }
+ }
+
+ return hdcp1_supported;
+}
+
/* APIs exposed to all clients */
int hdcp1_set_keys(uint32_t *aksv_msb, uint32_t *aksv_lsb)
{
int rc = 0;
struct hdcp1_key_set_req *key_set_req;
struct hdcp1_key_set_rsp *key_set_rsp;
- struct qseecom_handle *hdcp1_handle = NULL;
if (aksv_msb == NULL || aksv_lsb == NULL)
return -EINVAL;
- /* start hdcp1 app */
- rc = qseecom_start_app(&hdcp1_handle, HDCP1_APP_NAME,
- QSEECOM_SBUFF_SIZE);
- if (rc) {
- pr_err("qseecom_start_app failed %d\n", rc);
- return -ENOSYS;
- }
+ if (!hdcp1_supported || !hdcp1_handle)
+ return -EINVAL;
/* set keys and request aksv */
key_set_req = (struct hdcp1_key_set_req *)hdcp1_handle->sbuf;