struct msm_panel_info *mipi_dsi_detect_panel( struct msm_fb_data_type *mfd) { int i; int ret; struct mipi_dsi_data *dsi_data; dsi_data = platform_get_drvdata(mfd->panel_pdev); mipi_dsi_op_mode_config(DSI_CMD_MODE); if (dsi_data->default_panels[0] != NULL) { for (i = 0; dsi_data->default_panels[i]; i++) { ret = panel_id_reg_check(mfd, &dsi_data->tx_buf, &dsi_data->rx_buf, dsi_data->default_panels[i]); if (!ret) break; } if (dsi_data->default_panels[i]) { dsi_data->panel = dsi_data->default_panels[i]; dev_info(&mfd->panel_pdev->dev, "found panel vendor: %s\n", dsi_data->panel->name); } else { dev_warn(&mfd->panel_pdev->dev, "cannot detect panel vendor!\n"); return NULL; } } for (i = 0; dsi_data->panels[i]; i++) { ret = panel_id_reg_check(mfd, &dsi_data->tx_buf, &dsi_data->rx_buf, dsi_data->panels[i]); if (!ret) break; } if (dsi_data->panels[i]) { dsi_data->panel = dsi_data->panels[i]; dev_info(&mfd->panel_pdev->dev, "found panel: %s\n", dsi_data->panel->name); } else { dev_warn(&mfd->panel_pdev->dev, "cannot detect panel!\n"); return NULL; } dsi_data->panel_data.panel_info = *dsi_data->panel->pctrl->get_panel_info(); dsi_data->panel_data.panel_info.width = dsi_data->panel->width; dsi_data->panel_data.panel_info.height = dsi_data->panel->height; dsi_data->panel_data.panel_info.mipi.dsi_pclk_rate = mfd->panel_info.mipi.dsi_pclk_rate; mipi_dsi_op_mode_config (dsi_data->panel_data.panel_info.mipi.mode); return &dsi_data->panel_data.panel_info; }
struct msm_panel_info *mipi_dsi_detect_panel( struct msm_fb_data_type *mfd) { int i; int ret; struct mipi_dsi_data *dsi_data; struct device *dev = &mfd->panel_pdev->dev; dsi_data = platform_get_drvdata(mfd->panel_pdev); mipi_dsi_op_mode_config(DSI_CMD_MODE); if (dsi_data->default_panels[0] != NULL) { for (i = 0; dsi_data->default_panels[i]; i++) { ret = panel_id_reg_check(mfd, &dsi_data->tx_buf, &dsi_data->rx_buf, dsi_data->default_panels[i]); if (!ret) break; } if (dsi_data->default_panels[i]) { dsi_data->panel = dsi_data->default_panels[i]; dev_info(dev, "found panel vendor: %s\n", dsi_data->panel->name); #ifdef CONFIG_FB_MSM_RECOVER_PANEL } else { /* The recovery can only be done if we have one default panel defined, which means i will be 1 here */ if (i == 1) { dev_warn(dev, "Unable to detect panel vendor, " "try to recover.\n"); dsi_data->panel_nvm_ok = false; dsi_data->panel = dsi_data->default_panels[0]; dev_info(dev, "Assume panel vendor: %s\n", dsi_data->panel->name); #endif } else { dev_warn(dev, "cannot detect panel vendor!\n"); return NULL; } } #ifdef CONFIG_FB_MSM_RECOVER_PANEL } if (dsi_data->panel_nvm_ok) { #endif for (i = 0; dsi_data->panels[i]; i++) { ret = panel_id_reg_check(mfd, &dsi_data->tx_buf, &dsi_data->rx_buf, dsi_data->panels[i]); if (!ret) break; } #ifdef CONFIG_FB_MSM_RECOVER_PANEL } else { for (i = 0; dsi_data->panels[i]; i++) { if (dsi_data->panels[i]->use_if_nv_fail) { dev_info(dev, "Assume panel name: %s\n", dsi_data->panels[i]->name); break; } } } #endif if (dsi_data->panels[i]) { dsi_data->panel = dsi_data->panels[i]; dev_info(dev, "found panel: %s\n", dsi_data->panel->name); } else { dev_warn(dev, "cannot detect panel!\n"); return NULL; } #ifdef CONFIG_FB_MSM_RECOVER_PANEL /* Verify NVM even if we have managed to detect panel */ if (dsi_data->panel_nvm_ok && dsi_data->panel->pnvrw_ctl && dsi_data->backup_nvm_to_ram && dsi_data->is_nvm_ok) { dsi_data->backup_nvm_to_ram(mfd); if (dsi_data->is_nvm_ok(mfd)) dsi_data->panel_nvm_backup_ok = true; else dsi_data->panel_nvm_ok = false; } #endif dsi_data->panel_data.panel_info = *dsi_data->panel->pctrl->get_panel_info(); dsi_data->panel_data.panel_info.width = dsi_data->panel->width; dsi_data->panel_data.panel_info.height = dsi_data->panel->height; dsi_data->panel_data.panel_info.mipi.dsi_pclk_rate = mfd->panel_info.mipi.dsi_pclk_rate; mipi_dsi_op_mode_config (dsi_data->panel_data.panel_info.mipi.mode); return &dsi_data->panel_data.panel_info; }