diff options
author | jilai wang <jilaiw@codeaurora.org> | 2015-04-10 23:15:59 +0300 |
---|---|---|
committer | Kumar Gala <galak@codeaurora.org> | 2015-05-28 18:47:45 +0300 |
commit | 9626b6993b2e6faf047d2d96958e8474edc9c7a5 (patch) | |
tree | 1d6522df22f58a37088f1942460b8779cebe2d2e /drivers/firmware/qcom_scm-32.c | |
parent | b6a1dfbc7d57409accf213e78db7b059c206be9e (diff) | |
download | linux-9626b6993b2e6faf047d2d96958e8474edc9c7a5.tar.xz |
firmware: qcom: scm: Add HDCP Support
HDCP driver needs to check if secure environment supports HDCP. If it's
supported, then it requires to program some registers through SCM.
Add qcom_scm_hdcp_available and qcom_scm_hdcp_req to support these
requirements.
Signed-off-by: Jilai Wang <jilaiw@codeaurora.org>
Signed-off-by: Kumar Gala <galak@codeaurora.org>
Diffstat (limited to 'drivers/firmware/qcom_scm-32.c')
-rw-r--r-- | drivers/firmware/qcom_scm-32.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/drivers/firmware/qcom_scm-32.c b/drivers/firmware/qcom_scm-32.c index b08b822ebafa..1bd6f9c34331 100644 --- a/drivers/firmware/qcom_scm-32.c +++ b/drivers/firmware/qcom_scm-32.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. +/* Copyright (c) 2010,2015, The Linux Foundation. All rights reserved. * Copyright (C) 2015 Linaro Ltd. * * This program is free software; you can redistribute it and/or modify @@ -478,3 +478,26 @@ void __qcom_scm_cpu_power_down(u32 flags) qcom_scm_call_atomic1(QCOM_SCM_SVC_BOOT, QCOM_SCM_CMD_TERMINATE_PC, flags & QCOM_SCM_FLUSH_FLAG_MASK); } + +int __qcom_scm_is_call_available(u32 svc_id, u32 cmd_id) +{ + int ret; + u32 svc_cmd = (svc_id << 10) | cmd_id; + u32 ret_val = 0; + + ret = qcom_scm_call(QCOM_SCM_SVC_INFO, QCOM_IS_CALL_AVAIL_CMD, &svc_cmd, + sizeof(svc_cmd), &ret_val, sizeof(ret_val)); + if (ret) + return ret; + + return ret_val; +} + +int __qcom_scm_hdcp_req(struct qcom_scm_hdcp_req *req, u32 req_cnt, u32 *resp) +{ + if (req_cnt > QCOM_SCM_HDCP_MAX_REQ_CNT) + return -ERANGE; + + return qcom_scm_call(QCOM_SCM_SVC_HDCP, QCOM_SCM_CMD_HDCP, + req, req_cnt * sizeof(*req), resp, sizeof(*resp)); +} |