static int msm_fb_detect_panel(const char *name) { int ret = -ENODEV; if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf()) { if (!strncmp(name, "lcdc_toshiba_fwvga_pt", 21) || !strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7x27a_ffa() || machine_is_msm7625a_ffa()) { if (!strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } #if !defined(CONFIG_FB_MSM_LCDC_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_MIPI_PANEL_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_LCDC_MIPI_PANEL_AUTO_DETECT) if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf()) { if (!strncmp(name, LCDC_TOSHIBA_FWVGA_PANEL_NAME, strnlen(LCDC_TOSHIBA_FWVGA_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; } #endif return ret; }
static void __init msm7x27a_init_ebi2(void) { uint32_t ebi2_cfg; void __iomem *ebi2_cfg_ptr; ebi2_cfg_ptr = ioremap_nocache(MSM_EBI2_PHYS, sizeof(uint32_t)); if (!ebi2_cfg_ptr) return; ebi2_cfg = readl(ebi2_cfg_ptr); if (machine_is_msm7x27a_rumi3() || machine_is_msm7x27a_surf() || machine_is_msm7625a_surf()) ebi2_cfg |= (1 << 4); /* CS2 */ writel(ebi2_cfg, ebi2_cfg_ptr); iounmap(ebi2_cfg_ptr); /* Enable A/D MUX[bit 31] from EBI2_XMEM_CS2_CFG1 */ ebi2_cfg_ptr = ioremap_nocache(MSM_EBI2_XMEM_CS2_CFG1, sizeof(uint32_t)); if (!ebi2_cfg_ptr) return; ebi2_cfg = readl(ebi2_cfg_ptr); if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf()) ebi2_cfg |= (1 << 31); writel(ebi2_cfg, ebi2_cfg_ptr); iounmap(ebi2_cfg_ptr); }
static int msm_fb_detect_panel(const char *name) { int ret = -ENODEV; printk("%s: %d\n", __func__, __LINE__); if (machine_is_msm8225_cellon()) { ret = cellon_auto_detect_lcd_panel(name); } else if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, "lcdc_toshiba_fwvga_pt", 21) || !strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7x27a_ffa() || machine_is_msm7625a_ffa() || machine_is_msm8625_ffa()) { if (!strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7627a_qrd1()) { if (!strncmp(name, "mipi_video_truly_wvga", 21)) ret = 0; } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) { if (!strncmp(name, "lcdc_truly_hvga_ips3p2335_pt", 28)) ret = 0; } else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { if (cont_splash_enabled == 1) { if (!strncmp(name, "mipi_cmd_nt35510_wvga", 21)) ret = 0; } else if (cont_splash_enabled == 2) { if (!strncmp(name, "mipi_video_nt35510_wvga", 21)) ret = 0; } else { if (!strncmp(name, "mipi_cmd_nt35510_wvga", 21)) ret = 0; } } else if (machine_is_msm8625_skua()) { if (!strncmp(name, "mipi_video_himax_wvga", 21) && skua_panel_is_himax()) ret = 0; else if (!strncmp(name, "mipi_cmd_nt35510_alaska_wvga", 28) && !skua_panel_is_himax()) ret = 0; } else if (machine_is_msm8625_evt()) { if (!strncmp(name, "mipi_video_nt35510_wvga", 23)) ret = 0; } #if !defined(CONFIG_FB_MSM_LCDC_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_MIPI_PANEL_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_LCDC_MIPI_PANEL_AUTO_DETECT) if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, LCDC_TOSHIBA_FWVGA_PANEL_NAME, strnlen(LCDC_TOSHIBA_FWVGA_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; } #endif return ret; }
static int msm_fb_detect_panel(const char *name) { int ret = -ENODEV; if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { #if 0 //#ifdef CONFIG_LCDC_TOSHIBA if (!strncmp(name, "lcdc_toshiba_fwvga_pt", 21) || !strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; #endif } else if (machine_is_msm7x27a_ffa() || machine_is_msm7625a_ffa() || machine_is_msm8625_ffa()) { #ifdef CONFIG_FB_MSM_MIPI_DSI_RENESAS if (!strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; #endif #ifdef CONFIG_FB_MSM_MIPI_DSI_ILI9486 if (!strncmp(name, "mipi_cmd_ili9486_hvga", 21)) ret = 0; #endif }else if (machine_is_msm7627a_qrd1()) { } else if (machine_is_msm7627a_qrd1()) { if (!strncmp(name, "mipi_video_truly_wvga", 21)) ret = 0; } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) { if (!strncmp(name, "lcdc_truly_hvga_ips3p2335_pt", 28)) ret = 0; } else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt()) { if (!strncmp(name, "mipi_cmd_nt35510_wvga", 21)) ret = 0; } #if 0 //#ifdef CONFIG_LCDC_TOSHIBA #if !defined(CONFIG_FB_MSM_LCDC_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_MIPI_PANEL_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_LCDC_MIPI_PANEL_AUTO_DETECT) if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, LCDC_TOSHIBA_FWVGA_PANEL_NAME, strnlen(LCDC_TOSHIBA_FWVGA_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; } #endif #endif return ret; }
static int msm_fb_detect_panel(const char *name) { int ret = -ENODEV; #if 1 // #suwg printk("xxx %s:%s\n ",__func__,name); return ret; #endif if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, "lcdc_toshiba_fwvga_pt", 21) || !strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7x27a_ffa() || machine_is_msm7625a_ffa() || machine_is_msm8625_ffa()) { if (!strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7627a_qrd1()) { if (!strncmp(name, "mipi_video_truly_wvga", 21)) ret = 0; } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) { if (!strncmp(name, "lcdc_truly_hvga_ips3p2335_pt", 28)) ret = 0; } else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { if (!strncmp(name, "mipi_cmd_nt35510_wvga", 21)) ret = 0; } else if (machine_is_msm8625q_skud() || machine_is_msm8625q_evbd()) { if (!strncmp(name, "mipi_video_hx8389b_qhd", 22)) ret = 0; } else if (machine_is_msm8625q_skue()) { if (!strncmp(name, "mipi_video_otm9605a_qhd", 23)) ret = 0; } #if !defined(CONFIG_FB_MSM_LCDC_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_MIPI_PANEL_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_LCDC_MIPI_PANEL_AUTO_DETECT) if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, LCDC_TOSHIBA_FWVGA_PANEL_NAME, strnlen(LCDC_TOSHIBA_FWVGA_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; } #endif return ret; }
static int msm_fb_detect_panel(const char *name) { int ret = -ENODEV; if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, "lcdc_toshiba_fwvga_pt", 21) || !strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7x27a_ffa() || machine_is_msm7625a_ffa() || machine_is_msm8625_ffa()) { if (!strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7627a_qrd1()) { if (!strncmp(name, "mipi_video_truly_wvga", 21)) ret = 0; } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) { if (!strncmp(name, "lcdc_truly_hvga_ips3p2335_pt", 28)) ret = 0; } else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { #if 1 //#linxc 12-08-23 +++ if (!strncmp(name, "mipi_cmd_novatek_sharp_qhd", 26)) ret = 0; #else if (!strncmp(name, "mipi_cmd_nt35510_wvga", 21)) ret = 0; #endif } else if (machine_is_msm8625q_skud()) { if (!strncmp(name, "mipi_video_hx8389b_qhd", 22)) ret = 0; } #if !defined(CONFIG_FB_MSM_LCDC_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_MIPI_PANEL_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_LCDC_MIPI_PANEL_AUTO_DETECT) if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, LCDC_TOSHIBA_FWVGA_PANEL_NAME, strnlen(LCDC_TOSHIBA_FWVGA_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; } #endif return ret; }
/*=========================================================================== FUNCTION get_compass_gs_position DESCRIPTION This function probe which G-sensor & Campass status type should be used DEPENDENCIES RETURN VALUE None SIDE EFFECTS None ===========================================================================*/ compass_gs_position_type get_compass_gs_position(void) { compass_gs_position_type compass_gs_position=COMPASS_TOP_GS_TOP; /* modify compass and gs position by board id */ //move C8820\25D define from TOP to BOTTOM if (machine_is_msm7x27a_surf() || machine_is_msm7x27a_ffa() || machine_is_msm7x27a_umts() || machine_is_msm7x27a_cdma() || machine_is_msm7x27a_U8815()) { compass_gs_position=COMPASS_TOP_GS_TOP; } /*< DTS2012022006500 yangbo 20120220 begin */ /*version A and version B has compass, since version C don't have compass*/ else if(machine_is_msm7x27a_C8820() && (HW_VER_SUB_VC <= get_hw_sub_board_id())) { compass_gs_position=COMPASS_NONE_GS_BOTTOM; } /* DTS2012022006500 yangbo 20120220 end > */ /* add U8655_EMMC, use the u8655 configuration */ else if (machine_is_msm7x27a_U8655() || machine_is_msm7x27a_U8655_EMMC() || machine_is_msm7x27a_C8655_NAND() || machine_is_msm7x27a_M660() || machine_is_msm7x27a_U8661() || machine_is_msm7x27a_C8820() || machine_is_msm7x27a_C8825D() || machine_is_msm7x30_u8800() || machine_is_msm7x30_u8820() || machine_is_msm7x30_u8800_51() || machine_is_msm8255_u8800_pro() || machine_is_msm8255_u8860() || machine_is_msm8255_c8860() || machine_is_msm8255_u8860lp() /* < DTS2012022905490 ganfan 20120301 begin */ || machine_is_msm8255_u8860_r() /* DTS2012022905490 ganfan 20120301 end > */ || machine_is_msm8255_u8860_92() || machine_is_msm8255_u8860_51()) { compass_gs_position=COMPASS_BOTTOM_GS_BOTTOM; } else if (machine_is_msm7x27a_U8185()) { compass_gs_position=COMPASS_NONE_GS_TOP; } else if(machine_is_msm8255_u8680() || machine_is_msm8255_u8730()) { compass_gs_position=COMPASS_TOP_GS_TOP; } /*< DTS2012022300887 fengwei 20120224 begin */ else if (machine_is_msm7x27a_C8668D() ) { compass_gs_position = COMPASS_BOTTOM_GS_TOP; } /* DTS2012022300887 fengwei 20120224 end >*/ return compass_gs_position; }
void __init msm_fb_add_devices(void) { int rc = 0; msm7x27a_set_display_params(prim_panel_name); if (machine_is_msm7627a_qrd1()) platform_add_devices(qrd_fb_devices, ARRAY_SIZE(qrd_fb_devices)); else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt()) { mipi_NT35510_pdata.bl_lock = 1; mipi_NT35516_pdata.bl_lock = 1; if (disable_splash) mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(evb_fb_devices, ARRAY_SIZE(evb_fb_devices)); } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) { sku3_lcdc_lcd_camera_power_init(); mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(qrd3_fb_devices, ARRAY_SIZE(qrd3_fb_devices)); } else { mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(msm_fb_devices, ARRAY_SIZE(msm_fb_devices)); } msm_fb_register_device("mdp", &mdp_pdata); if (machine_is_msm7625a_surf() || machine_is_msm7x27a_surf() || machine_is_msm8625_surf() || machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) msm_fb_register_device("lcdc", &lcdc_pdata); #ifdef CONFIG_FB_MSM_MIPI_DSI msm_fb_register_device("mipi_dsi", &mipi_dsi_pdata); #endif if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_evt()) { gpio_reg_2p85v = regulator_get(&mipi_dsi_device.dev, "lcd_vdd"); if (IS_ERR(gpio_reg_2p85v)) pr_err("%s:ext_2p85v regulator get failed", __func__); gpio_reg_1p8v = regulator_get(&mipi_dsi_device.dev, "lcd_vddi"); if (IS_ERR(gpio_reg_1p8v)) pr_err("%s:ext_1p8v regulator get failed", __func__); if (mdp_pdata.cont_splash_enabled) { /*Enable EXT_2.85 and 1.8 regulators*/ rc = regulator_enable(gpio_reg_2p85v); if (rc < 0) pr_err("%s: reg enable failed\n", __func__); rc = regulator_enable(gpio_reg_1p8v); if (rc < 0) pr_err("%s: reg enable failed\n", __func__); } } }
/*=========================================================================== FUNCTION get_compass_gs_position DESCRIPTION This function probe which G-sensor & Campass status type should be used DEPENDENCIES RETURN VALUE None SIDE EFFECTS None ===========================================================================*/ compass_gs_position_type get_compass_gs_position(void) { compass_gs_position_type compass_gs_position=COMPASS_TOP_GS_TOP; /* modify compass and gs position by board id */ //move C8820\25D define from TOP to BOTTOM if (machine_is_msm7x27a_surf() || machine_is_msm7x27a_ffa() || machine_is_msm7x27a_U8815() || machine_is_msm8x25_C8950D() || (machine_is_msm8x25_U8950() && (HW_VER_SUB_VB <= get_hw_sub_board_id())) || machine_is_msm8x25_U8950D() ) { compass_gs_position=COMPASS_TOP_GS_TOP; } /*version A and version B has compass, since version C don't have compass*/ else if(machine_is_msm7x27a_C8820() && (HW_VER_SUB_VC <= get_hw_sub_board_id())) { compass_gs_position=COMPASS_NONE_GS_BOTTOM; } /* add U8655_EMMC, use the u8655 configuration */ else if (machine_is_msm7x27a_U8655() || machine_is_msm7x27a_U8655_EMMC() || machine_is_msm7x27a_C8655_NAND() || machine_is_msm7x27a_M660() || machine_is_msm7x27a_U8661() || machine_is_msm7x27a_C8820() || machine_is_msm8x25_C8825D() || machine_is_msm7x30_u8800() || machine_is_msm7x30_u8820() || machine_is_msm7x30_u8800_51() || machine_is_msm8255_u8800_pro() || machine_is_msm8255_u8860() || machine_is_msm8255_c8860() || machine_is_msm8x25_U8825() || machine_is_msm8x25_U8825D() || (machine_is_msm8x25_U8950() && (HW_VER_SUB_VA == get_hw_sub_board_id())) || machine_is_msm8255_u8860lp() || machine_is_msm8255_u8860_r() || machine_is_msm8255_u8860_92() || machine_is_msm8255_u8860_51()) { compass_gs_position=COMPASS_BOTTOM_GS_BOTTOM; } else if (machine_is_msm7x27a_U8185()) { compass_gs_position=COMPASS_NONE_GS_TOP; } else if(machine_is_msm8255_u8680() || machine_is_msm8255_u8730()) { compass_gs_position=COMPASS_TOP_GS_TOP; } else if (machine_is_msm7x27a_C8668D() ) { compass_gs_position = COMPASS_BOTTOM_GS_TOP; } return compass_gs_position; }
static int msm_fb_dsi_client_msm_reset(void) { int rc = 0; rc = gpio_request(GPIO_LCDC_BRDG_RESET_N, "lcdc_brdg_reset_n"); if (rc < 0) { pr_err("failed to request lcd brdg reset_n\n"); return rc; } rc = gpio_request(GPIO_LCDC_BRDG_PD, "lcdc_brdg_pd"); if (rc < 0) { pr_err("failed to request lcd brdg pd\n"); return rc; } rc = gpio_tlmm_config(mipi_dsi_gpio[0], GPIO_CFG_ENABLE); if (rc) { pr_err("Failed to enable LCDC Bridge reset enable\n"); goto gpio_error; } rc = gpio_tlmm_config(mipi_dsi_gpio[1], GPIO_CFG_ENABLE); if (rc) { pr_err("Failed to enable LCDC Bridge pd enable\n"); goto gpio_error2; } rc = gpio_direction_output(GPIO_LCDC_BRDG_RESET_N, 1); rc |= gpio_direction_output(GPIO_LCDC_BRDG_PD, 1); gpio_set_value_cansleep(GPIO_LCDC_BRDG_PD, 0); if (!rc) { if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { lcdc_reset_ptr = ioremap_nocache(LCDC_RESET_PHYS, sizeof(uint32_t)); if (!lcdc_reset_ptr) return 0; } return rc; } else { goto gpio_error; } gpio_error2: pr_err("Failed GPIO bridge pd\n"); gpio_free(GPIO_LCDC_BRDG_PD); gpio_error: pr_err("Failed GPIO bridge reset\n"); gpio_free(GPIO_LCDC_BRDG_RESET_N); return rc; }
static void __init register_i2c_devices(void) { if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf()) sx150x_data[SX150X_CORE].io_open_drain_ena = 0xe0f0; core_exp_i2c_info[0].platform_data = &sx150x_data[SX150X_CORE]; i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, core_exp_i2c_info, ARRAY_SIZE(core_exp_i2c_info)); }
void __init msm_fb_add_devices(void) { /* Using continuous splash or not */ if (machine_is_msm8625_qrd7() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5()) { if (cont_splash_enabled) { /* increase ref count of ext power */ qrd_lcd_splash_power_vote(1); mdp_pdata.cont_splash_enabled = 1; /* FIXME: Need these flags to indicate backlight driver the initial backlight level */ mipi_NT35510_pdata.cont_splash_enabled = 1; mipi_NT35510_alaska_pdata.cont_splash_enabled = 1; mipi_himax_pdata.cont_splash_enabled = 1; } } /* default is NT35510 */ if (machine_is_msm8625_skua() && skua_panel_is_himax()) { skua_fb_devices[1] = &mipi_dsi_himax_panel_device; skua_backlight_device.dev.platform_data = &mipi_himax_pdata; } msm7x27a_set_display_params(prim_panel_name); if (machine_is_msm8225_cellon()) platform_add_devices(c8680_fb_devices, ARRAY_SIZE(c8680_fb_devices)); else if (machine_is_msm7627a_qrd1()) platform_add_devices(qrd_fb_devices, ARRAY_SIZE(qrd_fb_devices)); else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a() || machine_is_msm8625_evt()) { platform_add_devices(evb_fb_devices, ARRAY_SIZE(evb_fb_devices)); } else if (machine_is_msm8625_skua()) platform_add_devices(skua_fb_devices, ARRAY_SIZE(skua_fb_devices)); else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) { platform_add_devices(qrd3_fb_devices, ARRAY_SIZE(qrd3_fb_devices)); } else platform_add_devices(msm_fb_devices, ARRAY_SIZE(msm_fb_devices)); msm_fb_register_device("mdp", &mdp_pdata); if (machine_is_msm7625a_surf() || machine_is_msm7x27a_surf() || machine_is_msm8625_surf() || machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) msm_fb_register_device("lcdc", &lcdc_pdata); #ifdef CONFIG_FB_MSM_MIPI_DSI msm_fb_register_device("mipi_dsi", &mipi_dsi_pdata); #endif }
static int msm_fb_detect_panel(const char *name) { int ret = -EPERM; if (machine_is_msm7x27a_surf() || machine_is_msm7x27a_m3eu()) { if (!strncmp(name, "lcdc_toshiba_fwvga_pt", 21)) ret = 0; } else { ret = -ENODEV; } return ret; }
static void __init register_i2c_devices(void) { /* LGE_CHANGE : [email protected] - add LGE specific machine name */ if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf() || machine_is_msm7x27a_u0() ) sx150x_data[SX150X_CORE].io_open_drain_ena = 0xe0f0; core_exp_i2c_info[0].platform_data = &sx150x_data[SX150X_CORE]; i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, core_exp_i2c_info, ARRAY_SIZE(core_exp_i2c_info)); }
static int config_i2s(int mode) { int pin, rc = 0; if (mode == FM_I2S_ON) { if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) config_pcm_i2s_mode(0); pr_err("%s mode = FM_I2S_ON", __func__); rc = switch_pcm_i2s_reg_mode(0); if (rc) { pr_err("switch mode failed"); return rc; } for (pin = 0; pin < ARRAY_SIZE(fm_i2s_config_power_on); pin++) { rc = gpio_tlmm_config( fm_i2s_config_power_on[pin], GPIO_CFG_ENABLE ); if (rc < 0) return rc; } } else if (mode == FM_I2S_OFF) { pr_err("%s mode = FM_I2S_OFF", __func__); rc = switch_pcm_i2s_reg_mode(1); if (rc) { pr_err("switch mode failed"); return rc; } for (pin = 0; pin < ARRAY_SIZE(fm_i2s_config_power_off); pin++) { rc = gpio_tlmm_config( fm_i2s_config_power_off[pin], GPIO_CFG_ENABLE ); if (rc < 0) return rc; } } return rc; }
static int mipi_dsi_panel_msm_power(int on) { /*++ Huize - 20120927 Modify for identifying what the code is used by customization ++*/ #ifdef DISPLAY_CUSTOMIZATION int rc = 0; if (unlikely(!dsi_gpio_initialized)) { pr_emerg("%s\n", __func__); #ifndef CONFIG_LEDS_CHIP_LM3533 rc = gpio_request(GPIO_BACKLIGHT_EN, "gpio_bl_en"); if (rc < 0) { pr_err("failed to request gpio_bl_en\n"); return rc; } rc = gpio_tlmm_config( GPIO_CFG(GPIO_BACKLIGHT_EN,0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); #endif if (rc) { pr_err("Failed to enable gpio_bl_en\n"); goto fail_gpio1; } rc = regulator_bulk_get(NULL, ARRAY_SIZE(regs_dsi), regs_dsi); if (rc) { pr_err("%s: could not get regulators: %d\n", __func__, rc); goto fail_gpio2; } rc = regulator_bulk_set_voltage(ARRAY_SIZE(regs_dsi), regs_dsi); if (rc) { pr_err("%s: could not set voltages: %d\n", __func__, rc); goto fail_vreg; } dsi_gpio_initialized = 1; } #else int rc = 0; uint32_t lcdc_reset_cfg; /* I2C-controlled GPIO Expander -init of the GPIOs very late */ if (unlikely(!dsi_gpio_initialized)) { pmapp_disp_backlight_init(); rc = gpio_request(GPIO_DISPLAY_PWR_EN, "gpio_disp_pwr"); if (rc < 0) { pr_err("failed to request gpio_disp_pwr\n"); return rc; } if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { rc = gpio_direction_output(GPIO_DISPLAY_PWR_EN, 1); if (rc < 0) { pr_err("failed to enable display pwr\n"); goto fail_gpio1; } rc = gpio_request(GPIO_BACKLIGHT_EN, "gpio_bkl_en"); if (rc < 0) { pr_err("failed to request gpio_bkl_en\n"); goto fail_gpio1; } rc = gpio_direction_output(GPIO_BACKLIGHT_EN, 1); if (rc < 0) { pr_err("failed to enable backlight\n"); goto fail_gpio2; } } rc = regulator_bulk_get(NULL, ARRAY_SIZE(regs_dsi), regs_dsi); if (rc) { pr_err("%s: could not get regulators: %d\n", __func__, rc); goto fail_gpio2; } rc = regulator_bulk_set_voltage(ARRAY_SIZE(regs_dsi), regs_dsi); if (rc) { pr_err("%s: could not set voltages: %d\n", __func__, rc); goto fail_vreg; } if (pmapp_disp_backlight_set_brightness(100)) pr_err("backlight set brightness failed\n"); dsi_gpio_initialized = 1; } if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { gpio_set_value_cansleep(GPIO_DISPLAY_PWR_EN, on); gpio_set_value_cansleep(GPIO_BACKLIGHT_EN, on); } else if (machine_is_msm7x27a_ffa() || machine_is_msm7625a_ffa() || machine_is_msm8625_ffa()) { if (on) { /* This line drives an active low pin on FFA */ rc = gpio_direction_output(GPIO_DISPLAY_PWR_EN, !on); if (rc < 0) pr_err("failed to set direction for " "display pwr\n"); } else { gpio_set_value_cansleep(GPIO_DISPLAY_PWR_EN, !on); rc = gpio_direction_input(GPIO_DISPLAY_PWR_EN); if (rc < 0) pr_err("failed to set direction for " "display pwr\n"); } } if (on) { gpio_set_value_cansleep(GPIO_LCDC_BRDG_PD, 0); if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { lcdc_reset_cfg = readl_relaxed(lcdc_reset_ptr); rmb(); lcdc_reset_cfg &= ~1; writel_relaxed(lcdc_reset_cfg, lcdc_reset_ptr); msleep(20); wmb(); lcdc_reset_cfg |= 1; writel_relaxed(lcdc_reset_cfg, lcdc_reset_ptr); } else { gpio_set_value_cansleep(GPIO_LCDC_BRDG_RESET_N, 0); msleep(20); gpio_set_value_cansleep(GPIO_LCDC_BRDG_RESET_N, 1); } } else { gpio_set_value_cansleep(GPIO_LCDC_BRDG_PD, 1); } #endif /*-- Huize - 20120927 Modify for identifying what the code is used by customization --*/ rc = on ? regulator_bulk_enable(ARRAY_SIZE(regs_dsi), regs_dsi) : regulator_bulk_disable(ARRAY_SIZE(regs_dsi), regs_dsi); if (rc) pr_err("%s: could not %sable regulators: %d\n", __func__, on ? "en" : "dis", rc); return rc; fail_vreg: regulator_bulk_free(ARRAY_SIZE(regs_dsi), regs_dsi); fail_gpio2: gpio_free(GPIO_BACKLIGHT_EN); fail_gpio1: //Jordan-20111230 , remove // gpio_free(GPIO_DISPLAY_PWR_EN); dsi_gpio_initialized = 0; return rc; }
static int msm_fb_detect_panel(const char *name) { int ret = -ENODEV; if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, "lcdc_toshiba_fwvga_pt", 21) || !strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7x27a_ffa() || machine_is_msm7625a_ffa() || machine_is_msm8625_ffa()) { if (!strncmp(name, "mipi_cmd_renesas_fwvga", 22)) ret = 0; } else if (machine_is_msm7627a_qrd1()) { if (!strncmp(name, "mipi_video_truly_wvga", 21)) ret = 0; } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) { if (!strncmp(name, "lcdc_truly_hvga_ips3p2335_pt", 28)) ret = 0; } else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { if (cont_splash_enabled == 1) { #if defined CONFIG_FB_MSM_MIPI_TCL_TD_TNFW4602_2_VIDEO_MODE if (!strncmp(name, LCD_MODULE_NAME, strlen(LCD_MODULE_NAME))) #else if (!strncmp(name, "mipi_cmd_nt35510_wvga", 21)) #endif ret = 0; } else if (cont_splash_enabled == 2) { #if defined CONFIG_FB_MSM_MIPI_TCL_TD_TNFW4602_2_VIDEO_MODE if (!strncmp(name, LCD_MODULE_NAME, strlen(LCD_MODULE_NAME))) #else if (!strncmp(name, "mipi_cmd_nt35510_wvga", 21)) #endif ret = 0; } else { #if defined CONFIG_FB_MSM_MIPI_TCL_TD_TNFW4602_2_VIDEO_MODE if (!strncmp(name, LCD_MODULE_NAME, strlen(LCD_MODULE_NAME))) #else if (!strncmp(name, "mipi_cmd_nt35510_wvga", 21)) #endif ret = 0; } } else if (machine_is_msm8625_skua()) { if (!strncmp(name, "mipi_video_himax_wvga", 21) && skua_panel_is_himax()) ret = 0; else if (!strncmp(name, "mipi_cmd_nt35510_alaska_wvga", 28) && !skua_panel_is_himax()) ret = 0; } else if (machine_is_msm8625_evt()) { if (!strncmp(name, "mipi_video_nt35510_wvga", 23)) ret = 0; } #if !defined(CONFIG_FB_MSM_LCDC_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_MIPI_PANEL_AUTO_DETECT) && \ !defined(CONFIG_FB_MSM_LCDC_MIPI_PANEL_AUTO_DETECT) if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { if (!strncmp(name, LCDC_TOSHIBA_FWVGA_PANEL_NAME, strnlen(LCDC_TOSHIBA_FWVGA_PANEL_NAME, PANEL_NAME_MAX_LEN))) return 0; } #endif return ret; }
/* FIH-SW-MM-VH-DISPLAY-JB00*[ */ static int msm_fb_dsi_client_msm_reset(int hold) { int rc = 0; static int dsi_reset_initialized = 0; printk(KERN_INFO "[DISPLAY]%s: E, hold <%d>\n", __func__, hold); if (dsi_reset_initialized == 0) { rc = gpio_request(GPIO_LCM_RESET, "gpio_disp_pwr"); if (rc < 0) { pr_err("[DISPLAY] %s: Failed to request lcm_reset, rc <%d>\n", __func__, rc); //return rc; } rc = gpio_tlmm_config(GPIO_CFG(GPIO_LCM_RESET, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (unlikely(fih_get_product_phase() < Phase_SP2)) { printk(KERN_ALERT "[DISPLAY]%s: <%d> < SP2\n", __func__, fih_get_product_phase()); rc = gpio_request(GPIO_LCM_BKL_EN, "lcm_bkl_en"); if (rc < 0) { pr_err("[DISPLAY] %s: Failed to request lcm_bkl_en\n", __func__); //goto gpio_error; } rc = gpio_tlmm_config(GPIO_CFG(GPIO_LCM_BKL_EN, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (rc < 0) { pr_err("[DISPLAY] %s: Failed lcm_bkl_en enable\n", __func__); //goto gpio_error2; } } dsi_reset_initialized = 1; } if (hold) { gpio_direction_output(GPIO_LCM_RESET, 0); } else { #ifdef CONFIG_FIH_HR_MSLEEP rc |= gpio_direction_output(GPIO_LCM_RESET, 1); hr_msleep(5); rc |= gpio_direction_output(GPIO_LCM_RESET, 0); hr_msleep(5); rc |= gpio_direction_output(GPIO_LCM_RESET, 1); #else rc |= gpio_direction_output(GPIO_LCM_RESET, 1); msleep(5); rc |= gpio_direction_output(GPIO_LCM_RESET, 0); msleep(5); rc |= gpio_direction_output(GPIO_LCM_RESET, 1); #endif } #ifdef CONFIG_FIH_HR_MSLEEP hr_msleep(150); #else msleep(150); #endif #if 0 if (!rc) { if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf() || machine_is_msm8625_surf()) { lcdc_reset_ptr = ioremap_nocache(LCDC_RESET_PHYS, sizeof(uint32_t)); printk(KERN_ERR "[DISPLAY]%s: surf\n", __func__); if (!lcdc_reset_ptr) return 0; } printk(KERN_ERR "[DISPLAY]%s: X, rc <%d>\n", __func__, rc); return rc; } else { //goto gpio_error; } #endif #if 0 gpio_error2: pr_err("Failed GPIO bridge pd\n"); gpio_free(GPIO_LCDC_BRDG_PD); gpio_error: pr_err("Failed GPIO bridge reset\n"); gpio_free(GPIO_LCDC_BRDG_RESET_N); #endif printk(KERN_INFO "[DISPLAY]%s: X, rc <%d>\n", __func__, rc); return rc; }
void __init msm_fb_add_devices(void) { int rc = 0; #if 1 // #suwg. printk("xxx %s \n",__func__); printk("machine_is_msm7627a_qrd1 %d\n",machine_is_msm7627a_qrd1()); printk("machine_is_msm8625q_skud %d\n",machine_is_msm8625q_skud()); printk("machine_is_msm7x27a_qrd5a %d\n",machine_is_msm7x27a_qrd5a()); printk("machine_is_msm8625_qrd5 %d\n",machine_is_msm8625_qrd5()); printk("disable_splash %d\n",disable_splash); msm7x27a_set_display_params(prim_panel_name); if (disable_splash) mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(odmm_fb_devices, ARRAY_SIZE(odmm_fb_devices)); msm_fb_register_device("mdp", &mdp_pdata); //#ifdef CONFIG_FB_MSM_MIPI_DSI msm_fb_register_device("mipi_dsi", &mipi_dsi_pdata); //#endif return; #endif msm7x27a_set_display_params(prim_panel_name); if (machine_is_msm7627a_qrd1()) platform_add_devices(qrd_fb_devices, ARRAY_SIZE(qrd_fb_devices)); else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a()) { mipi_NT35510_pdata.bl_lock = 1; mipi_NT35516_pdata.bl_lock = 1; if (disable_splash) mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(evb_fb_devices, ARRAY_SIZE(evb_fb_devices)); } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) { sku3_lcdc_lcd_camera_power_init(); mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(qrd3_fb_devices, ARRAY_SIZE(qrd3_fb_devices)); } else if (machine_is_msm8625q_skud() || machine_is_msm8625q_evbd()) { if (disable_splash) mdp_pdata.cont_splash_enabled = 0x0; /* SKUD and SKUD' use different lane connection */ if (cpu_is_msm8625q()){ if(!strncmp((char *)prim_panel_name, "mipi_video_hx8392a_720p", 23)) mipi_dsi_pdata.dlane_swap = 3; else mipi_dsi_pdata.dlane_swap = 0; pr_info("[DISP] The prim panel name is %s, Swap lane is %d\n", prim_panel_name,mipi_dsi_pdata.dlane_swap); } platform_add_devices(skud_fb_devices, ARRAY_SIZE(skud_fb_devices)); } else if (machine_is_msm8625q_skue()) { if (disable_splash) mdp_pdata.cont_splash_enabled = 0x0; /* SKUE and SKUE' use different lane connection */ if (cpu_is_msm8625q()) mipi_dsi_pdata.dlane_swap = 0; platform_add_devices(skue_fb_devices, ARRAY_SIZE(skue_fb_devices)); } else { mdp_pdata.cont_splash_enabled = 0x0; platform_add_devices(msm_fb_devices, ARRAY_SIZE(msm_fb_devices)); } msm_fb_register_device("mdp", &mdp_pdata); if (machine_is_msm7625a_surf() || machine_is_msm7x27a_surf() || machine_is_msm8625_surf() || machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) msm_fb_register_device("lcdc", &lcdc_pdata); #ifdef CONFIG_FB_MSM_MIPI_DSI msm_fb_register_device("mipi_dsi", &mipi_dsi_pdata); #endif if (machine_is_msm7627a_evb() || machine_is_msm8625_evb() || machine_is_msm8625_qrd5() || machine_is_msm7x27a_qrd5a() || machine_is_msm8625q_evbd()) { gpio_reg_2p85v = regulator_get(&mipi_dsi_device.dev, "lcd_vdd"); if (IS_ERR(gpio_reg_2p85v)) pr_err("%s:ext_2p85v regulator get failed", __func__); gpio_reg_1p8v = regulator_get(&mipi_dsi_device.dev, "lcd_vddi"); if (IS_ERR(gpio_reg_1p8v)) pr_err("%s:ext_1p8v regulator get failed", __func__); if (mdp_pdata.cont_splash_enabled) { /*Enable EXT_2.85 and 1.8 regulators*/ rc = regulator_enable(gpio_reg_2p85v); if (rc < 0) pr_err("%s: reg enable failed\n", __func__); rc = regulator_enable(gpio_reg_1p8v); if (rc < 0) pr_err("%s: reg enable failed\n", __func__); } } }
static int mipi_dsi_panel_power(int on) { int rc = 0; uint32_t lcdc_reset_cfg; /* I2C-controlled GPIO Expander -init of the GPIOs very late */ if (unlikely(!dsi_gpio_initialized)) { pmapp_disp_backlight_init(); rc = gpio_request(GPIO_DISPLAY_PWR_EN, "gpio_disp_pwr"); if (rc < 0) { pr_err("failed to request gpio_disp_pwr\n"); return rc; } if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf()) { rc = gpio_direction_output(GPIO_DISPLAY_PWR_EN, 1); if (rc < 0) { pr_err("failed to enable display pwr\n"); goto fail_gpio1; } rc = gpio_request(GPIO_BACKLIGHT_EN, "gpio_bkl_en"); if (rc < 0) { pr_err("failed to request gpio_bkl_en\n"); goto fail_gpio1; } rc = gpio_direction_output(GPIO_BACKLIGHT_EN, 1); if (rc < 0) { pr_err("failed to enable backlight\n"); goto fail_gpio2; } } rc = regulator_bulk_get(NULL, ARRAY_SIZE(regs_dsi), regs_dsi); if (rc) { pr_err("%s: could not get regulators: %d\n", __func__, rc); goto fail_gpio2; } rc = regulator_bulk_set_voltage(ARRAY_SIZE(regs_dsi), regs_dsi); if (rc) { pr_err("%s: could not set voltages: %d\n", __func__, rc); goto fail_vreg; } if (pmapp_disp_backlight_set_brightness(100)) pr_err("backlight set brightness failed\n"); dsi_gpio_initialized = 1; } if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf()) { gpio_set_value_cansleep(GPIO_DISPLAY_PWR_EN, on); gpio_set_value_cansleep(GPIO_BACKLIGHT_EN, on); } else if (machine_is_msm7x27a_ffa() || machine_is_msm7625a_ffa()) { if (on) { /* This line drives an active low pin on FFA */ rc = gpio_direction_output(GPIO_DISPLAY_PWR_EN, !on); if (rc < 0) pr_err("failed to set direction for " "display pwr\n"); } else { gpio_set_value_cansleep(GPIO_DISPLAY_PWR_EN, !on); rc = gpio_direction_input(GPIO_DISPLAY_PWR_EN); if (rc < 0) pr_err("failed to set direction for " "display pwr\n"); } } if (on) { gpio_set_value_cansleep(GPIO_LCDC_BRDG_PD, 0); if (machine_is_msm7x27a_surf() || machine_is_msm7625a_surf()) { lcdc_reset_cfg = readl_relaxed(lcdc_reset_ptr); rmb(); lcdc_reset_cfg &= ~1; writel_relaxed(lcdc_reset_cfg, lcdc_reset_ptr); msleep(20); wmb(); lcdc_reset_cfg |= 1; writel_relaxed(lcdc_reset_cfg, lcdc_reset_ptr); } else { gpio_set_value_cansleep(GPIO_LCDC_BRDG_RESET_N, 0); msleep(20); gpio_set_value_cansleep(GPIO_LCDC_BRDG_RESET_N, 1); } } else { gpio_set_value_cansleep(GPIO_LCDC_BRDG_PD, 1); } rc = on ? regulator_bulk_enable(ARRAY_SIZE(regs_dsi), regs_dsi) : regulator_bulk_disable(ARRAY_SIZE(regs_dsi), regs_dsi); if (rc) pr_err("%s: could not %sable regulators: %d\n", __func__, on ? "en" : "dis", rc); return rc; fail_vreg: regulator_bulk_free(ARRAY_SIZE(regs_dsi), regs_dsi); fail_gpio2: gpio_free(GPIO_BACKLIGHT_EN); fail_gpio1: gpio_free(GPIO_DISPLAY_PWR_EN); dsi_gpio_initialized = 0; return rc; }