void target_display_init(const char *panel_name) { uint32_t ret = 0; char cont_splash = '\0'; set_panel_cmd_string(panel_name, &cont_splash); panel_name += strspn(panel_name, " "); if (!strcmp(panel_name, NO_PANEL_CONFIG) || !strcmp(panel_name, SIM_VIDEO_PANEL) || !strcmp(panel_name, SIM_DUALDSI_VIDEO_PANEL) || !strcmp(panel_name, SIM_CMD_PANEL) || !strcmp(panel_name, SIM_DUALDSI_CMD_PANEL)) { dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n", panel_name); return; } else if (!strcmp(panel_name, HDMI_PANEL_NAME)) { dprintf(INFO, "%s: HDMI is primary\n", __func__); mdss_hdmi_display_init(MDP_REV_50, HDMI_FB_ADDR); return; } ret = gcdb_display_init(panel_name, MDP_REV_50, MIPI_FB_ADDR); if (ret) { target_force_cont_splash_disable(true); msm_display_off(); } if (cont_splash == '0') { dprintf(INFO, "Forcing continuous splash disable\n"); target_force_cont_splash_disable(true); } }
void target_display_init(const char *panel_name) { uint32_t panel_loop = 0; int32_t ret = 0; uint32_t fb_addr = MIPI_FB_ADDR; if ((!strcmp(panel_name, NO_PANEL_CONFIG)) || (!strcmp(panel_name, SIM_VIDEO_PANEL))) { dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n", panel_name); return; } if (board_hardware_subtype() == HW_PLATFORM_SUBTYPE_QVGA) fb_addr = MIPI_FB_ADDR_QVGA; do { target_force_cont_splash_disable(false); ret = gcdb_display_init(panel_name, MDP_REV_50, (void *) fb_addr); if (!ret || ret == ERR_NOT_SUPPORTED) { break; } else { target_force_cont_splash_disable(true); msm_display_off(); } } while (++panel_loop <= oem_panel_max_auto_detect_panels()); }
void display_init(void) { uint32_t ret = 0; ret = gcdb_display_init(MDP_REV_50, MIPI_FB_ADDR); if (ret) { msm_display_off(); } }
void target_display_init(const char *panel_name) { uint32_t hw_id = board_hardware_id(); uint32_t panel_loop = 0; uint32_t ret = 0; if (target_hw_interposer()) return; panel_name += strspn(panel_name, " "); if ((!strcmp(panel_name, NO_PANEL_CONFIG)) || (!strcmp(panel_name, SIM_VIDEO_PANEL)) || (!strcmp(panel_name, SIM_DUALDSI_VIDEO_PANEL))) { dprintf(INFO, "Selected panel: %s\nSkip panel configuration", panel_name); return; } else if (!strcmp(panel_name, HDMI_PANEL_NAME)) { dprintf(INFO, "%s: HDMI is primary\n", __func__); return; } switch (hw_id) { case HW_PLATFORM_LIQUID: edp_panel_init(&(panel.panel_info)); panel.clk_func = msm8974_mdss_edp_panel_clock; panel.power_func = msm8974_edp_panel_power; panel.fb.base = (void *)EDP_FB_ADDR; panel.fb.format = FB_FORMAT_RGB888; panel.mdp_rev = MDP_REV_50; if (msm_display_init(&panel)) { dprintf(CRITICAL, "edp init failed!\n"); return; } edp_enable = 1; break; default: do { ret = gcdb_display_init(panel_name, MDP_REV_50, MIPI_FB_ADDR); if (!ret || ret == ERR_NOT_SUPPORTED) { break; } else { target_force_cont_splash_disable(true); msm_display_off(); target_force_cont_splash_disable(false); } } while (++panel_loop <= oem_panel_max_auto_detect_panels()); break; } }
void target_display_shutdown(void) { uint32_t hw_id = board_hardware_id(); switch (hw_id) { case HW_PLATFORM_LIQUID: if (edp_enable) msm_display_off(); break; default: gcdb_display_shutdown(); break; } }
void target_display_init(const char *panel_name) { uint32_t panel_loop = 0; uint32_t ret = 0; do { ret = gcdb_display_init(panel_name, MDP_REV_50, MIPI_FB_ADDR); if (!ret || ret == ERR_NOT_SUPPORTED) { break; } else { target_force_cont_splash_disable(true); msm_display_off(); target_force_cont_splash_disable(false); } } while (++panel_loop <= oem_panel_max_auto_detect_panels()); }
void target_display_init(const char *panel_name) { uint32_t ret = 0; panel_name += strspn(panel_name, " "); if (!strcmp(panel_name, NO_PANEL_CONFIG)) { dprintf(INFO, "Skip panel configuration\n"); return; } if (!strcmp(panel_name, HDMI_PANEL_NAME)) { dprintf(INFO, "%s: HDMI is primary\n", __func__); return; } ret = gcdb_display_init(panel_name, MDP_REV_50, MIPI_FB_ADDR); if (ret) { msm_display_off(); } }
void target_display_init(const char *panel_name) { uint32_t ret = 0; panel_name += strspn(panel_name, " "); if ((!strcmp(panel_name, NO_PANEL_CONFIG)) || (!strcmp(panel_name, SIM_VIDEO_PANEL)) || (!strcmp(panel_name, SIM_DUALDSI_VIDEO_PANEL))) { dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n", panel_name); return; } else if (!strcmp(panel_name, HDMI_PANEL_NAME)) { dprintf(INFO, "%s: HDMI is primary\n", __func__); mdss_hdmi_display_init(MDP_REV_50, HDMI_FB_ADDR); return; } ret = gcdb_display_init(panel_name, MDP_REV_50, MIPI_FB_ADDR); if (ret) msm_display_off(); }
void target_display_init(const char *panel_name) { uint32_t panel_loop = 0; uint32_t ret = 0; panel_name += strspn(panel_name, " "); if ((!strcmp(panel_name, NO_PANEL_CONFIG)) || (!strcmp(panel_name, SIM_VIDEO_PANEL))) { dprintf(INFO, "Selected panel: %s\nSkip panel configuration\n", panel_name); return; } do { ret = gcdb_display_init(panel_name, MDP_REV_50, MIPI_FB_ADDR); if (!ret || ret == ERR_NOT_SUPPORTED) { break; } else { target_force_cont_splash_disable(true); msm_display_off(); target_force_cont_splash_disable(false); } } while (++panel_loop <= oem_panel_max_auto_detect_panels()); }
void gcdb_display_shutdown(void) { if (display_enable) msm_display_off(); }
void display_shutdown(void) { dprintf(SPEW, "display_shutdown()\n"); if (display_enabled) msm_display_off(); }
static void msm8960_backlight_on(void) { struct pm8921_gpio backlight_pwm = { .direction = PM_GPIO_DIR_OUT, .output_buffer = 0, .output_value = 0, .pull = PM_GPIO_PULL_NO, .vin_sel = 2, .out_strength = PM_GPIO_STRENGTH_HIGH, .function = PM_GPIO_FUNC_1, .inv_int_pol = 0, }; int rc = pm8921_gpio_config(PM_GPIO(24), &backlight_pwm); if (rc) dprintf(CRITICAL, "FAIL pm8921_gpio_config(): rc=%d.\n", rc); } /* Pull DISP_RST_N high to get panel out of reset */ static void msm8960_mipi_panel_reset(void) { struct pm8921_gpio gpio43_param = { .direction = PM_GPIO_DIR_OUT, .output_buffer = 0, .output_value = 1, .pull = PM_GPIO_PULL_UP_30, .vin_sel = 2, .out_strength = PM_GPIO_STRENGTH_HIGH, .function = PM_GPIO_FUNC_PAIRED, .inv_int_pol = 0, .disable_pin = 0, }; pm8921_gpio_config(PM_GPIO(43), &gpio43_param); } static int msm8960_mipi_panel_clock(int enable) { if (enable) { mdp_clock_init(); mmss_clock_init(); } else if(!target_cont_splash_screen()) { mmss_clock_disable(); } return 0; } static int msm8960_mipi_panel_power(int enable) { if (enable) { msm8960_backlight_on(); /* Turn on LDO8 for lcd1 mipi vdd */ pm8921_ldo_set_voltage(LDO_8, LDO_VOLTAGE_3_0V); /* Turn on LDO23 for lcd1 mipi vddio */ pm8921_ldo_set_voltage(LDO_23, LDO_VOLTAGE_1_8V); /* Turn on LDO2 for vdda_mipi_dsi */ pm8921_ldo_set_voltage(LDO_2, LDO_VOLTAGE_1_2V); msm8960_mipi_panel_reset(); } return 0; } void display_init(void) { dprintf(CRITICAL, "display_init\n"); switch (board_target_id()) { case LINUX_MACHTYPE_8064_CDP: lvds_chimei_wxga_init(&(panel.panel_info)); panel.clk_func = apq8064_lvds_clock; panel.power_func = apq8064_lvds_panel_power; panel.fb.base = 0x80B00000; panel.fb.width = panel.panel_info.xres; panel.fb.height = panel.panel_info.yres; panel.fb.stride = panel.panel_info.xres; panel.fb.bpp = panel.panel_info.bpp; panel.fb.format = FB_FORMAT_RGB888; panel.mdp_rev = MDP_REV_44; break; case LINUX_MACHTYPE_8064_MTP: mipi_toshiba_video_wsvga_init(&(panel.panel_info)); panel.clk_func = fusion3_mtp_clock; panel.power_func = fusion3_mtp_panel_power; panel.fb.base = 0x89000000; panel.fb.width = panel.panel_info.xres; panel.fb.height = panel.panel_info.yres; panel.fb.stride = panel.panel_info.xres; panel.fb.bpp = panel.panel_info.bpp; panel.fb.format = FB_FORMAT_RGB888; panel.mdp_rev = MDP_REV_44; break; case LINUX_MACHTYPE_8960_CDP: case LINUX_MACHTYPE_8960_MTP: case LINUX_MACHTYPE_8960_FLUID: case LINUX_MACHTYPE_8960_LIQUID: mipi_toshiba_video_wsvga_init(&(panel.panel_info)); panel.clk_func = msm8960_mipi_panel_clock; panel.power_func = msm8960_mipi_panel_power; panel.fb.base = 0x89000000; panel.fb.width = panel.panel_info.xres; panel.fb.height = panel.panel_info.yres; panel.fb.stride = panel.panel_info.xres; panel.fb.bpp = panel.panel_info.bpp; panel.fb.format = FB_FORMAT_RGB888; panel.mdp_rev = MDP_REV_42; break; default: return; }; if (msm_display_init(&panel)) { dprintf(CRITICAL, "Display init failed!\n"); return; } display_image_on_screen(); display_enable = 1; } void display_shutdown(void) { if (display_enable) msm_display_off(); }
static void msm8960_backlight_on(void) { struct pm8921_gpio backlight_pwm = { .direction = PM_GPIO_DIR_OUT, .output_buffer = 0, .output_value = 0, .pull = PM_GPIO_PULL_NO, .vin_sel = 2, .out_strength = PM_GPIO_STRENGTH_HIGH, .function = PM_GPIO_FUNC_1, .inv_int_pol = 0, }; int rc = pm8921_gpio_config(PM_GPIO(24), &backlight_pwm); if (rc) dprintf(CRITICAL, "FAIL pm8921_gpio_config(): rc=%d.\n", rc); } /* Pull DISP_RST_N high to get panel out of reset */ static void msm8960_mipi_panel_reset(void) { struct pm8921_gpio gpio43_param = { .direction = PM_GPIO_DIR_OUT, .output_buffer = 0, .output_value = 1, .pull = PM_GPIO_PULL_UP_30, .vin_sel = 2, .out_strength = PM_GPIO_STRENGTH_HIGH, .function = PM_GPIO_FUNC_PAIRED, .inv_int_pol = 0, .disable_pin = 0, }; pm8921_gpio_config(PM_GPIO(43), &gpio43_param); } static int msm8960_mipi_panel_clock(int enable) { if (enable) { mdp_clock_init(); mmss_clock_init(); } else if(!target_cont_splash_screen()) { mmss_clock_disable(); } return 0; } static int msm8960_liquid_mipi_panel_clock(int enable) { if (enable) { mdp_clock_init(); liquid_mmss_clock_init(); /* 240 MHZ MIPI-DSI clk */ } else if(!target_cont_splash_screen()) { mmss_clock_disable(); } return 0; } static int msm8960_mipi_panel_power(int enable) { if (enable) { msm8960_backlight_on(); /* Turn on LDO8 for lcd1 mipi vdd */ pm8921_ldo_set_voltage(LDO_8, LDO_VOLTAGE_3_0V); /* Turn on LDO23 for lcd1 mipi vddio */ pm8921_ldo_set_voltage(LDO_23, LDO_VOLTAGE_1_8V); /* Turn on LDO2 for vdda_mipi_dsi */ pm8921_ldo_set_voltage(LDO_2, LDO_VOLTAGE_1_2V); msm8960_mipi_panel_reset(); } return 0; } #define PM_GPIO_VIN_VPH 0 /* 3v ~ 4.4v */ #define PM_GPIO_VIN_BB 1 /* ~3.3v */ #define PM_GPIO_VIN_S4 2 /* 1.8v */ #define PM_GPIO_VIN_L15 3 static int msm8960_liquid_mipi_panel_power(int enable) { if (enable) { static int gpio17, gpio21, gpio43 ; int rc; struct pm8921_gpio gpio_config = { .direction = PM_GPIO_DIR_OUT, .output_buffer = 0, .output_value = 1, .pull = PM_GPIO_PULL_NO, .vin_sel = PM_GPIO_VIN_S4, .out_strength = PM_GPIO_STRENGTH_HIGH, .function = PM_GPIO_FUNC_NORMAL, .inv_int_pol = 0, .disable_pin = 0, }; /* Note: PWM is controlled by PM-GPIO#24 */ gpio17 = PM_GPIO(17); /* ext_3p3v */ gpio21 = PM_GPIO(21); /* disp power enable_n , vin=VPH-PWR */ gpio43 = PM_GPIO(43); /* Displays Enable (rst_n) */ gpio_config.output_value = 1; rc = pm8921_gpio_config(gpio17, &gpio_config); mdelay(100); gpio_config.output_value = 0; /* disp disable (resx=0) */ rc = pm8921_gpio_config(gpio43, &gpio_config); mdelay(100); gpio_config.output_value = 0; gpio_config.vin_sel = PM_GPIO_VIN_VPH; /* VPH_PWR */ /* disp power enable_n */ rc = pm8921_gpio_config(gpio21, &gpio_config); mdelay(100); gpio_config.output_value = 1; gpio_config.vin_sel = PM_GPIO_VIN_S4; /* disp enable */ rc = pm8921_gpio_config(gpio43, &gpio_config); mdelay(100); pm8921_low_voltage_switch_enable(lvs_4); /* S4 1.8 V */ /* Turn on LDO2 for vdda_mipi_dsi */ pm8921_ldo_set_voltage(LDO_2, LDO_VOLTAGE_1_2V); msm8960_backlight_on(); } return 0; } void display_init(void) { int target_id = board_target_id(); dprintf(INFO, "display_init(),target_id=%d.\n", target_id); switch (target_id) { case LINUX_MACHTYPE_8960_LIQUID: mipi_chimei_video_wxga_init(&(panel.panel_info)); /* * mipi_chimei_wxga panel not supported yet in LK. * However, MIPI clocks and power should be set in LK. */ panel.clk_func = msm8960_liquid_mipi_panel_clock; panel.power_func = msm8960_liquid_mipi_panel_power; panel.fb.base = MIPI_FB_ADDR; panel.fb.width = panel.panel_info.xres; panel.fb.height = panel.panel_info.yres; panel.fb.stride = panel.panel_info.xres; panel.fb.bpp = panel.panel_info.bpp; panel.fb.format = FB_FORMAT_RGB888; panel.mdp_rev = MDP_REV_44; break; case LINUX_MACHTYPE_8064_CDP: lvds_chimei_wxga_init(&(panel.panel_info)); panel.clk_func = apq8064_lvds_clock; panel.power_func = apq8064_lvds_panel_power; panel.fb.base = 0x80B00000; panel.fb.width = panel.panel_info.xres; panel.fb.height = panel.panel_info.yres; panel.fb.stride = panel.panel_info.xres; panel.fb.bpp = panel.panel_info.bpp; panel.fb.format = FB_FORMAT_RGB888; panel.mdp_rev = MDP_REV_44; break; case LINUX_MACHTYPE_8064_MTP: mipi_toshiba_video_wsvga_init(&(panel.panel_info)); panel.clk_func = fusion3_mtp_clock; panel.power_func = fusion3_mtp_panel_power; panel.fb.base = 0x89000000; panel.fb.width = panel.panel_info.xres; panel.fb.height = panel.panel_info.yres; panel.fb.stride = panel.panel_info.xres; panel.fb.bpp = panel.panel_info.bpp; panel.fb.format = FB_FORMAT_RGB888; panel.mdp_rev = MDP_REV_44; break; case LINUX_MACHTYPE_8960_CDP: case LINUX_MACHTYPE_8960_MTP: case LINUX_MACHTYPE_8960_FLUID: mipi_toshiba_video_wsvga_init(&(panel.panel_info)); panel.clk_func = msm8960_mipi_panel_clock; panel.power_func = msm8960_mipi_panel_power; panel.fb.base = 0x89000000; panel.fb.width = panel.panel_info.xres; panel.fb.height = panel.panel_info.yres; panel.fb.stride = panel.panel_info.xres; panel.fb.bpp = panel.panel_info.bpp; panel.fb.format = FB_FORMAT_RGB888; panel.mdp_rev = MDP_REV_42; break; default: return; }; if (msm_display_init(&panel)) { dprintf(CRITICAL, "Display init failed!\n"); return; } display_image_on_screen(); display_enable = 1; } void display_shutdown(void) { if (display_enable) msm_display_off(); }