static int cyttsp5_i2c_probe(struct i2c_client *client, const struct i2c_device_id *i2c_id) { struct device *dev = &client->dev; #ifdef CONFIG_TOUCHSCREEN_CYTTSP5_DEVICETREE_SUPPORT const struct of_device_id *match; #endif #if defined(CONFIG_FB_MSM8x26_MDSS_CHECK_LCD_CONNECTION) if (get_lcd_attached() == 0) { dev_err(&client->dev, "%s : get_lcd_attached()=0 \n", __func__); return -EIO; } #endif if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { dev_err(dev, "I2C functionality not Supported\n"); return -EIO; } #ifdef CONFIG_TOUCHSCREEN_CYTTSP5_DEVICETREE_SUPPORT match = of_match_device(of_match_ptr(cyttsp5_i2c_of_match), dev); if (match) cyttsp5_devtree_create_and_get_pdata(dev); #endif return cyttsp5_probe(&cyttsp5_i2c_bus_ops, &client->dev, client->irq, CY_I2C_DATA_SIZE); }
static void mdss_dsi_panel_bklt_dcs(struct mdss_dsi_ctrl_pdata *ctrl, int level) { struct dcs_cmd_req cmdreq; if (get_lcd_attached() == 0) { printk("%s: get_lcd_attached(0)!\n",__func__); return ; } pr_debug("%s: level=%d\n", __func__, level); led_pwm1[1] = (unsigned char)level; memset(&cmdreq, 0, sizeof(cmdreq)); cmdreq.cmds = &backlight_cmd; cmdreq.cmds_cnt = 1; cmdreq.flags = CMD_REQ_COMMIT | CMD_CLK_CTRL; cmdreq.rlen = 0; cmdreq.cb = NULL; mdss_dsi_cmdlist_put(ctrl, &cmdreq); if(ctrl->ndx == DSI_CTRL_0) mdss_dsi_cmdlist_put(left_back_up_data, &cmdreq); }
static void mdss_panel_init(struct samsung_display_driver_data *vdd) { pr_info("%s : %s", __func__, vdd->panel_name); vdd->support_panel_max = S6D7AA0_LSL080AL03_SUPPORT_PANEL_COUNT; vdd->manufacture_id_dsi[vdd->support_panel_max - 1] = get_lcd_attached("GET"); vdd->support_cabc = true; if(system_rev>=1) vdd->support_mdnie_lite = true; vdd->mdnie_tune_size1 = 17; vdd->mdnie_tune_size2 = 25; vdd->mdnie_tune_size3 = 25; vdd->mdnie_tune_size4 = 25; vdd->mdnie_tune_size5 = 19; vdd->mdnie_tune_size6 = 8; /* ON/OFF */ vdd->panel_func.samsung_panel_on_pre = mdss_panel_on_pre; vdd->panel_func.samsung_panel_on_post = NULL; vdd->panel_func.samsung_panel_off_pre = mdss_panel_off_pre; vdd->panel_func.samsung_panel_off_post = NULL; vdd->panel_func.samsung_backlight_late_on = backlight_tft_late_on; /* DDI RX */ vdd->panel_func.samsung_panel_revision = mdss_panel_revision; vdd->panel_func.samsung_manufacture_date_read = NULL; vdd->panel_func.samsung_ddi_id_read = NULL; vdd->panel_func.samsung_hbm_read = NULL; vdd->panel_func.samsung_mdnie_read = NULL; vdd->panel_func.samsung_smart_dimming_init = NULL; /* Brightness */ vdd->panel_func.samsung_brightness_tft_pwm_ldi = mdss_brightness_tft_pwm; vdd->panel_func.samsung_brightness_hbm_off = NULL; vdd->panel_func.samsung_brightness_aid = NULL; vdd->panel_func.samsung_brightness_acl_on = NULL; vdd->panel_func.samsung_brightness_acl_percent = NULL; vdd->panel_func.samsung_brightness_acl_off = NULL; vdd->panel_func.samsung_brightness_elvss = NULL; vdd->panel_func.samsung_brightness_elvss_temperature1 = NULL; vdd->panel_func.samsung_brightness_elvss_temperature2 = NULL; vdd->panel_func.samsung_brightness_vint = NULL; vdd->panel_func.samsung_brightness_gamma = NULL; vdd->brightness[0].brightness_packet_tx_cmds_dsi.link_state = DSI_HS_MODE; vdd->mdss_panel_tft_outdoormode_update=mdss_panel_tft_outdoormode_update; dsi_update_mdnie_data(); mdss_panel_attach_set(vdd->ctrl_dsi[DISPLAY_1], true); }
static void mdss_panel_init(struct samsung_display_driver_data *vdd) { pr_info("%s : %s", __func__, vdd->panel_name); vdd->support_panel_max = HX8389C_GH9607501A_SUPPORT_PANEL_COUNT; vdd->support_mdnie_lite = true; vdd->mdnie_tune_size1 = 2; vdd->mdnie_tune_size2 = 0; vdd->manufacture_id_dsi[vdd->support_panel_max - 1] = get_lcd_attached("GET"); if (vdd->ctrl_dsi[DISPLAY_1]->bklt_ctrl == BL_DCS_CMD) vdd->support_cabc = true; /* ON/OFF */ vdd->panel_func.samsung_panel_on_pre = mdss_panel_on_pre; vdd->panel_func.samsung_panel_on_post = mdss_panel_on_post; vdd->panel_func.samsung_panel_off_pre = NULL; vdd->panel_func.samsung_panel_off_post = mdss_panel_off_post; vdd->panel_func.samsung_backlight_late_on = backlight_tft_late_on; /* DDI RX */ vdd->panel_func.samsung_panel_revision = mdss_panel_revision; vdd->panel_func.samsung_manufacture_date_read = NULL; vdd->panel_func.samsung_ddi_id_read = NULL; vdd->panel_func.samsung_hbm_read = NULL; vdd->panel_func.samsung_mdnie_read = NULL; vdd->panel_func.samsung_smart_dimming_init = NULL; /* Brightness */ vdd->panel_func.samsung_brightness_tft_pwm_ldi = mdss_brightness_tft_pwm; vdd->panel_func.samsung_brightness_tft_pwm = mdss_panel_tft_pwm_control; vdd->panel_func.samsung_brightness_hbm_off = NULL; vdd->panel_func.samsung_brightness_aid = NULL; vdd->panel_func.samsung_brightness_acl_on = NULL; vdd->panel_func.samsung_brightness_acl_percent = NULL; vdd->panel_func.samsung_brightness_acl_off = NULL; vdd->panel_func.samsung_brightness_elvss = NULL; vdd->panel_func.samsung_brightness_elvss_temperature1 = NULL; vdd->panel_func.samsung_brightness_elvss_temperature2 = NULL; vdd->panel_func.samsung_brightness_vint = NULL; vdd->panel_func.samsung_brightness_gamma = NULL; vdd->brightness[0].brightness_packet_tx_cmds_dsi.link_state = DSI_HS_MODE; dsi_update_mdnie_data(); mdss_panel_attach_set(vdd->ctrl_dsi[DISPLAY_1], true); }
void sending_tuning_cmd(void) { struct msm_fb_data_type *mfd; struct dcs_cmd_req cmdreq; #if defined (CONFIG_FB_MSM_MIPI_SAMSUNG_OLED_VIDEO_QHD_PT) if(get_lcd_attached() == 0) return; #endif mfd = (struct msm_fb_data_type *) registered_fb[0]->par; if (mfd->panel.type == MIPI_VIDEO_PANEL) mutex_lock(&dsi_tx_mutex); else mutex_lock(&mfd->dma->ov_mutex); if (mfd->resume_state == MIPI_SUSPEND_STATE) { if (mfd->panel.type == MIPI_VIDEO_PANEL) mutex_unlock(&dsi_tx_mutex); else mutex_unlock(&mfd->dma->ov_mutex); } else { #ifdef MDNIE_LITE_TUN_DATA_DEBUG print_tun_data(); #else DPRINT(" send tuning cmd!!\n"); #endif cmdreq.cmds = mdni_tune_cmd; cmdreq.cmds_cnt = ARRAY_SIZE(mdni_tune_cmd); cmdreq.flags = CMD_REQ_COMMIT; cmdreq.rlen = 0; cmdreq.cb = NULL; mipi_dsi_cmdlist_put(&cmdreq); if (mfd->panel.type == MIPI_VIDEO_PANEL) mutex_unlock(&dsi_tx_mutex); else mutex_unlock(&mfd->dma->ov_mutex); } }
static void mdss_dsi_panel_cmds_send(struct mdss_dsi_ctrl_pdata *ctrl, struct dsi_panel_cmds *pcmds) { struct dcs_cmd_req cmdreq; if (get_lcd_attached() == 0) { printk("%s: get_lcd_attached(0)!\n",__func__); return ; } memset(&cmdreq, 0, sizeof(cmdreq)); cmdreq.cmds = pcmds->cmds; cmdreq.cmds_cnt = pcmds->cmd_cnt; cmdreq.flags = CMD_REQ_COMMIT; cmdreq.rlen = 0; cmdreq.cb = NULL; mdss_dsi_cmdlist_put(left_back_up_data, &cmdreq); }
void proximity_ldo_enable(int onoff) { int ret = 0; if (get_lcd_attached() == 0) { pr_err("skip proximity_ldo_enable : LCD is not attached\n"); return; } if(!sub_ldo1){ sub_ldo1 = regulator_get(NULL, "lp8720_ldo1"); if (IS_ERR(sub_ldo1)){ pr_err("lp8720 : could not get sub_ldo1, rc = %ld\n", PTR_ERR(sub_ldo1)); sub_ldo1 = NULL; } if(sub_ldo1 != NULL){ ret = regulator_set_voltage(sub_ldo1, 1800000, 1800000); if (ret) pr_err("set_voltage sub_ldo1 failed, rc=%d\n", ret); } } if(sub_ldo1 != NULL){ if(onoff){ printk(KERN_ERR "[SSP] %s : on\n",__func__); ret = regulator_enable(sub_ldo1); if (ret) pr_err("enable sub_ldo1 failed, rc=%d\n", ret); } else{ printk(KERN_ERR "[SSP] %s : off ",__func__); ret = regulator_disable(sub_ldo1); if (ret) pr_err("enable sub_ldo1 failed, rc=%d\n", ret); } gpio_tlmm_config(GPIO_CFG(561, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); gpio_set_value(561, 1); }else{ pr_err("sub_ldo1 is NULL, failed\n"); } }
void mDNIe_Set_Mode(enum Lcd_mDNIe_UI mode) { struct msm_fb_data_type *mfd; mfd = mdnie_msd->mfd; DPRINT("mDNIe_Set_Mode start , mode(%d), background(%d)\n", mode, mdnie_tun_state.background); if (get_lcd_attached() == 0) { printk("%s: LCD not connected!\n",__func__); return; } if (mfd->resume_state == MIPI_SUSPEND_STATE) { DPRINT("[ERROR] not ST_DSI_RESUME. do not send mipi cmd.\n"); return; } if (!mdnie_tun_state.mdnie_enable) { DPRINT("[ERROR] mDNIE engine is OFF.\n"); return; } if (mode < mDNIe_UI_MODE || mode >= MAX_mDNIe_MODE) { DPRINT("[ERROR] wrong Scenario mode value : %d\n", mode); return; } if (mdnie_tun_state.negative) { DPRINT("already negative mode(%d), do not set background(%d)\n", mdnie_tun_state.negative, mdnie_tun_state.background); return; } play_speed_1_5 = 0; /* * Blind mode & Screen mode has separated menu. * To make a sync below code added. * Bline mode has priority than Screen mode */ if (mdnie_tun_state.blind == COLOR_BLIND) mode = mDNIE_BLINE_MODE; switch (mode) { #if defined (CONFIG_FB_MSM_MDSS_SDC_WXGA_PANEL) case mDNIe_UI_MODE: DPRINT(" = UI MODE =\n"); INPUT_PAYLOAD1(UI_1); INPUT_PAYLOAD2(UI_2); INPUT_PAYLOAD3(UI_3); INPUT_PAYLOAD4(UI_4); INPUT_PAYLOAD5(UI_5); INPUT_PAYLOAD6(UI_6); break; case mDNIe_VIDEO_MODE: DPRINT(" = VIDEO MODE =\n"); INPUT_PAYLOAD1(VIDEO_1); INPUT_PAYLOAD2(VIDEO_2); INPUT_PAYLOAD3(VIDEO_3); INPUT_PAYLOAD4(VIDEO_4); INPUT_PAYLOAD5(VIDEO_5); INPUT_PAYLOAD6(VIDEO_6); break; case mDNIe_VIDEO_WARM_MODE: DPRINT(" = VIDEO WARM MODE =\n"); DPRINT("no data for WARM MODE..\n"); break; case mDNIe_VIDEO_COLD_MODE: DPRINT(" = VIDEO COLD MODE =\n"); DPRINT("no data for COLD MODE..\n"); break; case mDNIe_CAMERA_MODE: DPRINT(" = CAMERA MODE =\n"); INPUT_PAYLOAD1(CAMERA_1); INPUT_PAYLOAD2(CAMERA_2); INPUT_PAYLOAD3(CAMERA_3); INPUT_PAYLOAD4(CAMERA_4); INPUT_PAYLOAD5(CAMERA_5); INPUT_PAYLOAD6(CAMERA_6); break; case mDNIe_NAVI: DPRINT(" = NAVI MODE =\n"); DPRINT("no data for NAVI MODE..\n"); break; case mDNIe_GALLERY: DPRINT(" = GALLERY MODE =\n"); INPUT_PAYLOAD1(GALLERY_1); INPUT_PAYLOAD2(GALLERY_2); INPUT_PAYLOAD3(GALLERY_3); INPUT_PAYLOAD4(GALLERY_4); INPUT_PAYLOAD5(GALLERY_5); INPUT_PAYLOAD6(GALLERY_6); break; case mDNIe_VT_MODE: DPRINT(" = VT MODE =\n"); INPUT_PAYLOAD1(VT_1); INPUT_PAYLOAD2(VT_2); INPUT_PAYLOAD3(VT_3); INPUT_PAYLOAD4(VT_4); INPUT_PAYLOAD5(VT_5); INPUT_PAYLOAD6(VT_6); break; #if defined(CONFIG_TDMB) case mDNIe_DMB_MODE: DPRINT(" = DMB MODE =\n"); DPRINT("no data for DMB MODE..\n"); break; case mDNIe_DMB_WARM_MODE: DPRINT(" = DMB WARM MODE =\n"); DPRINT("no data for DMB WARM MODE..\n"); break; case mDNIe_DMB_COLD_MODE: DPRINT(" = DMB COLD MODE =\n"); DPRINT("no data for DMB COLD MODE..\n"); break; #endif case mDNIe_BROWSER_MODE: DPRINT(" = BROWSER MODE =\n"); INPUT_PAYLOAD1(BROWSER_1); INPUT_PAYLOAD2(BROWSER_2); INPUT_PAYLOAD3(BROWSER_3); INPUT_PAYLOAD4(BROWSER_4); INPUT_PAYLOAD5(BROWSER_5); INPUT_PAYLOAD6(BROWSER_6); break; case mDNIe_eBOOK_MODE: DPRINT(" = eBOOK MODE =\n"); INPUT_PAYLOAD1(eBOOK_1); INPUT_PAYLOAD2(eBOOK_2); INPUT_PAYLOAD3(eBOOK_3); INPUT_PAYLOAD4(eBOOK_4); INPUT_PAYLOAD5(eBOOK_5); INPUT_PAYLOAD6(eBOOK_6); break; case mDNIe_EMAIL_MODE: DPRINT(" = EMAIL MODE =\n"); INPUT_PAYLOAD1(eMAIL_1); INPUT_PAYLOAD2(eMAIL_2); INPUT_PAYLOAD3(eMAIL_3); INPUT_PAYLOAD4(eMAIL_4); INPUT_PAYLOAD5(eMAIL_5); INPUT_PAYLOAD6(eMAIL_6); break; case mDNIE_BLINE_MODE: DPRINT(" = BLIND MODE =\n"); INPUT_PAYLOAD1(COLOR_BLIND_1); INPUT_PAYLOAD2(COLOR_BLIND_2); INPUT_PAYLOAD3(COLOR_BLIND_3); INPUT_PAYLOAD4(COLOR_BLIND_4); INPUT_PAYLOAD5(COLOR_BLIND_5); INPUT_PAYLOAD6(COLOR_BLIND_6); break; #else case mDNIe_UI_MODE: DPRINT(" = UI MODE =\n"); INPUT_PAYLOAD1(UI_1); INPUT_PAYLOAD2(UI_2); break; case mDNIe_VIDEO_MODE: DPRINT(" = VIDEO MODE =\n"); INPUT_PAYLOAD1(VIDEO_1); INPUT_PAYLOAD2(VIDEO_2); break; case mDNIe_VIDEO_WARM_MODE: DPRINT(" = VIDEO WARM MODE =\n"); DPRINT("no data for WARM MODE..\n"); break; case mDNIe_VIDEO_COLD_MODE: DPRINT(" = VIDEO COLD MODE =\n"); DPRINT("no data for COLD MODE..\n"); break; case mDNIe_CAMERA_MODE: DPRINT(" = CAMERA MODE =\n"); INPUT_PAYLOAD1(CAMERA_1); INPUT_PAYLOAD2(CAMERA_2); break; case mDNIe_NAVI: DPRINT(" = NAVI MODE =\n"); DPRINT("no data for NAVI MODE..\n"); break; case mDNIe_GALLERY: DPRINT(" = GALLERY MODE =\n"); INPUT_PAYLOAD1(GALLERY_1); INPUT_PAYLOAD2(GALLERY_2); break; case mDNIe_VT_MODE: DPRINT(" = VT MODE =\n"); INPUT_PAYLOAD1(VT_1); INPUT_PAYLOAD2(VT_2); break; #if defined(CONFIG_TDMB) case mDNIe_DMB_MODE: DPRINT(" = DMB MODE =\n"); INPUT_PAYLOAD1(TDMB_1); INPUT_PAYLOAD2(TDMB_2); break; case mDNIe_DMB_WARM_MODE: DPRINT(" = DMB WARM MODE =\n"); DPRINT("no data for DMB WARM MODE..\n"); break; case mDNIe_DMB_COLD_MODE: DPRINT(" = DMB COLD MODE =\n"); DPRINT("no data for DMB COLD MODE..\n"); break; #endif case mDNIe_BROWSER_MODE: DPRINT(" = BROWSER MODE =\n"); INPUT_PAYLOAD1(BROWSER_1); INPUT_PAYLOAD2(BROWSER_2); break; case mDNIe_eBOOK_MODE: DPRINT(" = eBOOK MODE =\n"); INPUT_PAYLOAD1(eBOOK_1); INPUT_PAYLOAD2(eBOOK_2); break; case mDNIe_EMAIL_MODE: DPRINT(" = EMAIL MODE =\n"); INPUT_PAYLOAD1(eMAIL_1); INPUT_PAYLOAD2(eMAIL_2); break; case mDNIE_BLINE_MODE: DPRINT(" = BLIND MODE =\n"); INPUT_PAYLOAD1(COLOR_BLIND_1); INPUT_PAYLOAD2(COLOR_BLIND_2); break; #endif default: DPRINT("[%s] no option (%d)\n", __func__, mode); return; } sending_tuning_cmd(); free_tun_cmd(); DPRINT("mDNIe_Set_Mode end , mode(%d), background(%d)\n", mode, mdnie_tun_state.background); }
static int mipi_dsi_on(struct platform_device *pdev) { int ret = 0; u32 clk_rate; struct msm_fb_data_type *mfd; struct fb_info *fbi; struct fb_var_screeninfo *var; struct msm_panel_info *pinfo; struct mipi_panel_info *mipi; u32 hbp, hfp, vbp, vfp, hspw, vspw, width, height; u32 ystride, bpp, data; u32 dummy_xres, dummy_yres; int target_type = 0; #if defined (CONFIG_MIPI_DSI_RESET_LP11) u32 tmp; #endif pr_info("%s+:\n", __func__); #if defined(CONFIG_MIPI_SAMSUNG_ESD_REFRESH) || defined(CONFIG_ESD_ERR_FG_RECOVERY) pdev_for_esd = pdev; #endif #ifdef CONFIG_DUAL_LCD if (mipi_dsi_pdev_switch == NULL) pr_debug( "%s : pdev_switch updated", __func__ ); mipi_dsi_pdev_switch = pdev; #endif // #ifdef CONFIG_DUAL_LCD #if defined (CONFIG_FB_MSM_MIPI_SAMSUNG_OLED_VIDEO_QHD_PT) if (get_lcd_attached() == 0) return ENODEV; #endif mfd = platform_get_drvdata(pdev); fbi = mfd->fbi; var = &fbi->var; pinfo = &mfd->panel_info; if (mipi_dsi_pdata && mipi_dsi_pdata->dsi_power_save) mipi_dsi_pdata->dsi_power_save(1); cont_splash_clk_ctrl(0); #if defined(CONFIG_MACH_LT02_CHN_CTC) if (mipi_dsi_pdata && mipi_dsi_pdata->active_reset) mipi_dsi_pdata->active_reset(1); /* high */ usleep(4000); ret = panel_next_on(pdev); usleep(1000); #endif mipi_dsi_prepare_ahb_clocks(); mipi_dsi_ahb_ctrl(1); clk_rate = mfd->fbi->var.pixclock; clk_rate = min(clk_rate, mfd->panel_info.clk_max); mipi_dsi_phy_ctrl(1); if (mdp_rev == MDP_REV_42 && mipi_dsi_pdata) target_type = mipi_dsi_pdata->target_type; mipi_dsi_phy_init(0, &(mfd->panel_info), target_type); mipi_dsi_clk_enable(); #if defined(CONFIG_FB_MSM_MIPI_SAMSUNG_OLED_VIDEO_QHD_PT_PANEL) mipi_dsi_configure_dividers(60); #endif #if defined(CONFIG_RUNTIME_MIPI_CLK_CHANGE) && defined(CONFIG_FB_MSM_MIPI_AMS367_OLED_VIDEO_WVGA_PT_PANEL) if (is_S6E88A()) mipi_AMS367AV_dynamic_fps_folder(in_mipi_dsi_NULL, pinfo); else mipi_AMS367_dynamic_fps_folder(in_mipi_dsi_NULL, pinfo); #endif MIPI_OUTP(MIPI_DSI_BASE + 0x114, 1); MIPI_OUTP(MIPI_DSI_BASE + 0x114, 0); hbp = var->left_margin; hfp = var->right_margin; vbp = var->upper_margin; vfp = var->lower_margin; hspw = var->hsync_len; vspw = var->vsync_len; width = mfd->panel_info.xres; height = mfd->panel_info.yres; mipi = &mfd->panel_info.mipi; if (mfd->panel_info.type == MIPI_VIDEO_PANEL) { dummy_xres = mfd->panel_info.lcdc.xres_pad; dummy_yres = mfd->panel_info.lcdc.yres_pad; if (mdp_rev >= MDP_REV_41) { MIPI_OUTP(MIPI_DSI_BASE + 0x20, ((hspw + hbp + width + dummy_xres) << 16 | (hspw + hbp))); MIPI_OUTP(MIPI_DSI_BASE + 0x24, ((vspw + vbp + height + dummy_yres) << 16 | (vspw + vbp))); MIPI_OUTP(MIPI_DSI_BASE + 0x28, (vspw + vbp + height + dummy_yres + vfp - 1) << 16 | (hspw + hbp + width + dummy_xres + hfp - 1)); } else { /* DSI_LAN_SWAP_CTRL */ MIPI_OUTP(MIPI_DSI_BASE + 0x00ac, mipi->dlane_swap); MIPI_OUTP(MIPI_DSI_BASE + 0x20, ((hbp + width + dummy_xres) << 16 | (hbp))); MIPI_OUTP(MIPI_DSI_BASE + 0x24, ((vbp + height + dummy_yres) << 16 | (vbp))); MIPI_OUTP(MIPI_DSI_BASE + 0x28, (vbp + height + dummy_yres + vfp) << 16 | (hbp + width + dummy_xres + hfp)); } MIPI_OUTP(MIPI_DSI_BASE + 0x2c, (hspw << 16)); MIPI_OUTP(MIPI_DSI_BASE + 0x30, 0); MIPI_OUTP(MIPI_DSI_BASE + 0x34, (vspw << 16)); } else { /* command mode */ if (mipi->dst_format == DSI_CMD_DST_FORMAT_RGB888) bpp = 3; else if (mipi->dst_format == DSI_CMD_DST_FORMAT_RGB666) bpp = 3; else if (mipi->dst_format == DSI_CMD_DST_FORMAT_RGB565) bpp = 2; else bpp = 3; /* Default format set to RGB888 */ ystride = width * bpp + 1; /* DSI_COMMAND_MODE_MDP_STREAM_CTRL */ data = (ystride << 16) | (mipi->vc << 8) | DTYPE_DCS_LWRITE; MIPI_OUTP(MIPI_DSI_BASE + 0x5c, data); MIPI_OUTP(MIPI_DSI_BASE + 0x54, data); /* DSI_COMMAND_MODE_MDP_STREAM_TOTAL */ data = height << 16 | width; MIPI_OUTP(MIPI_DSI_BASE + 0x60, data); MIPI_OUTP(MIPI_DSI_BASE + 0x58, data); } mipi_dsi_host_init(mipi); #if defined (CONFIG_MIPI_DSI_RESET_LP11) /* LP11 */ tmp = MIPI_INP(MIPI_DSI_BASE + 0xA8); tmp &= ~(1<<28); MIPI_OUTP(MIPI_DSI_BASE + 0xA8, tmp); wmb(); /* LP11 */ #if !defined(CONFIG_MACH_LT02_CHN_CTC) usleep(5000); if (mipi_dsi_pdata && mipi_dsi_pdata->active_reset) mipi_dsi_pdata->active_reset(1); /* high */ usleep(10000); #endif #endif #if defined(CONFIG_MACH_LT02_SPR) || defined(CONFIG_MACH_LT02_ATT) if(system_rev) ret = panel_next_on(pdev); #endif if (mipi->force_clk_lane_hs) { #ifndef CONFIG_MIPI_DSI_RESET_LP11 u32 tmp; #endif tmp = MIPI_INP(MIPI_DSI_BASE + 0xA8); tmp |= (1<<28); MIPI_OUTP(MIPI_DSI_BASE + 0xA8, tmp); wmb(); } if (mdp_rev >= MDP_REV_41) mutex_lock(&mfd->dma->ov_mutex); else down(&mfd->dma->mutex); #if !defined(CONFIG_MACH_LT02_CHN_CTC) #if defined(CONFIG_MACH_LT02_SPR) || defined(CONFIG_MACH_LT02_ATT) if(!system_rev) ret = panel_next_on(pdev); #else ret = panel_next_on(pdev); #endif #endif mipi_dsi_op_mode_config(mipi->mode); if (mfd->panel_info.type == MIPI_CMD_PANEL) { if (pinfo->lcd.vsync_enable) { if (pinfo->lcd.hw_vsync_mode && vsync_gpio >= 0) { if (mdp_rev >= MDP_REV_41) { if (gpio_request(vsync_gpio, "MDP_VSYNC") == 0) gpio_direction_input( vsync_gpio); else pr_err("%s: unable to \ request gpio=%d\n", __func__, vsync_gpio); } else if (mdp_rev == MDP_REV_303) { if (!tlmm_settings && gpio_request( vsync_gpio, "MDP_VSYNC") == 0) { ret = gpio_tlmm_config( GPIO_CFG( vsync_gpio, 1, GPIO_CFG_INPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (ret) { pr_err( "%s: unable to config \ tlmm = %d\n", __func__, vsync_gpio); } tlmm_settings = TRUE; gpio_direction_input( vsync_gpio); } else { if (!tlmm_settings) { pr_err( "%s: unable to request \ gpio=%d\n", __func__, vsync_gpio); } } }
void mDNIe_Set_Mode(enum Lcd_mDNIe_UI mode) { struct msm_fb_data_type *mfd; mfd = mdnie_msd->mfd; DPRINT("mDNIe_Set_Mode start , mode(%d), background(%d)\n", mode, mdnie_tun_state.background); if (get_lcd_attached() == 0) { printk("%s: LCD not connected!\n",__func__); return; } if (mfd->resume_state == MIPI_SUSPEND_STATE) { DPRINT("[ERROR] not ST_DSI_RESUME. do not send mipi cmd.\n"); return; } if (!mdnie_tun_state.mdnie_enable) { DPRINT("[ERROR] mDNIE engine is OFF.\n"); return; } if (mode < mDNIe_UI_MODE || mode >= MAX_mDNIe_MODE) { DPRINT("[ERROR] wrong Scenario mode value : %d\n", mode); return; } if (mdnie_tun_state.negative) { DPRINT("already negative mode(%d), do not set background(%d)\n", mdnie_tun_state.negative, mdnie_tun_state.background); return; } play_speed_1_5 = 0; /* * Blind mode & Screen mode has separated menu. * To make a sync below code added. * Bline mode has priority than Screen mode */ if (mdnie_tun_state.blind == COLOR_BLIND) mode = mDNIE_BLINE_MODE; #if defined(CONFIG_SEC_RUBENS_PROJECT) if (mdnie_msd->dstat.auto_brightness >= 6) { if ((mdnie_tun_state.scenario == mDNIe_eBOOK_MODE) || (mdnie_tun_state.scenario == mDNIe_BROWSER_MODE)) mode = mDNIE_OUTDOOR_MODE_FOR_TEXT; else mode = mDNIE_OUTDOOR_MODE; } else { if (mdnie_tun_state.blind == COLOR_BLIND) mode = mDNIE_BLINE_MODE; else mode = mdnie_tun_state.scenario; } #endif #if !defined(CONFIG_SEC_MATISSE_PROJECT) && !defined(CONFIG_MDP_NEGATIVE_SUPPORT) switch (mode) { #if defined (CONFIG_FB_MSM_MDSS_SDC_WXGA_PANEL) case mDNIe_UI_MODE: DPRINT(" = UI MODE =\n"); INPUT_PAYLOAD1(UI_1); INPUT_PAYLOAD2(UI_2); INPUT_PAYLOAD3(UI_3); INPUT_PAYLOAD4(UI_4); INPUT_PAYLOAD5(UI_5); INPUT_PAYLOAD6(UI_6); break; case mDNIe_VIDEO_MODE: DPRINT(" = VIDEO MODE =\n"); INPUT_PAYLOAD1(VIDEO_1); INPUT_PAYLOAD2(VIDEO_2); INPUT_PAYLOAD3(VIDEO_3); INPUT_PAYLOAD4(VIDEO_4); INPUT_PAYLOAD5(VIDEO_5); INPUT_PAYLOAD6(VIDEO_6); break; case mDNIe_VIDEO_WARM_MODE: DPRINT(" = VIDEO WARM MODE =\n"); DPRINT("no data for WARM MODE..\n"); break; case mDNIe_VIDEO_COLD_MODE: DPRINT(" = VIDEO COLD MODE =\n"); DPRINT("no data for COLD MODE..\n"); break; case mDNIe_CAMERA_MODE: DPRINT(" = CAMERA MODE =\n"); INPUT_PAYLOAD1(CAMERA_1); INPUT_PAYLOAD2(CAMERA_2); INPUT_PAYLOAD3(CAMERA_3); INPUT_PAYLOAD4(CAMERA_4); INPUT_PAYLOAD5(CAMERA_5); INPUT_PAYLOAD6(CAMERA_6); break; case mDNIe_NAVI: DPRINT(" = NAVI MODE =\n"); DPRINT("no data for NAVI MODE..\n"); break; case mDNIe_GALLERY: DPRINT(" = GALLERY MODE =\n"); INPUT_PAYLOAD1(GALLERY_1); INPUT_PAYLOAD2(GALLERY_2); INPUT_PAYLOAD3(GALLERY_3); INPUT_PAYLOAD4(GALLERY_4); INPUT_PAYLOAD5(GALLERY_5); INPUT_PAYLOAD6(GALLERY_6); break; case mDNIe_VT_MODE: DPRINT(" = VT MODE =\n"); INPUT_PAYLOAD1(VT_1); INPUT_PAYLOAD2(VT_2); INPUT_PAYLOAD3(VT_3); INPUT_PAYLOAD4(VT_4); INPUT_PAYLOAD5(VT_5); INPUT_PAYLOAD6(VT_6); break; #if defined(CONFIG_TDMB) case mDNIe_DMB_MODE: DPRINT(" = DMB MODE =\n"); DPRINT("no data for DMB MODE..\n"); break; case mDNIe_DMB_WARM_MODE: DPRINT(" = DMB WARM MODE =\n"); DPRINT("no data for DMB WARM MODE..\n"); break; case mDNIe_DMB_COLD_MODE: DPRINT(" = DMB COLD MODE =\n"); DPRINT("no data for DMB COLD MODE..\n"); break; #endif case mDNIe_BROWSER_MODE: DPRINT(" = BROWSER MODE =\n"); INPUT_PAYLOAD1(BROWSER_1); INPUT_PAYLOAD2(BROWSER_2); INPUT_PAYLOAD3(BROWSER_3); INPUT_PAYLOAD4(BROWSER_4); INPUT_PAYLOAD5(BROWSER_5); INPUT_PAYLOAD6(BROWSER_6); break; case mDNIe_eBOOK_MODE: DPRINT(" = eBOOK MODE =\n"); INPUT_PAYLOAD1(eBOOK_1); INPUT_PAYLOAD2(eBOOK_2); INPUT_PAYLOAD3(eBOOK_3); INPUT_PAYLOAD4(eBOOK_4); INPUT_PAYLOAD5(eBOOK_5); INPUT_PAYLOAD6(eBOOK_6); break; case mDNIe_EMAIL_MODE: DPRINT(" = EMAIL MODE =\n"); INPUT_PAYLOAD1(eMAIL_1); INPUT_PAYLOAD2(eMAIL_2); INPUT_PAYLOAD3(eMAIL_3); INPUT_PAYLOAD4(eMAIL_4); INPUT_PAYLOAD5(eMAIL_5); INPUT_PAYLOAD6(eMAIL_6); break; case mDNIE_BLINE_MODE: DPRINT(" = BLIND MODE =\n"); INPUT_PAYLOAD1(COLOR_BLIND_1); INPUT_PAYLOAD2(COLOR_BLIND_2); INPUT_PAYLOAD3(COLOR_BLIND_3); INPUT_PAYLOAD4(COLOR_BLIND_4); INPUT_PAYLOAD5(COLOR_BLIND_5); INPUT_PAYLOAD6(COLOR_BLIND_6); break; #if defined(CONFIG_SEC_RUBENS_PROJECT) case mDNIE_OUTDOOR_MODE: if (mdnie_msd->dstat.auto_brightness >= 6) { DPRINT(" = OUTDOOR MODE =\n"); INPUT_PAYLOAD1(OUTDOOR_1); INPUT_PAYLOAD2(OUTDOOR_2); INPUT_PAYLOAD3(OUTDOOR_3); INPUT_PAYLOAD4(OUTDOOR_4); INPUT_PAYLOAD5(OUTDOOR_5); INPUT_PAYLOAD6(OUTDOOR_6); } else { mDNIe_Set_Mode(mdnie_tun_state.scenario); } break; case mDNIE_OUTDOOR_MODE_FOR_TEXT: if (mdnie_msd->dstat.auto_brightness >= 6) { DPRINT(" = OUTDOOR MODE FOR TEXT = \n"); INPUT_PAYLOAD1(OUTDOOR_FOR_TEXT_1); INPUT_PAYLOAD2(OUTDOOR_FOR_TEXT_2); INPUT_PAYLOAD3(OUTDOOR_FOR_TEXT_3); INPUT_PAYLOAD4(OUTDOOR_FOR_TEXT_4); INPUT_PAYLOAD5(OUTDOOR_FOR_TEXT_5); INPUT_PAYLOAD6(OUTDOOR_FOR_TEXT_6); } else { mDNIe_Set_Mode(mdnie_tun_state.scenario); } break; #endif #elif defined (CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL) case mDNIe_UI_MODE: DPRINT(" = UI MODE =\n"); if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) { pr_err("mdnie tune data is NULL!\n"); return; } else { INPUT_PAYLOAD1( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]); INPUT_PAYLOAD2( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]); INPUT_PAYLOAD3( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]); INPUT_PAYLOAD4( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]); } break; case mDNIe_VIDEO_MODE: DPRINT(" = VIDEO MODE =\n"); if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) { pr_err("mdnie tune data is NULL!\n"); return; } else { INPUT_PAYLOAD1( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]); INPUT_PAYLOAD2( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]); INPUT_PAYLOAD3( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]); INPUT_PAYLOAD4( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]); } break; case mDNIe_VIDEO_WARM_MODE: DPRINT(" = VIDEO WARM MODE =\n"); DPRINT("no data for WARM MODE..\n"); break; case mDNIe_VIDEO_COLD_MODE: DPRINT(" = VIDEO COLD MODE =\n"); DPRINT("no data for COLD MODE..\n"); break; case mDNIe_CAMERA_MODE: DPRINT(" = CAMERA MODE =\n"); if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) { pr_err("mdnie tune data is NULL!\n"); return; } else { INPUT_PAYLOAD1( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]); INPUT_PAYLOAD2( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]); INPUT_PAYLOAD3( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]); INPUT_PAYLOAD4( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]); } break; case mDNIe_NAVI: DPRINT(" = NAVI MODE =\n"); DPRINT("no data for NAVI MODE..\n"); break; case mDNIe_GALLERY: DPRINT(" = GALLERY MODE =\n"); if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) { pr_err("mdnie tune data is NULL!\n"); return; } else { INPUT_PAYLOAD1( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]); INPUT_PAYLOAD2( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]); INPUT_PAYLOAD3( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]); INPUT_PAYLOAD4( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]); } break; case mDNIe_VT_MODE: DPRINT(" = VT MODE =\n"); if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) { pr_err("mdnie tune data is NULL!\n"); return; } else { INPUT_PAYLOAD1( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]); INPUT_PAYLOAD2( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]); INPUT_PAYLOAD3( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]); INPUT_PAYLOAD4( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]); } break; #if defined(CONFIG_TDMB) case mDNIe_DMB_MODE: DPRINT(" = DMB MODE =\n"); DPRINT("no data for DMB MODE..\n"); break; case mDNIe_DMB_WARM_MODE: DPRINT(" = DMB WARM MODE =\n"); DPRINT("no data for DMB WARM MODE..\n"); break; case mDNIe_DMB_COLD_MODE: DPRINT(" = DMB COLD MODE =\n"); DPRINT("no data for DMB COLD MODE..\n"); break; #endif case mDNIe_BROWSER_MODE: DPRINT(" = BROWSER MODE =\n"); if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) { pr_err("mdnie tune data is NULL!\n"); return; } else { INPUT_PAYLOAD1( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]); INPUT_PAYLOAD2( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]); INPUT_PAYLOAD3( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]); INPUT_PAYLOAD4( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]); } break; case mDNIe_eBOOK_MODE: DPRINT(" = eBOOK MODE =\n"); if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) { pr_err("mdnie tune data is NULL!\n"); return; } else { INPUT_PAYLOAD1( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]); INPUT_PAYLOAD2( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]); INPUT_PAYLOAD3( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]); INPUT_PAYLOAD4( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]); } break; case mDNIe_EMAIL_MODE: DPRINT(" = EMAIL MODE =\n"); if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] || !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) { pr_err("mdnie tune data is NULL!\n"); return; } else { INPUT_PAYLOAD1( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]); INPUT_PAYLOAD2( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]); INPUT_PAYLOAD3( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]); INPUT_PAYLOAD4( mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]); } break; case mDNIE_BLINE_MODE: DPRINT(" = BLIND MODE =\n"); if (!blind_tune_value[mdnie_tun_state.blind][0] || !blind_tune_value[mdnie_tun_state.blind][1] || !blind_tune_value[mdnie_tun_state.blind][2] || !blind_tune_value[mdnie_tun_state.blind][3]) { pr_err("mdnie tune data is NULL!\n"); return; } else { INPUT_PAYLOAD1(blind_tune_value[mdnie_tun_state.blind][0]); INPUT_PAYLOAD2(blind_tune_value[mdnie_tun_state.blind][1]); INPUT_PAYLOAD3(blind_tune_value[mdnie_tun_state.blind][2]); INPUT_PAYLOAD4(blind_tune_value[mdnie_tun_state.blind][3]); } break; #else case mDNIe_UI_MODE: DPRINT(" = UI MODE =\n"); INPUT_PAYLOAD1(UI_1); INPUT_PAYLOAD2(UI_2); break; case mDNIe_VIDEO_MODE: DPRINT(" = VIDEO MODE =\n"); INPUT_PAYLOAD1(VIDEO_1); INPUT_PAYLOAD2(VIDEO_2); break; case mDNIe_VIDEO_WARM_MODE: DPRINT(" = VIDEO WARM MODE =\n"); DPRINT("no data for WARM MODE..\n"); break; case mDNIe_VIDEO_COLD_MODE: DPRINT(" = VIDEO COLD MODE =\n"); DPRINT("no data for COLD MODE..\n"); break; case mDNIe_CAMERA_MODE: DPRINT(" = CAMERA MODE =\n"); INPUT_PAYLOAD1(CAMERA_1); INPUT_PAYLOAD2(CAMERA_2); break; case mDNIe_NAVI: DPRINT(" = NAVI MODE =\n"); DPRINT("no data for NAVI MODE..\n"); break; case mDNIe_GALLERY: DPRINT(" = GALLERY MODE =\n"); INPUT_PAYLOAD1(GALLERY_1); INPUT_PAYLOAD2(GALLERY_2); break; case mDNIe_VT_MODE: DPRINT(" = VT MODE =\n"); INPUT_PAYLOAD1(VT_1); INPUT_PAYLOAD2(VT_2); break; #if defined(CONFIG_TDMB) case mDNIe_DMB_MODE: DPRINT(" = DMB MODE =\n"); INPUT_PAYLOAD1(TDMB_1); INPUT_PAYLOAD2(TDMB_2); break; case mDNIe_DMB_WARM_MODE: DPRINT(" = DMB WARM MODE =\n"); DPRINT("no data for DMB WARM MODE..\n"); break; case mDNIe_DMB_COLD_MODE: DPRINT(" = DMB COLD MODE =\n"); DPRINT("no data for DMB COLD MODE..\n"); break; #endif case mDNIe_BROWSER_MODE: DPRINT(" = BROWSER MODE =\n"); INPUT_PAYLOAD1(BROWSER_1); INPUT_PAYLOAD2(BROWSER_2); break; case mDNIe_eBOOK_MODE: DPRINT(" = eBOOK MODE =\n"); INPUT_PAYLOAD1(eBOOK_1); INPUT_PAYLOAD2(eBOOK_2); break; case mDNIe_EMAIL_MODE: DPRINT(" = EMAIL MODE =\n"); INPUT_PAYLOAD1(eMAIL_1); INPUT_PAYLOAD2(eMAIL_2); break; case mDNIE_BLINE_MODE: DPRINT(" = BLIND MODE =\n"); INPUT_PAYLOAD1(COLOR_BLIND_1); INPUT_PAYLOAD2(COLOR_BLIND_2); break; #endif default: DPRINT("[%s] no option (%d)\n", __func__, mode); return; } #endif sending_tuning_cmd(); free_tun_cmd(); #if defined(CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL) DPRINT("mDNIe_Set_Mode end , %s(%d), %s(%d),\n", scenario_name[mdnie_tun_state.scenario], mdnie_tun_state.scenario, background_name[mdnie_tun_state.background], mdnie_tun_state.background); #else mdnie_msd->scenario = mode; DPRINT("mDNIe_Set_Mode end , mode(%d), background(%d)\n", mode, mdnie_tun_state.background); #endif }
int mdss_dsi_panel_init(struct device_node *node, struct mdss_dsi_ctrl_pdata *ctrl_pdata, bool cmd_cfg_cont_splash) { int rc = 0; static const char *panel_name; static int first_init = 0; bool cont_splash_enabled; struct lcd_device *lcd_device; if (!node) { pr_err("%s: no panel node\n", __func__); return -ENODEV; } pr_debug("%s:%d\n", __func__, __LINE__); panel_name = of_get_property(node, "qcom,mdss-dsi-panel-name", NULL); if (!panel_name) pr_info("%s:%d, Panel name not specified\n", __func__, __LINE__); else pr_err("%s: Panel Name = %s\n", __func__, panel_name); rc = mdss_panel_parse_dt(node, ctrl_pdata); if (rc) { pr_err("%s:%d panel dt parse failed\n", __func__, __LINE__); return rc; } cont_splash_enabled = of_property_read_bool(node, "qcom,cont-splash-enabled"); if (!cont_splash_enabled) { pr_info("%s:%d Continuous splash flag not found.\n", __func__, __LINE__); ctrl_pdata->panel_data.panel_info.cont_splash_enabled = 0; } else { pr_info("%s:%d Continuous splash flag enabled.\n", __func__, __LINE__); ctrl_pdata->panel_data.panel_info.cont_splash_enabled = 1; } if (get_lcd_attached() == 0) { ctrl_pdata->panel_data.panel_info.cont_splash_enabled = 0; } ctrl_pdata->on = mdss_dsi_panel_on; ctrl_pdata->off = mdss_dsi_panel_off; ctrl_pdata->panel_reset = mdss_dsi_panel_reset; ctrl_pdata->bl_fnc= mdss_dsi_panel_bl_ctrl; ctrl_pdata->registered = mdss_dsi_panel_registered; ctrl_pdata->panel_data.set_backlight = mdss_dsi_panel_bl_ctrl; ctrl_pdata->bklt_ctrl = ctrl_pdata->panel_data.panel_info.bklt_ctrl; if(!left_back_up_data && ctrl_pdata->panel_data.panel_info.pdest == DISPLAY_2) { pr_info("%s: dsi_ctrl_1 backup",__func__); left_back_up_data = ctrl_pdata; } if(!first_init) { mutex_init(&msd.lock); lcd_device = lcd_device_register("panel", NULL, NULL, &mipi_samsung_disp_props); if (IS_ERR(lcd_device)) { rc = PTR_ERR(lcd_device); return rc; } rc = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_lcd_type.attr); if (rc) pr_info(" can't create lcd_type sysfs\n"); rc = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_lux.attr); if (rc) pr_info(" can't create lux sysfs\n"); first_init = 1; } #if defined(CONFIG_CABC_TUNING) cabc_tuning_init(ctrl_pdata); #endif return 0; }
static int __devinit ktd2026_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct ktd2026_data *data; int ret, i; pr_info("%s\n", __func__); if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { dev_err(&client->dev, "need I2C_FUNC_I2C.\n"); return -ENODEV; } if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { dev_err(&client->dev, "need I2C_FUNC_SMBUS_BYTE_DATA.\n"); return -EIO; } if (client->dev.of_node) { data = kzalloc(sizeof(*data), GFP_KERNEL); if (!data) { dev_err(&client->adapter->dev, "failed to allocate driver data.\n"); return -ENOMEM; } } else data = client->dev.platform_data; i2c_set_clientdata(client, data); data->client = client; b_client = client; mutex_init(&data->mutex); /* initialize LED */ /* turn off all leds */ ktd2026_leds_on(LED_R, LED_EN_OFF, 0); #if defined(CONFIG_SEC_FACTORY) #if defined (CONFIG_SEC_ATLANTIC_PROJECT) if(batt_id_value == 0) ret = 1; else ret = 0; #if defined(CONFIG_FB_MSM8x26_MDSS_CHECK_LCD_CONNECTION) if(get_lcd_attached() == 0) // When LCD Not connected turning RED LED on ret++;; #endif if(jig_power_on_value == 0) ret++; if(ret == 3) // case when LCD not connected,battery power on and jig off ktd2026_leds_on(LED_R, LED_EN_ON, 30); #endif //ATLANTIC FLAG #endif ktd2026_leds_on(LED_G, LED_EN_OFF, 0); ktd2026_leds_on(LED_B, LED_EN_OFF, 0); ktd2026_set_timerslot_control(0); /* Tslot1 */ ktd2026_set_period(0); ktd2026_set_pwm_duty(PWM1, 0); ktd2026_set_pwm_duty(PWM2, 0); ktd2026_set_trise_tfall(0, 0, 0); for (i = 0; i < MAX_NUM_LEDS; i++) { ret = initialize_channel(client, &data->leds[i], i); if (ret < 0) { dev_err(&client->adapter->dev, "failure on initialization\n"); goto exit; } INIT_WORK(&(data->leds[i].brightness_work), ktd2026_led_brightness_work); } leds_i2c_write_all(client); #ifdef SEC_LED_SPECIFIC led_dev = device_create(sec_class, NULL, 0, data, "led"); if (IS_ERR(led_dev)) { dev_err(&client->dev, "Failed to create device for samsung specific led\n"); ret = -ENODEV; goto exit; } ret = sysfs_create_group(&led_dev->kobj, &sec_led_attr_group); if (ret) { dev_err(&client->dev, "Failed to create sysfs group for samsung specific led\n"); goto exit; } #endif return ret; exit: mutex_destroy(&data->mutex); kfree(data); return ret; }
static int mipi_dsi_on(struct platform_device *pdev) { int ret = 0; u32 clk_rate; struct msm_fb_data_type *mfd; struct fb_info *fbi; struct fb_var_screeninfo *var; struct msm_panel_info *pinfo; struct mipi_panel_info *mipi; u32 hbp, hfp, vbp, vfp, hspw, vspw, width, height; u32 ystride, bpp, data; u32 dummy_xres, dummy_yres; int target_type = 0; u32 tmp; #if defined(CONFIG_FB_MSM_MIPI_RENESAS_TFT_VIDEO_FULL_HD_PT_PANEL) static int is_booting = 1; #endif #ifdef CONFIG_FB_MSM_LCD_NOTIFY lcd_notifier_call_chain(LCD_EVENT_ON_START, NULL); #endif pr_debug("%s+:\n", __func__); #if defined(CONFIG_MIPI_SAMSUNG_ESD_REFRESH) || defined(CONFIG_ESD_ERR_FG_RECOVERY) pdev_for_esd = pdev; #endif #if defined (CONFIG_FB_MSM_MIPI_SAMSUNG_OLED_VIDEO_QHD_PT) if (get_lcd_attached() == 0) return ENODEV; #endif mfd = platform_get_drvdata(pdev); fbi = mfd->fbi; var = &fbi->var; pinfo = &mfd->panel_info; esc_byte_ratio = pinfo->mipi.esc_byte_ratio; if (mipi_dsi_pdata && mipi_dsi_pdata->power_common) mipi_dsi_pdata->power_common(); #if defined(CONFIG_SUPPORT_SECOND_POWER) #if defined(CONFIG_FB_MSM_MIPI_RENESAS_TFT_VIDEO_FULL_HD_PT_PANEL) if( is_booting == 1 ) { is_booting = 0; #if defined(CONFIG_MACH_JACTIVE_ATT) || defined(CONFIG_MACH_JACTIVE_EUR) usleep(5000); if (mipi_dsi_pdata && mipi_dsi_pdata->active_reset) mipi_dsi_pdata->active_reset(0); /* low */ usleep(2000); if (mipi_dsi_pdata && mipi_dsi_pdata->panel_power_save) mipi_dsi_pdata->panel_power_save(0); msleep(10); #endif } #endif if (mipi_dsi_pdata && mipi_dsi_pdata->panel_power_save) mipi_dsi_pdata->panel_power_save(1); #endif #if !defined(CONFIG_SEC_PRODUCT_8930) && !defined(CONFIG_SEC_PRODUCT_8960) if (system_rev == 6) mdelay(500); #endif if (mipi_dsi_pdata && mipi_dsi_pdata->dsi_power_save) mipi_dsi_pdata->dsi_power_save(1); cont_splash_clk_ctrl(0); mipi_dsi_prepare_clocks(); mipi_dsi_ahb_ctrl(1); clk_rate = mfd->fbi->var.pixclock; clk_rate = min(clk_rate, mfd->panel_info.clk_max); mipi_dsi_phy_ctrl(1); if (mdp_rev == MDP_REV_42 && mipi_dsi_pdata) target_type = mipi_dsi_pdata->target_type; mipi_dsi_phy_init(0, &(mfd->panel_info), target_type); mipi_dsi_clk_enable(); #if defined(CONFIG_FB_MSM_MIPI_SAMSUNG_OLED_VIDEO_QHD_PT_PANEL) mipi_dsi_configure_dividers(60); #endif MIPI_OUTP(MIPI_DSI_BASE + 0x114, 1); MIPI_OUTP(MIPI_DSI_BASE + 0x114, 0); hbp = var->left_margin; hfp = var->right_margin; vbp = var->upper_margin; vfp = var->lower_margin; hspw = var->hsync_len; vspw = var->vsync_len; width = mfd->panel_info.xres; height = mfd->panel_info.yres; mipi = &mfd->panel_info.mipi; if (mfd->panel_info.type == MIPI_VIDEO_PANEL) { dummy_xres = mfd->panel_info.lcdc.xres_pad; dummy_yres = mfd->panel_info.lcdc.yres_pad; if (mdp_rev >= MDP_REV_41) { MIPI_OUTP(MIPI_DSI_BASE + 0x20, ((hspw + hbp + width + dummy_xres) << 16 | (hspw + hbp))); MIPI_OUTP(MIPI_DSI_BASE + 0x24, ((vspw + vbp + height + dummy_yres) << 16 | (vspw + vbp))); MIPI_OUTP(MIPI_DSI_BASE + 0x28, (vspw + vbp + height + dummy_yres + vfp - 1) << 16 | (hspw + hbp + width + dummy_xres + hfp - 1)); } else { /* DSI_LAN_SWAP_CTRL */ MIPI_OUTP(MIPI_DSI_BASE + 0x00ac, mipi->dlane_swap); MIPI_OUTP(MIPI_DSI_BASE + 0x20, ((hbp + width + dummy_xres) << 16 | (hbp))); MIPI_OUTP(MIPI_DSI_BASE + 0x24, ((vbp + height + dummy_yres) << 16 | (vbp))); MIPI_OUTP(MIPI_DSI_BASE + 0x28, (vbp + height + dummy_yres + vfp) << 16 | (hbp + width + dummy_xres + hfp)); } MIPI_OUTP(MIPI_DSI_BASE + 0x2c, (hspw << 16)); MIPI_OUTP(MIPI_DSI_BASE + 0x30, 0); MIPI_OUTP(MIPI_DSI_BASE + 0x34, (vspw << 16)); } else { /* command mode */ if (mipi->dst_format == DSI_CMD_DST_FORMAT_RGB888) bpp = 3; else if (mipi->dst_format == DSI_CMD_DST_FORMAT_RGB666) bpp = 3; else if (mipi->dst_format == DSI_CMD_DST_FORMAT_RGB565) bpp = 2; else bpp = 3; /* Default format set to RGB888 */ ystride = width * bpp + 1; /* DSI_COMMAND_MODE_MDP_STREAM_CTRL */ data = (ystride << 16) | (mipi->vc << 8) | DTYPE_DCS_LWRITE; MIPI_OUTP(MIPI_DSI_BASE + 0x5c, data); MIPI_OUTP(MIPI_DSI_BASE + 0x54, data); /* DSI_COMMAND_MODE_MDP_STREAM_TOTAL */ data = height << 16 | width; MIPI_OUTP(MIPI_DSI_BASE + 0x60, data); MIPI_OUTP(MIPI_DSI_BASE + 0x58, data); } mipi_dsi_host_init(mipi); #if defined(CONFIG_FB_MSM_MIPI_SAMSUNG_OLED_VIDEO_HD_PT_PANEL) { u32 tmp_reg0c, tmp_rega8; udelay(200); /* backup register values */ tmp_reg0c = MIPI_INP(MIPI_DSI_BASE + 0x000c); tmp_rega8 = MIPI_INP(MIPI_DSI_BASE + 0xA8); /* Clear HS mode assertion and related flags */ MIPI_OUTP(MIPI_DSI_BASE + 0x0c, 0x8000); MIPI_OUTP(MIPI_DSI_BASE + 0xA8, 0x0); wmb(); mdelay(10); if (mipi_dsi_pdata && mipi_dsi_pdata->lcd_rst_up) mipi_dsi_pdata->lcd_rst_up(); /* restore previous values */ MIPI_OUTP(MIPI_DSI_BASE + 0x0c, tmp_reg0c); MIPI_OUTP(MIPI_DSI_BASE + 0xa8, tmp_rega8); wmb(); } #else msleep(10); #if defined (CONFIG_MIPI_DSI_RESET_LP11) /* LP11 */ tmp = MIPI_INP(MIPI_DSI_BASE + 0xA8); tmp &= ~(1<<28); MIPI_OUTP(MIPI_DSI_BASE + 0xA8, tmp); wmb(); /* LP11 */ usleep(5000); if (mipi_dsi_pdata && mipi_dsi_pdata->active_reset) mipi_dsi_pdata->active_reset(1); /* high */ usleep(10000); #endif #if defined(CONFIG_MACH_LT02_SPR) || defined(CONFIG_MACH_LT02_ATT) || defined(CONFIG_MACH_LT02_TMO) if(system_rev) ret = panel_next_on(pdev); #elif defined(CONFIG_MACH_LT02_CHN_CTC) ret = panel_next_on(pdev); #endif #endif /* always high */ if (mipi->force_clk_lane_hs) { tmp = MIPI_INP(MIPI_DSI_BASE + 0xA8); tmp |= (1<<28); MIPI_OUTP(MIPI_DSI_BASE + 0xA8, tmp); wmb(); } if (mdp_rev >= MDP_REV_41) mutex_lock(&mfd->dma->ov_mutex); else down(&mfd->dma->mutex); #if !defined(CONFIG_MACH_LT02_CHN_CTC) #if defined(CONFIG_MACH_LT02_SPR) || defined(CONFIG_MACH_LT02_ATT) || defined(CONFIG_MACH_LT02_TMO) if(!system_rev) ret = panel_next_on(pdev); #else ret = panel_next_on(pdev); #endif #endif mipi_dsi_op_mode_config(mipi->mode); if (mfd->panel_info.type == MIPI_CMD_PANEL) { if (pinfo->lcd.vsync_enable) { if (pinfo->lcd.hw_vsync_mode && vsync_gpio >= 0) { if (mdp_rev >= MDP_REV_41) { if (gpio_request(vsync_gpio, "MDP_VSYNC") == 0) gpio_direction_input( vsync_gpio); else pr_err("%s: unable to \ request gpio=%d\n", __func__, vsync_gpio); } else if (mdp_rev == MDP_REV_303) { if (!tlmm_settings && gpio_request( vsync_gpio, "MDP_VSYNC") == 0) { ret = gpio_tlmm_config( GPIO_CFG( vsync_gpio, 1, GPIO_CFG_INPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (ret) { pr_err( "%s: unable to config \ tlmm = %d\n", __func__, vsync_gpio); } tlmm_settings = TRUE; gpio_direction_input( vsync_gpio); } else { if (!tlmm_settings) { pr_err( "%s: unable to request \ gpio=%d\n", __func__, vsync_gpio); } } }
int mdp4_dsi_video_on(struct platform_device *pdev) { int dsi_width; int dsi_height; int dsi_bpp; int dsi_border_clr; int dsi_underflow_clr; int dsi_hsync_skew; int hsync_period; int hsync_ctrl; int vsync_period; int display_hctl; int display_v_start; int display_v_end; int active_hctl; int active_h_start; int active_h_end; int active_v_start; int active_v_end; int ctrl_polarity; int h_back_porch; int h_front_porch; int v_back_porch; int v_front_porch; int hsync_pulse_width; int vsync_pulse_width; int hsync_polarity; int vsync_polarity; int data_en_polarity; int hsync_start_x; int hsync_end_x; uint8 *buf; unsigned int buf_offset; int bpp, ptype; struct fb_info *fbi; struct fb_var_screeninfo *var; struct msm_fb_data_type *mfd; struct mdp4_overlay_pipe *pipe; int ret = 0; int cndx = 0; struct vsycn_ctrl *vctrl; struct msm_panel_info *pinfo; vctrl = &vsync_ctrl_db[cndx]; mfd = (struct msm_fb_data_type *)platform_get_drvdata(pdev); pinfo = &mfd->panel_info; if (!mfd) return -ENODEV; if (mfd->key != MFD_KEY) return -EINVAL; #if defined (CONFIG_FB_MSM_MIPI_SAMSUNG_OLED_VIDEO_QHD_PT) if (get_lcd_attached() == 0) return -ENODEV; #endif mutex_lock(&mfd->dma->ov_mutex); vctrl->mfd = mfd; vctrl->dev = mfd->fbi->dev; vctrl->blt_ctrl = pinfo->lcd.blt_ctrl; vctrl->vsync_irq_enabled = 0; vsync_irq_cnt = 0; /* mdp clock on */ mdp_clk_ctrl(1); fbi = mfd->fbi; var = &fbi->var; bpp = fbi->var.bits_per_pixel / 8; buf = (uint8 *) fbi->fix.smem_start; buf_offset = calc_fb_offset(mfd, fbi, bpp); if (vctrl->base_pipe == NULL) { ptype = mdp4_overlay_format2type(mfd->fb_imgType); if (ptype < 0) printk(KERN_INFO "%s: format2type failed\n", __func__); pipe = mdp4_overlay_pipe_alloc(ptype, MDP4_MIXER0); if (pipe == NULL) { printk(KERN_INFO "%s: pipe_alloc failed\n", __func__); mutex_unlock(&mfd->dma->ov_mutex); return -EBUSY; } pipe->pipe_used++; pipe->mixer_stage = MDP4_MIXER_STAGE_BASE; pipe->mixer_num = MDP4_MIXER0; pipe->src_format = mfd->fb_imgType; mdp4_overlay_panel_mode(pipe->mixer_num, MDP4_PANEL_DSI_VIDEO); ret = mdp4_overlay_format2pipe(pipe); if (ret < 0) printk(KERN_INFO "%s: format2type failed\n", __func__); pipe->ov_blt_addr = 0; pipe->dma_blt_addr = 0; vctrl->base_pipe = pipe; /* keep it */ mdp4_init_writeback_buf(mfd, MDP4_MIXER0); } else { pipe = vctrl->base_pipe; } atomic_set(&vctrl->suspend, 0); #if defined(CONFIG_FEATURE_FLIPLR) pipe->mfd = mfd; #endif /* QC Patch for LCD black out Issue */ if (!(mfd->cont_splash_done)) { #if defined(CONFIG_FB_MSM_MIPI_SAMSUNG_OLED_VIDEO_WVGA_PT) \ || defined (CONFIG_MACH_LT02_SPR) || defined (CONFIG_MACH_LT02_ATT) || defined(CONFIG_MACH_LT02_TMO) pull_reset_low(); #endif mfd->cont_splash_done = 1; mdp4_dsi_video_wait4vsync(0); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE, 0); mipi_dsi_controller_cfg(0); /* Clks are enabled in probe. Disabling clocks now */ mdp_clk_ctrl(0); } pipe->src_height = fbi->var.yres; pipe->src_width = fbi->var.xres; pipe->src_h = fbi->var.yres; pipe->src_w = fbi->var.xres; pipe->src_y = 0; pipe->src_x = 0; pipe->dst_h = fbi->var.yres; pipe->dst_w = fbi->var.xres; pipe->srcp0_ystride = fbi->fix.line_length; pipe->bpp = bpp; if (mfd->display_iova) pipe->srcp0_addr = mfd->display_iova + buf_offset; else pipe->srcp0_addr = (uint32)(buf + buf_offset); xlog(__func__, pipe->pipe_ndx, (int)pipe->srcp0_addr, pipe->srcp0_ystride, 0, 0); pipe->dst_h = fbi->var.yres; pipe->dst_w = fbi->var.xres; mdp4_overlay_solidfill_init(pipe); mdp4_overlay_mdp_pipe_req(pipe, mfd); mdp4_calc_blt_mdp_bw(mfd, pipe); mdp4_overlay_dmap_xy(pipe); /* dma_p */ mdp4_overlay_dmap_cfg(mfd, 1); mdp4_overlay_rgb_setup(pipe); mdp4_overlayproc_cfg(pipe); mdp4_overlay_reg_flush(pipe, 1); mdp4_mixer_stage_up(pipe, 0); mdp4_mixer_stage_commit(pipe->mixer_num); /* * DSI timing setting */ h_back_porch = var->left_margin; h_front_porch = var->right_margin; v_back_porch = var->upper_margin; v_front_porch = var->lower_margin; hsync_pulse_width = var->hsync_len; vsync_pulse_width = var->vsync_len; dsi_border_clr = mfd->panel_info.lcdc.border_clr; dsi_underflow_clr = mfd->panel_info.lcdc.underflow_clr; dsi_hsync_skew = mfd->panel_info.lcdc.hsync_skew; dsi_width = mfd->panel_info.xres + mfd->panel_info.lcdc.xres_pad; dsi_height = mfd->panel_info.yres + mfd->panel_info.lcdc.yres_pad; dsi_bpp = mfd->panel_info.bpp; hsync_period = hsync_pulse_width + h_back_porch + dsi_width + h_front_porch; hsync_ctrl = (hsync_period << 16) | hsync_pulse_width; hsync_start_x = h_back_porch + hsync_pulse_width; hsync_end_x = hsync_period - h_front_porch - 1; display_hctl = (hsync_end_x << 16) | hsync_start_x; vsync_period = (vsync_pulse_width + v_back_porch + dsi_height + v_front_porch); display_v_start = ((vsync_pulse_width + v_back_porch) * hsync_period) + dsi_hsync_skew; display_v_end = ((vsync_period - v_front_porch) * hsync_period) + dsi_hsync_skew - 1; if (dsi_width != var->xres) { active_h_start = hsync_start_x + first_pixel_start_x; active_h_end = active_h_start + var->xres - 1; active_hctl = ACTIVE_START_X_EN | (active_h_end << 16) | active_h_start; } else { active_hctl = 0; } if (dsi_height != var->yres) { active_v_start = display_v_start + first_pixel_start_y * hsync_period; active_v_end = active_v_start + (var->yres) * hsync_period - 1; active_v_start |= ACTIVE_START_Y_EN; } else { active_v_start = 0; active_v_end = 0; } dsi_underflow_clr |= 0x80000000; /* enable recovery */ hsync_polarity = 0; vsync_polarity = 0; data_en_polarity = 0; ctrl_polarity = (data_en_polarity << 2) | (vsync_polarity << 1) | (hsync_polarity); mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0x4, hsync_ctrl); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0x8, vsync_period * hsync_period); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0xc, vsync_pulse_width * hsync_period); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0x10, display_hctl); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0x14, display_v_start); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0x18, display_v_end); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0x1c, active_hctl); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0x20, active_v_start); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0x24, active_v_end); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0x28, dsi_border_clr); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0x2c, dsi_underflow_clr); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0x30, dsi_hsync_skew); MDP_OUTP(MDP_BASE + DSI_VIDEO_BASE + 0x38, ctrl_polarity); mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE); mdp_histogram_ctrl_all(TRUE); // mdp4_overlay_dsi_video_start(); mutex_unlock(&mfd->dma->ov_mutex); return ret; }
static int __devinit an30259a_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct an30259a_data *data; int ret, i; dev_err(&client->adapter->dev, "%s\n", __func__); if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { dev_err(&client->dev, "need I2C_FUNC_I2C.\n"); return -ENODEV; } data = kzalloc(sizeof(*data), GFP_KERNEL); if (!data) { dev_err(&client->adapter->dev, "failed to allocate driver data.\n"); return -ENOMEM; } #ifdef CONFIG_OF ret = an30259a_parse_dt(&client->dev); if (ret) { pr_err("[%s] an30259a parse dt failed\n", __func__); kfree(data); return ret; } #endif i2c_set_clientdata(client, data); data->client = client; b_client = client; mutex_init(&data->mutex); /* initialize LED */ LED_R_CURRENT = LED_G_CURRENT = LED_B_CURRENT = led_default_cur; led_conf[0].max_brightness = LED_R_CURRENT; led_conf[1].max_brightness = LED_G_CURRENT; led_conf[2].max_brightness = LED_B_CURRENT; for (i = 0; i < MAX_NUM_LEDS; i++) { ret = an30259a_initialize(client, &data->leds[i], i); if (ret < 0) { dev_err(&client->adapter->dev, "failure on initialization\n"); goto exit; } INIT_WORK(&(data->leds[i].brightness_work), an30259a_led_brightness_work); } #if defined (CONFIG_SEC_FACTORY) #if defined (CONFIG_SEC_S_PROJECT) if ( (f_jig_cable == 0) && (get_lcd_attached() == 0) ) { pr_info("%s:Factory MODE - No OCTA, Battery BOOTING\n", __func__); leds_on(LED_R, true, false, LED_R_CURRENT); leds_i2c_write_all(data->client); } #endif #endif #ifdef SEC_LED_SPECIFIC led_enable_fade = 0; /* default to stock behaviour = blink */ // led_intensity = 0; /* default to CM behaviour = brighter blink intensity allowed */ led_intensity = 40; /* default to Samsung behaviour = normal intensity */ led_speed = 1; /* default to stock behaviour = normal blinking/fading speed */ led_slope_up_1 = 1; /* default slope durations for fading */ led_slope_up_2 = 1; led_slope_down_1 = 1; led_slope_down_2 = 1; led_dev = device_create(sec_class, NULL, 0, data, "led"); if (IS_ERR(led_dev)) { dev_err(&client->dev, "Failed to create device for samsung specific led\n"); ret = -ENODEV; goto exit1; } ret = sysfs_create_group(&led_dev->kobj, &sec_led_attr_group); if (ret) { dev_err(&client->dev, "Failed to create sysfs group for samsung specific led\n"); goto exit; } #endif return ret; #ifdef SEC_LED_SPECIFIC exit1: device_destroy(sec_class, 0); #endif exit: mutex_destroy(&data->mutex); kfree(data); return ret; }