diff options
author | Clarence Ip <cip@codeaurora.org> | 2016-02-24 17:43:49 -0500 |
---|---|---|
committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:41:08 -0700 |
commit | 443821f90fb716e92f6ce1071f7a91f6bc99fa81 (patch) | |
tree | 94da28452c94b588ecfd8d45edbfdf83a62a08c3 | |
parent | bb3b53e9a7d2c73c1dad0e90540db5776aa9811e (diff) |
msm: mdss: add panel parameters to debugfs
Export panel properties in debugfs nodes. Panel property values
can be get and set by reading and writing debugfs nodes, which
helps panel bring up and debug instead of changing dtsi files.
Change-Id: I2c658c4bf2a0f0c0713df0ab8898380227f0a03b
Signed-off-by: Xu Yang <yangxu@codeaurora.org>
[cip@codeaurora.org: Resolved merge conflicts,
remove u32 typecast for debugfs_create_bool]
Signed-off-by: Clarence Ip <cip@codeaurora.org>
-rw-r--r-- | drivers/video/fbdev/msm/mdss_panel.c | 459 | ||||
-rw-r--r-- | drivers/video/fbdev/msm/mdss_panel.h | 6 |
2 files changed, 407 insertions, 58 deletions
diff --git a/drivers/video/fbdev/msm/mdss_panel.c b/drivers/video/fbdev/msm/mdss_panel.c index 109058014893..afac91a35bc9 100644 --- a/drivers/video/fbdev/msm/mdss_panel.c +++ b/drivers/video/fbdev/msm/mdss_panel.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, The Linux Foundation. All rights reserved. +/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -17,6 +17,7 @@ #include <linux/debugfs.h> #include <linux/slab.h> #include <linux/fb.h> +#include <linux/uaccess.h> #include "mdss_panel.h" @@ -26,6 +27,7 @@ int mdss_panel_debugfs_fbc_setup(struct mdss_panel_debugfs_info *debugfs_info, struct mdss_panel_info *panel_info, struct dentry *parent) { struct dentry *fbc_root; + struct fbc_panel_info *fbc = &debugfs_info->panel_info.fbc; fbc_root = debugfs_create_dir("fbc", parent); if (IS_ERR_OR_NULL(fbc_root)) { @@ -35,48 +37,391 @@ int mdss_panel_debugfs_fbc_setup(struct mdss_panel_debugfs_info *debugfs_info, } debugfs_create_u32("enable", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.enabled); + (u32 *)&fbc->enabled); debugfs_create_u32("bpp", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.target_bpp); + (u32 *)&fbc->target_bpp); debugfs_create_u32("packing", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.comp_mode); + (u32 *)&fbc->comp_mode); debugfs_create_u32("quant_err", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.qerr_enable); + (u32 *)&fbc->qerr_enable); debugfs_create_u32("bias", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.cd_bias); + (u32 *)&fbc->cd_bias); debugfs_create_u32("pat_mode", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.pat_enable); + (u32 *)&fbc->pat_enable); debugfs_create_u32("vlc_mode", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.vlc_enable); + (u32 *)&fbc->vlc_enable); debugfs_create_u32("bflc_mode", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.bflc_enable); + (u32 *)&fbc->bflc_enable); debugfs_create_u32("hline_budget", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.line_x_budget); + (u32 *)&fbc->line_x_budget); debugfs_create_u32("budget_ctrl", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.block_x_budget); + (u32 *)&fbc->block_x_budget); debugfs_create_u32("block_budget", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.block_budget); + (u32 *)&fbc->block_budget); debugfs_create_u32("lossless_thd", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.lossless_mode_thd); + (u32 *)&fbc->lossless_mode_thd); debugfs_create_u32("lossy_thd", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.lossy_mode_thd); + (u32 *)&fbc->lossy_mode_thd); debugfs_create_u32("rgb_thd", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.lossy_rgb_thd); + (u32 *)&fbc->lossy_rgb_thd); debugfs_create_u32("lossy_mode_idx", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.lossy_mode_idx); + (u32 *)&fbc->lossy_mode_idx); debugfs_create_u32("slice_height", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.slice_height); + (u32 *)&fbc->slice_height); debugfs_create_u32("pred_mode", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.pred_mode); + (u32 *)&fbc->pred_mode); debugfs_create_u32("enc_mode", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.enc_mode); + (u32 *)&fbc->enc_mode); debugfs_create_u32("max_pred_err", 0644, fbc_root, - (u32 *)&debugfs_info->fbc.max_pred_err); + (u32 *)&fbc->max_pred_err); - debugfs_info->fbc = panel_info->fbc; + debugfs_info->panel_info.fbc = panel_info->fbc; return 0; +} + +struct array_data { + void *array; + u32 elements; + size_t size; /* size of each data in array */ +}; + +static int panel_debugfs_array_open(struct inode *inode, struct file *file) +{ + file->private_data = inode->i_private; + return nonseekable_open(inode, file); +} + +static ssize_t panel_debugfs_array_read(struct file *file, char __user *buf, + size_t len, loff_t *ppos) +{ + char *buffer, *bufp; + int buf_size; + struct array_data *data = file->private_data; + int i = 0, elements = data->elements; + ssize_t ret = 0; + + /* + * Max size: + * - 10 digits ("0x" + 8 digits value) + ' '/'\n' = 11 bytes per number + * - terminating NUL character + */ + buf_size = elements*11 + 1; + buffer = kmalloc(buf_size, GFP_KERNEL); + if (!buffer) + return -ENOMEM; + + bufp = buffer; + while (i < elements) { + char term = (i < elements-1) ? ' ' : '\n'; + + if (data->size == sizeof(u8)) { + u8 *array = (u8 *)data->array; + bufp += snprintf(bufp, buf_size-(bufp-buffer), + "0x%02x%c", array[i], term); + } else if (data->size == sizeof(u16)) { + u16 *array = (u16 *)data->array; + bufp += snprintf(bufp, buf_size-(bufp-buffer), + "0x%02x%c", array[i], term); + } else { + u32 *array = (u32 *)data->array; + bufp += snprintf(bufp, buf_size-(bufp-buffer), + "0x%02x%c", array[i], term); + } + i++; + } + *bufp = '\0'; + ret = simple_read_from_buffer(buf, len, ppos, + buffer, bufp-buffer); + + kfree(buffer); + return ret; +} + +static ssize_t panel_debugfs_array_write(struct file *file, + const char __user *p, size_t count, loff_t *ppos) +{ + struct array_data *data = file->private_data; + char *buffer, *bufp; + int buf_size; + ssize_t res; + int i = 0, elements = data->elements; + + /* + * Max size: + * - 10 digits ("0x" + 8 digits value) + ' '/'\n' = 11 bytes per number + * - terminating NUL character + */ + buf_size = elements*11 + 1; + buffer = kmalloc(buf_size, GFP_KERNEL); + if (!buffer) { + pr_err("Failed to allocate memory\n"); + return -ENOMEM; + } + res = simple_write_to_buffer(buffer, buf_size, ppos, p, count); + if (res) + *ppos += res; + buffer[buf_size-1] = '\0'; + bufp = buffer; + + while (i < elements) { + uint32_t value = 0; + int step = 0; + if (sscanf(bufp, "%x%n", &value, &step) > 0) { + if (data->size == sizeof(u8)) { + u8 *array = (u8 *)data->array; + *(array+i) = (u8)value; + } else if (data->size == sizeof(u16)) { + u16 *array = (u16 *)data->array; + *(array+i) = (u16)value; + } else { + u32 *array = (u32 *)data->array; + *(array+i) = (u32)value; + } + bufp += step; + } + i++; + } + kfree(buffer); + return res; +} + +static const struct file_operations panel_debugfs_array_fops = { + .owner = THIS_MODULE, + .open = panel_debugfs_array_open, + .read = panel_debugfs_array_read, + .write = panel_debugfs_array_write, +}; + +struct dentry *panel_debugfs_create_array(const char *name, umode_t mode, + struct dentry *parent, + void *array, size_t size, u32 elements) +{ + struct array_data *data = kmalloc(sizeof(*data), GFP_KERNEL); + + if (data == NULL) { + pr_err("Failed to allocate memory\n"); + return NULL; + } + + /* only support integer of 3 kinds of length format */ + if ((size != sizeof(u8)) && + (size != sizeof(u16)) && + (size != sizeof(u32))) { + pr_warn("Value size %zu bytes is not supported\n", size); + return NULL; + } + + data->array = array; + data->size = size; + data->elements = elements; + + return debugfs_create_file(name, mode, parent, data, + &panel_debugfs_array_fops); +} + +#define DEBUGFS_CREATE_ARRAY(name, node, array) \ + panel_debugfs_create_array(name, 0644, node, array, \ + sizeof(array[0]), ARRAY_SIZE(array)) + +static int _create_phy_ctrl_nodes(struct mdss_panel_debugfs_info *debugfs_info, + struct dentry *node) { + + struct mdss_panel_info *pinfo = &debugfs_info->panel_info; + struct dentry *phy_node; + + phy_node = debugfs_create_dir("dsi_phy_ctrl", node); + if (IS_ERR_OR_NULL(phy_node)) { + pr_err("Debugfs create phy ctrl node failed with error: %ld\n", + PTR_ERR(phy_node)); + return -ENODEV; + } + + DEBUGFS_CREATE_ARRAY("regulator", phy_node, + pinfo->mipi.dsi_phy_db.regulator); + DEBUGFS_CREATE_ARRAY("strength", phy_node, + pinfo->mipi.dsi_phy_db.strength); + DEBUGFS_CREATE_ARRAY("bistctrl", phy_node, + pinfo->mipi.dsi_phy_db.bistctrl); + DEBUGFS_CREATE_ARRAY("lanecfg", phy_node, + pinfo->mipi.dsi_phy_db.lanecfg); + DEBUGFS_CREATE_ARRAY("timing", phy_node, + pinfo->mipi.dsi_phy_db.timing); + + return 0; +} + +static int _create_dsi_panel_nodes(struct mdss_panel_debugfs_info *dfs, + struct dentry *parent) +{ + struct dentry *lcdc_root, *mipi_root, *te_root; + struct mdss_panel_info *pinfo = &dfs->panel_info; + + lcdc_root = debugfs_create_dir("lcdc", parent); + if (IS_ERR_OR_NULL(lcdc_root)) { + pr_err("Debugfs create lcdc dir failed with error: %ld\n", + PTR_ERR(lcdc_root)); + return -ENODEV; + } + mipi_root = debugfs_create_dir("mipi", parent); + if (IS_ERR_OR_NULL(mipi_root)) { + pr_err("Debugfs create mipi dir failed with error: %ld\n", + PTR_ERR(mipi_root)); + return -ENODEV; + } + te_root = debugfs_create_dir("te", parent); + if (IS_ERR_OR_NULL(te_root)) { + pr_err("Debugfs create te check dir failed with error: %ld\n", + PTR_ERR(te_root)); + return -ENODEV; + } + + debugfs_create_u32("partial_update_enabled", 0644, dfs->root, + (u32 *)&pinfo->partial_update_enabled); + debugfs_create_u32("partial_update_roi_merge", 0644, dfs->root, + (u32 *)&pinfo->partial_update_roi_merge); + debugfs_create_u32("dcs_cmd_by_left", 0644, dfs->root, + (u32 *)&pinfo->dcs_cmd_by_left); + debugfs_create_bool("ulps_feature_enabled", 0644, dfs->root, + &pinfo->ulps_feature_enabled); + debugfs_create_bool("ulps_suspend_enabled", 0644, dfs->root, + &pinfo->ulps_suspend_enabled); + debugfs_create_bool("esd_check_enabled", 0644, dfs->root, + &pinfo->esd_check_enabled); + debugfs_create_bool("panel_ack_disabled", 0644, dfs->root, + &pinfo->panel_ack_disabled); + + debugfs_create_u32("hsync_skew", 0644, lcdc_root, + (u32 *)&pinfo->lcdc.hsync_skew); + debugfs_create_u32("underflow_clr", 0644, lcdc_root, + (u32 *)&pinfo->lcdc.underflow_clr); + debugfs_create_u32("border_clr", 0644, lcdc_root, + (u32 *)&pinfo->lcdc.border_clr); + debugfs_create_u32("h_back_porch", 0644, lcdc_root, + (u32 *)&pinfo->lcdc.h_back_porch); + debugfs_create_u32("h_front_porch", 0644, lcdc_root, + (u32 *)&pinfo->lcdc.h_front_porch); + debugfs_create_u32("h_pulse_width", 0644, lcdc_root, + (u32 *)&pinfo->lcdc.h_pulse_width); + debugfs_create_u32("v_back_porch", 0644, lcdc_root, + (u32 *)&pinfo->lcdc.v_back_porch); + debugfs_create_u32("v_front_porch", 0644, lcdc_root, + (u32 *)&pinfo->lcdc.v_front_porch); + debugfs_create_u32("v_pulse_width", 0644, lcdc_root, + (u32 *)&pinfo->lcdc.v_pulse_width); + + /* Create mipi related nodes */ + debugfs_create_u8("frame_rate", 0644, mipi_root, + (char *)&pinfo->mipi.frame_rate); + debugfs_create_u8("hfp_power_stop", 0644, mipi_root, + (char *)&pinfo->mipi.hfp_power_stop); + debugfs_create_u8("hsa_power_stop", 0644, mipi_root, + (char *)&pinfo->mipi.hsa_power_stop); + debugfs_create_u8("hbp_power_stop", 0644, mipi_root, + (char *)&pinfo->mipi.hbp_power_stop); + debugfs_create_u8("last_line_interleave_en", 0644, mipi_root, + (char *)&pinfo->mipi.last_line_interleave_en); + debugfs_create_u8("bllp_power_stop", 0644, mipi_root, + (char *)&pinfo->mipi.bllp_power_stop); + debugfs_create_u8("eof_bllp_power_stop", 0644, mipi_root, + (char *)&pinfo->mipi.eof_bllp_power_stop); + debugfs_create_u8("data_lane0", 0644, mipi_root, + (char *)&pinfo->mipi.data_lane0); + debugfs_create_u8("data_lane1", 0644, mipi_root, + (char *)&pinfo->mipi.data_lane1); + debugfs_create_u8("data_lane2", 0644, mipi_root, + (char *)&pinfo->mipi.data_lane2); + debugfs_create_u8("data_lane3", 0644, mipi_root, + (char *)&pinfo->mipi.data_lane3); + debugfs_create_u8("t_clk_pre", 0644, mipi_root, + (char *)&pinfo->mipi.t_clk_pre); + debugfs_create_u8("t_clk_post", 0644, mipi_root, + (char *)&pinfo->mipi.t_clk_post); + debugfs_create_u8("stream", 0644, mipi_root, + (char *)&pinfo->mipi.stream); + debugfs_create_u8("interleave_mode", 0644, mipi_root, + (char *)&pinfo->mipi.interleave_mode); + debugfs_create_u8("vsync_enable", 0644, mipi_root, + (char *)&pinfo->mipi.vsync_enable); + debugfs_create_u8("hw_vsync_mode", 0644, mipi_root, + (char *)&pinfo->mipi.hw_vsync_mode); + debugfs_create_u8("te_sel", 0644, mipi_root, + (char *)&pinfo->mipi.te_sel); + debugfs_create_u8("insert_dcs_cmd", 0644, mipi_root, + (char *)&pinfo->mipi.insert_dcs_cmd); + debugfs_create_u8("wr_mem_start", 0644, mipi_root, + (char *)&pinfo->mipi.wr_mem_start); + debugfs_create_u8("wr_mem_continue", 0644, mipi_root, + (char *)&pinfo->mipi.wr_mem_continue); + debugfs_create_u8("pulse_mode_hsa_he", 0644, mipi_root, + (char *)&pinfo->mipi.pulse_mode_hsa_he); + debugfs_create_u8("vc", 0644, mipi_root, (char *)&pinfo->mipi.vc); + debugfs_create_u8("lp11_init", 0644, mipi_root, + (char *)&pinfo->mipi.lp11_init); + debugfs_create_u32("init_delay", 0644, mipi_root, + (u32 *)&pinfo->mipi.init_delay); + debugfs_create_u8("rx_eot_ignore", 0644, mipi_root, + (char *)&pinfo->mipi.rx_eot_ignore); + debugfs_create_u8("tx_eot_append", 0644, mipi_root, + (char *)&pinfo->mipi.tx_eot_append); + + /* TE reltaed nodes */ + debugfs_create_u32("te_tear_check_en", 0644, te_root, + (u32 *)&pinfo->te.tear_check_en); + debugfs_create_u32("te_sync_cfg_height", 0644, te_root, + (u32 *)&pinfo->te.sync_cfg_height); + debugfs_create_u32("te_vsync_init_val", 0644, te_root, + (u32 *)&pinfo->te.vsync_init_val); + debugfs_create_u32("te_sync_threshold_start", 0644, te_root, + (u32 *)&pinfo->te.sync_threshold_start); + debugfs_create_u32("te_sync_threshold_continue", 0644, te_root, + (u32 *)&pinfo->te.sync_threshold_continue); + debugfs_create_u32("te_start_pos", 0644, te_root, + (u32 *)&pinfo->te.sync_threshold_continue); + debugfs_create_u32("te_rd_ptr_irq", 0644, te_root, + (u32 *)&pinfo->te.rd_ptr_irq); + debugfs_create_u32("te_refx100", 0644, te_root, + (u32 *)&pinfo->te.refx100); + + return 0; +} + +int mdss_panel_debugfs_panel_setup(struct mdss_panel_debugfs_info *debugfs_info, + struct mdss_panel_info *panel_info, struct dentry *parent) +{ + /* create panel info nodes */ + debugfs_create_u32("xres", 0644, debugfs_info->root, + (u32 *)&debugfs_info->panel_info.xres); + debugfs_create_u32("yres", 0644, debugfs_info->root, + (u32 *)&debugfs_info->panel_info.yres); + debugfs_create_u32("dynamic_fps", 0644, debugfs_info->root, + (u32 *)&debugfs_info->panel_info.dynamic_fps); + debugfs_create_u32("physical_width", 0644, debugfs_info->root, + (u32 *)&debugfs_info->panel_info.physical_width); + debugfs_create_u32("physical_height", 0644, debugfs_info->root, + (u32 *)&debugfs_info->panel_info.physical_height); + debugfs_create_u32("min_refresh_rate", 0644, debugfs_info->root, + (u32 *)&debugfs_info->panel_info.min_fps); + debugfs_create_u32("max_refresh_rate", 0644, debugfs_info->root, + (u32 *)&debugfs_info->panel_info.max_fps); + debugfs_create_u32("clk_rate", 0644, debugfs_info->root, + (u32 *)&debugfs_info->panel_info.clk_rate); + debugfs_create_u32("bl_min", 0644, debugfs_info->root, + (u32 *)&debugfs_info->panel_info.bl_min); + debugfs_create_u32("bl_max", 0644, debugfs_info->root, + (u32 *)&debugfs_info->panel_info.bl_max); + debugfs_create_u32("brightness_max", 0644, debugfs_info->root, + (u32 *)&debugfs_info->panel_info.brightness_max); + + if ((panel_info->type == MIPI_CMD_PANEL) || + (panel_info->type == MIPI_VIDEO_PANEL)) { + _create_dsi_panel_nodes(debugfs_info, debugfs_info->root); + _create_phy_ctrl_nodes(debugfs_info, debugfs_info->root); + } + + debugfs_info->panel_info = *panel_info; + return 0; } int mdss_panel_debugfs_setup(struct mdss_panel_info *panel_info, struct dentry @@ -99,35 +444,11 @@ int mdss_panel_debugfs_setup(struct mdss_panel_info *panel_info, struct dentry debugfs_create_u32("override_flag", 0644, parent, (u32 *)&debugfs_info->override_flag); - debugfs_create_u32("xres", 0644, debugfs_info->root, - (u32 *)&debugfs_info->xres); - debugfs_create_u32("yres", 0644, debugfs_info->root, - (u32 *)&debugfs_info->yres); - - debugfs_create_u32("h_back_porch", 0644, debugfs_info->root, - (u32 *)&debugfs_info->lcdc.h_back_porch); - debugfs_create_u32("h_front_porch", 0644, debugfs_info->root, - (u32 *)&debugfs_info->lcdc.h_front_porch); - debugfs_create_u32("h_pulse_width", 0644, debugfs_info->root, - (u32 *)&debugfs_info->lcdc.h_pulse_width); - - debugfs_create_u32("v_back_porch", 0644, debugfs_info->root, - (u32 *)&debugfs_info->lcdc.v_back_porch); - debugfs_create_u32("v_front_porch", 0644, debugfs_info->root, - (u32 *)&debugfs_info->lcdc.v_front_porch); - debugfs_create_u32("v_pulse_width", 0644, debugfs_info->root, - (u32 *)&debugfs_info->lcdc.v_pulse_width); - - debugfs_create_u32("frame_rate", 0644, parent, - (u32 *)&debugfs_info->frame_rate); - mdss_panel_debugfs_fbc_setup(debugfs_info, panel_info, - debugfs_info->root); + debugfs_info->root); + mdss_panel_debugfs_panel_setup(debugfs_info, panel_info, + debugfs_info->root); - debugfs_info->xres = panel_info->xres; - debugfs_info->yres = panel_info->yres; - debugfs_info->lcdc = panel_info->lcdc; - debugfs_info->frame_rate = panel_info->mipi.frame_rate; debugfs_info->override_flag = 0; panel_info->debugfs_info = debugfs_info; @@ -187,16 +508,48 @@ void mdss_panel_debugfsinfo_to_panelinfo(struct mdss_panel_info *panel_info) { struct mdss_panel_data *pdata; struct mdss_panel_info *pinfo; + struct mdss_panel_debugfs_info *dfs_info; pdata = container_of(panel_info, struct mdss_panel_data, panel_info); do { pinfo = &pdata->panel_info; - pinfo->xres = pinfo->debugfs_info->xres; - pinfo->yres = pinfo->debugfs_info->yres; - pinfo->lcdc = pinfo->debugfs_info->lcdc; + dfs_info = pinfo->debugfs_info; + + pinfo->xres = dfs_info->panel_info.xres; + pinfo->yres = dfs_info->panel_info.yres; + pinfo->dynamic_fps = dfs_info->panel_info.dynamic_fps; + pinfo->physical_width = dfs_info->panel_info.physical_width; + pinfo->physical_height = dfs_info->panel_info.physical_height; + pinfo->min_fps = dfs_info->panel_info.min_fps; + pinfo->max_fps = dfs_info->panel_info.max_fps; + pinfo->clk_rate = dfs_info->panel_info.clk_rate; + pinfo->bl_min = dfs_info->panel_info.bl_min; + pinfo->bl_max = dfs_info->panel_info.bl_max; + pinfo->brightness_max = dfs_info->panel_info.brightness_max; + + if ((pinfo->type == MIPI_CMD_PANEL) || + (pinfo->type == MIPI_VIDEO_PANEL)) { + pinfo->fbc = dfs_info->panel_info.fbc; + pinfo->lcdc = dfs_info->panel_info.lcdc; + pinfo->mipi = dfs_info->panel_info.mipi; + pinfo->te = dfs_info->panel_info.te; + pinfo->partial_update_enabled = + dfs_info->panel_info.partial_update_enabled; + pinfo->partial_update_roi_merge = + dfs_info->panel_info.partial_update_roi_merge; + pinfo->dcs_cmd_by_left = + dfs_info->panel_info.dcs_cmd_by_left; + pinfo->ulps_feature_enabled = + dfs_info->panel_info.ulps_feature_enabled; + pinfo->ulps_suspend_enabled = + dfs_info->panel_info.ulps_suspend_enabled; + pinfo->esd_check_enabled = + dfs_info->panel_info.esd_check_enabled; + pinfo->panel_ack_disabled = + dfs_info->panel_info.panel_ack_disabled; + } + pinfo->panel_max_vtotal = mdss_panel_get_vtotal(pinfo); - pinfo->fbc = pinfo->debugfs_info->fbc; - pinfo->mipi.frame_rate = pinfo->debugfs_info->frame_rate; pdata = pdata->next; } while (pdata); } diff --git a/drivers/video/fbdev/msm/mdss_panel.h b/drivers/video/fbdev/msm/mdss_panel.h index fc8ecf9545c8..be07f32fc9f1 100644 --- a/drivers/video/fbdev/msm/mdss_panel.h +++ b/drivers/video/fbdev/msm/mdss_panel.h @@ -555,12 +555,8 @@ struct mdss_panel_data { struct mdss_panel_debugfs_info { struct dentry *root; - u32 xres; - u32 yres; - struct lcd_panel_info lcdc; - struct fbc_panel_info fbc; + struct mdss_panel_info panel_info; u32 override_flag; - char frame_rate; struct mdss_panel_debugfs_info *next; }; |