Merge "drm/msm : add hdcp debugfs nodes for DRM HDMI driver"
This commit is contained in:
commit
0045ec6f11
3 changed files with 214 additions and 0 deletions
|
@ -372,6 +372,135 @@ static ssize_t _sde_hdmi_edid_vendor_name_read(struct file *file,
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t _sde_hdmi_src_hdcp14_support_read(struct file *file,
|
||||||
|
char __user *buff,
|
||||||
|
size_t count,
|
||||||
|
loff_t *ppos)
|
||||||
|
{
|
||||||
|
struct sde_hdmi *display = file->private_data;
|
||||||
|
char buf[SZ_128];
|
||||||
|
u32 len = 0;
|
||||||
|
|
||||||
|
if (!display)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (!display->ctrl.ctrl) {
|
||||||
|
SDE_ERROR("hdmi is NULL\n");
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDE_HDMI_DEBUG("%s +", __func__);
|
||||||
|
if (*ppos)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (display->hdcp14_present)
|
||||||
|
len += snprintf(buf, SZ_128 - len, "true\n");
|
||||||
|
else
|
||||||
|
len += snprintf(buf, SZ_128 - len, "false\n");
|
||||||
|
|
||||||
|
if (copy_to_user(buff, buf, len))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
*ppos += len;
|
||||||
|
SDE_HDMI_DEBUG("%s - ", __func__);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t _sde_hdmi_src_hdcp22_support_read(struct file *file,
|
||||||
|
char __user *buff,
|
||||||
|
size_t count,
|
||||||
|
loff_t *ppos)
|
||||||
|
{
|
||||||
|
struct sde_hdmi *display = file->private_data;
|
||||||
|
char buf[SZ_128];
|
||||||
|
u32 len = 0;
|
||||||
|
|
||||||
|
if (!display)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (!display->ctrl.ctrl) {
|
||||||
|
SDE_ERROR("hdmi is NULL\n");
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDE_HDMI_DEBUG("%s +", __func__);
|
||||||
|
if (*ppos)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (display->src_hdcp22_support)
|
||||||
|
len += snprintf(buf, SZ_128 - len, "true\n");
|
||||||
|
else
|
||||||
|
len += snprintf(buf, SZ_128 - len, "false\n");
|
||||||
|
|
||||||
|
if (copy_to_user(buff, buf, len))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
*ppos += len;
|
||||||
|
SDE_HDMI_DEBUG("%s - ", __func__);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t _sde_hdmi_sink_hdcp22_support_read(struct file *file,
|
||||||
|
char __user *buff,
|
||||||
|
size_t count,
|
||||||
|
loff_t *ppos)
|
||||||
|
{
|
||||||
|
struct sde_hdmi *display = file->private_data;
|
||||||
|
char buf[SZ_128];
|
||||||
|
u32 len = 0;
|
||||||
|
|
||||||
|
if (!display)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (!display->ctrl.ctrl) {
|
||||||
|
SDE_ERROR("hdmi is NULL\n");
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDE_HDMI_DEBUG("%s +", __func__);
|
||||||
|
if (*ppos)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (display->sink_hdcp22_support)
|
||||||
|
len += snprintf(buf, SZ_128 - len, "true\n");
|
||||||
|
else
|
||||||
|
len += snprintf(buf, SZ_128 - len, "false\n");
|
||||||
|
|
||||||
|
if (copy_to_user(buff, buf, len))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
*ppos += len;
|
||||||
|
SDE_HDMI_DEBUG("%s - ", __func__);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t _sde_hdmi_hdcp_state_read(struct file *file,
|
||||||
|
char __user *buff,
|
||||||
|
size_t count,
|
||||||
|
loff_t *ppos)
|
||||||
|
{
|
||||||
|
struct sde_hdmi *display = file->private_data;
|
||||||
|
char buf[SZ_128];
|
||||||
|
u32 len = 0;
|
||||||
|
|
||||||
|
if (!display)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
SDE_HDMI_DEBUG("%s +", __func__);
|
||||||
|
if (*ppos)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
len += snprintf(buf, SZ_128 - len, "HDCP state : %s\n",
|
||||||
|
sde_hdcp_state_name(display->hdcp_status));
|
||||||
|
|
||||||
|
if (copy_to_user(buff, buf, len))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
*ppos += len;
|
||||||
|
SDE_HDMI_DEBUG("%s - ", __func__);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct file_operations dump_info_fops = {
|
static const struct file_operations dump_info_fops = {
|
||||||
.open = simple_open,
|
.open = simple_open,
|
||||||
.read = _sde_hdmi_debugfs_dump_info_read,
|
.read = _sde_hdmi_debugfs_dump_info_read,
|
||||||
|
@ -407,6 +536,26 @@ static const struct file_operations edid_vendor_name_fops = {
|
||||||
.read = _sde_hdmi_edid_vendor_name_read,
|
.read = _sde_hdmi_edid_vendor_name_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct file_operations hdcp_src_14_support_fops = {
|
||||||
|
.open = simple_open,
|
||||||
|
.read = _sde_hdmi_src_hdcp14_support_read,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct file_operations hdcp_src_22_support_fops = {
|
||||||
|
.open = simple_open,
|
||||||
|
.read = _sde_hdmi_src_hdcp22_support_read,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct file_operations hdcp_sink_22_support_fops = {
|
||||||
|
.open = simple_open,
|
||||||
|
.read = _sde_hdmi_sink_hdcp22_support_read,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct file_operations sde_hdmi_hdcp_state_fops = {
|
||||||
|
.open = simple_open,
|
||||||
|
.read = _sde_hdmi_hdcp_state_read,
|
||||||
|
};
|
||||||
|
|
||||||
static u64 _sde_hdmi_clip_valid_pclk(struct drm_display_mode *mode, u64 pclk_in)
|
static u64 _sde_hdmi_clip_valid_pclk(struct drm_display_mode *mode, u64 pclk_in)
|
||||||
{
|
{
|
||||||
u32 pclk_delta, pclk;
|
u32 pclk_delta, pclk;
|
||||||
|
@ -624,6 +773,8 @@ static int _sde_hdmi_debugfs_init(struct sde_hdmi *display)
|
||||||
struct dentry *dir, *dump_file, *edid_modes;
|
struct dentry *dir, *dump_file, *edid_modes;
|
||||||
struct dentry *edid_vsdb_info, *edid_hdr_info, *edid_hfvsdb_info;
|
struct dentry *edid_vsdb_info, *edid_hdr_info, *edid_hfvsdb_info;
|
||||||
struct dentry *edid_vcdb_info, *edid_vendor_name, *pll_file;
|
struct dentry *edid_vcdb_info, *edid_vendor_name, *pll_file;
|
||||||
|
struct dentry *src_hdcp14_support, *src_hdcp22_support;
|
||||||
|
struct dentry *sink_hdcp22_support, *hdmi_hdcp_state;
|
||||||
|
|
||||||
dir = debugfs_create_dir(display->name, NULL);
|
dir = debugfs_create_dir(display->name, NULL);
|
||||||
if (!dir) {
|
if (!dir) {
|
||||||
|
@ -734,6 +885,58 @@ static int _sde_hdmi_debugfs_init(struct sde_hdmi *display)
|
||||||
goto error_remove_dir;
|
goto error_remove_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
src_hdcp14_support = debugfs_create_file("src_hdcp14_support",
|
||||||
|
0444,
|
||||||
|
dir,
|
||||||
|
display,
|
||||||
|
&hdcp_src_14_support_fops);
|
||||||
|
|
||||||
|
if (IS_ERR_OR_NULL(src_hdcp14_support)) {
|
||||||
|
rc = PTR_ERR(src_hdcp14_support);
|
||||||
|
SDE_ERROR("[%s]debugfs create file failed, rc=%d\n",
|
||||||
|
display->name, rc);
|
||||||
|
goto error_remove_dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
src_hdcp22_support = debugfs_create_file("src_hdcp22_support",
|
||||||
|
0444,
|
||||||
|
dir,
|
||||||
|
display,
|
||||||
|
&hdcp_src_22_support_fops);
|
||||||
|
|
||||||
|
if (IS_ERR_OR_NULL(src_hdcp22_support)) {
|
||||||
|
rc = PTR_ERR(src_hdcp22_support);
|
||||||
|
SDE_ERROR("[%s]debugfs create file failed, rc=%d\n",
|
||||||
|
display->name, rc);
|
||||||
|
goto error_remove_dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
sink_hdcp22_support = debugfs_create_file("sink_hdcp22_support",
|
||||||
|
0444,
|
||||||
|
dir,
|
||||||
|
display,
|
||||||
|
&hdcp_sink_22_support_fops);
|
||||||
|
|
||||||
|
if (IS_ERR_OR_NULL(sink_hdcp22_support)) {
|
||||||
|
rc = PTR_ERR(sink_hdcp22_support);
|
||||||
|
SDE_ERROR("[%s]debugfs create file failed, rc=%d\n",
|
||||||
|
display->name, rc);
|
||||||
|
goto error_remove_dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
hdmi_hdcp_state = debugfs_create_file("hdmi_hdcp_state",
|
||||||
|
0444,
|
||||||
|
dir,
|
||||||
|
display,
|
||||||
|
&sde_hdmi_hdcp_state_fops);
|
||||||
|
|
||||||
|
if (IS_ERR_OR_NULL(hdmi_hdcp_state)) {
|
||||||
|
rc = PTR_ERR(hdmi_hdcp_state);
|
||||||
|
SDE_ERROR("[%s]debugfs create file failed, rc=%d\n",
|
||||||
|
display->name, rc);
|
||||||
|
goto error_remove_dir;
|
||||||
|
}
|
||||||
|
|
||||||
display->root = dir;
|
display->root = dir;
|
||||||
return rc;
|
return rc;
|
||||||
error_remove_dir:
|
error_remove_dir:
|
||||||
|
|
|
@ -142,6 +142,9 @@ struct sde_hdmi {
|
||||||
u8 hdcp_status;
|
u8 hdcp_status;
|
||||||
u32 enc_lvl;
|
u32 enc_lvl;
|
||||||
bool auth_state;
|
bool auth_state;
|
||||||
|
bool sink_hdcp22_support;
|
||||||
|
bool src_hdcp22_support;
|
||||||
|
|
||||||
/*hold final data
|
/*hold final data
|
||||||
*based on hdcp support
|
*based on hdcp support
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -385,11 +385,19 @@ static void sde_hdmi_update_hdcp_info(struct drm_connector *connector)
|
||||||
if (fd)
|
if (fd)
|
||||||
ops = sde_hdmi_hdcp2p2_start(fd);
|
ops = sde_hdmi_hdcp2p2_start(fd);
|
||||||
|
|
||||||
|
/* If ops is true, sink supports hdcp */
|
||||||
|
if (ops)
|
||||||
|
display->sink_hdcp22_support = true;
|
||||||
|
|
||||||
if (ops && ops->feature_supported)
|
if (ops && ops->feature_supported)
|
||||||
display->hdcp22_present = ops->feature_supported(fd);
|
display->hdcp22_present = ops->feature_supported(fd);
|
||||||
else
|
else
|
||||||
display->hdcp22_present = false;
|
display->hdcp22_present = false;
|
||||||
|
|
||||||
|
/* if hdcp22_present is true, src supports hdcp 2p2 */
|
||||||
|
if (display->hdcp22_present)
|
||||||
|
display->src_hdcp22_support = true;
|
||||||
|
|
||||||
if (!display->hdcp22_present) {
|
if (!display->hdcp22_present) {
|
||||||
if (display->hdcp1_use_sw_keys) {
|
if (display->hdcp1_use_sw_keys) {
|
||||||
display->hdcp14_present =
|
display->hdcp14_present =
|
||||||
|
|
Loading…
Add table
Reference in a new issue