static int mipi_jdi_panel_set_fastboot(struct platform_device *pdev) { struct k3_fb_data_type *k3fd = NULL; BUG_ON(pdev == NULL); k3fd = (struct k3_fb_data_type *)platform_get_drvdata(pdev); BUG_ON(k3fd == NULL); /* lcd vcc enable */ vcc_cmds_tx(pdev, jdi_lcd_vcc_enable_cmds, \ ARRAY_SIZE(jdi_lcd_vcc_enable_cmds)); /* lcd iomux normal */ iomux_cmds_tx(jdi_lcd_iomux_normal_cmds, \ ARRAY_SIZE(jdi_lcd_iomux_normal_cmds)); /* lcd gpio request */ gpio_cmds_tx(jdi_lcd_gpio_request_cmds, \ ARRAY_SIZE(jdi_lcd_gpio_request_cmds)); g_display_on = true; return 0; }
static void cmi_disp_off(struct k3_fb_data_type *k3fd) { u32 edc_base = 0; struct k3_panel_info *pinfo = NULL; BUG_ON(k3fd == NULL); edc_base = k3fd->edc_base; pinfo = &(k3fd->panel_info); /* lcd display off sequence */ mipi_dsi_cmds_tx(cmi_display_off_cmds, \ ARRAY_SIZE(cmi_display_off_cmds), edc_base); /* lcd gpio lowpower */ gpio_cmds_tx(cmi_lcd_gpio_lowpower_cmds, \ ARRAY_SIZE(cmi_lcd_gpio_lowpower_cmds)); /* lcd gpio free */ gpio_cmds_tx(cmi_lcd_gpio_free_cmds, \ ARRAY_SIZE(cmi_lcd_gpio_free_cmds)); /* lcd iomux lowpower */ iomux_cmds_tx(cmi_lcd_iomux_lowpower_cmds, \ ARRAY_SIZE(cmi_lcd_iomux_lowpower_cmds)); /* lcd vcc disable */ vcc_cmds_tx(NULL, cmi_lcd_vcc_disable_cmds, \ ARRAY_SIZE(cmi_lcd_vcc_disable_cmds)); }
static void jdi_disp_off(struct k3_fb_data_type *k3fd) { u32 edc_base = 0; struct k3_panel_info *pinfo = NULL; BUG_ON(k3fd == NULL); edc_base = k3fd->edc_base; pinfo = &(k3fd->panel_info); /* lcd display off sequence */ mipi_dsi_cmds_tx(jdi_display_off_cmds, ARRAY_SIZE(jdi_display_off_cmds), edc_base); /* lcd gpio request */ gpio_cmds_tx(jdi_lcd_gpio_lowpower_cmds, \ ARRAY_SIZE(jdi_lcd_gpio_lowpower_cmds)); /* lcd gpio free */ gpio_cmds_tx(jdi_lcd_gpio_free_cmds, \ ARRAY_SIZE(jdi_lcd_gpio_free_cmds)); /* lcd iomux lowpower */ iomux_cmds_tx(jdi_lcd_iomux_lowpower_cmds, \ ARRAY_SIZE(jdi_lcd_iomux_lowpower_cmds)); /* tp gpio request */ printk("%s enter:tp gpio request, free and iomux lowpower\n",__func__); gpio_cmds_tx(jdi_tp_gpio_lowpower_cmds, \ ARRAY_SIZE(jdi_tp_gpio_lowpower_cmds)); /* tp gpio free */ gpio_cmds_tx(jdi_tp_gpio_free_cmds, \ ARRAY_SIZE(jdi_tp_gpio_free_cmds)); /* tp iomux lowpower */ iomux_cmds_tx(jdi_tp_iomux_lowpower_cmds, \ ARRAY_SIZE(jdi_tp_iomux_lowpower_cmds)); /* lcd vcc disable */ vcc_cmds_tx(NULL, jdi_lcd_vcc_disable_cmds, \ ARRAY_SIZE(jdi_lcd_vcc_disable_cmds)); /* tp vcc disable */ vcc_cmds_tx(NULL, jdi_tp_vcc_disable_cmds, \ ARRAY_SIZE(jdi_tp_vcc_disable_cmds)); }
static void jdi_disp_on(struct k3_fb_data_type *k3fd) { u32 edc_base = 0; struct k3_panel_info *pinfo = NULL; BUG_ON(k3fd == NULL); edc_base = k3fd->edc_base; pinfo = &(k3fd->panel_info); /* tp iomux normal */ iomux_cmds_tx(jdi_tp_iomux_normal_cmds, \ ARRAY_SIZE(jdi_tp_iomux_normal_cmds)); /* tp gpio request */ gpio_cmds_tx(jdi_tp_gpio_request_cmds, \ ARRAY_SIZE(jdi_tp_gpio_request_cmds)); /* tp gpio normal */ gpio_cmds_tx(jdi_tp_gpio_normal_cmds, \ ARRAY_SIZE(jdi_tp_gpio_normal_cmds)); /*enable TP's irq which was disabled in jdi_disp_off.*/ enable_irq(gpio_to_irq(GPIO_19_5)); /* lcd iomux normal */ iomux_cmds_tx(jdi_lcd_iomux_normal_cmds, \ ARRAY_SIZE(jdi_lcd_iomux_normal_cmds)); /* lcd gpio request */ gpio_cmds_tx(jdi_lcd_gpio_request_cmds, \ ARRAY_SIZE(jdi_lcd_gpio_request_cmds)); /* lcd gpio normal */ gpio_cmds_tx(jdi_lcd_gpio_normal_cmds, \ ARRAY_SIZE(jdi_lcd_gpio_normal_cmds)); /* lcd display on sequence */ mipi_dsi_cmds_tx(jdi_display_on_cmds, \ ARRAY_SIZE(jdi_display_on_cmds), edc_base); }
static void cmi_disp_on(struct k3_fb_data_type *k3fd) { u32 edc_base = 0; struct k3_panel_info *pinfo = NULL; BUG_ON(k3fd == NULL); edc_base = k3fd->edc_base; pinfo = &(k3fd->panel_info); /* lcd iomux normal */ iomux_cmds_tx(cmi_lcd_iomux_normal_cmds, \ ARRAY_SIZE(cmi_lcd_iomux_normal_cmds)); /* lcd gpio request */ gpio_cmds_tx(cmi_lcd_gpio_request_cmds, \ ARRAY_SIZE(cmi_lcd_gpio_request_cmds)); /* lcd gpio normal */ gpio_cmds_tx(cmi_lcd_gpio_normal_cmds, \ ARRAY_SIZE(cmi_lcd_gpio_normal_cmds)); /* lcd display on sequence */ mipi_dsi_cmds_tx(cmi_display_on_cmds, \ ARRAY_SIZE(cmi_display_on_cmds), edc_base); }
static int __devinit jdi_probe(struct platform_device *pdev) { struct k3_panel_info *pinfo = NULL; struct platform_device *reg_pdev = NULL; struct lcd_properities lcd_props; g_display_on = false; pinfo = jdi_panel_data.panel_info; /* init lcd panel info */ pinfo->xres = 720; pinfo->yres = 1280; pinfo->type = PANEL_MIPI_CMD; pinfo->orientation = LCD_PORTRAIT; pinfo->bpp = EDC_OUT_RGB_888; pinfo->s3d_frm = EDC_FRM_FMT_2D; pinfo->bgr_fmt = EDC_RGB; pinfo->bl_set_type = BL_SET_BY_MIPI; pinfo->bl_min = 1; pinfo->bl_max = 100; pinfo->frc_enable = 0; pinfo->esd_enable = 1; pinfo->sbl_enable = 0; pinfo->sbl.bl_max = 0xff; pinfo->sbl.cal_a = 0x0f; pinfo->sbl.str_limit = 0x40; pinfo->ldi.h_back_porch = 16; pinfo->ldi.h_front_porch = 16; pinfo->ldi.h_pulse_width = 2; pinfo->ldi.v_back_porch = 2; pinfo->ldi.v_front_porch = 2; pinfo->ldi.v_pulse_width = 2; pinfo->ldi.hsync_plr = 1; pinfo->ldi.vsync_plr = 0; pinfo->ldi.pixelclk_plr = 1; pinfo->ldi.data_en_plr = 0; pinfo->ldi.disp_mode = LDI_DISP_MODE_NOT_3D_FBF; /* Note: must init here */ pinfo->frame_rate = 60; pinfo->clk_rate = 76000000; pinfo->mipi.lane_nums = DSI_4_LANES; pinfo->mipi.color_mode = DSI_24BITS_1; pinfo->mipi.vc = 0; pinfo->mipi.dsi_bit_clk = 260; /* tp vcc init */ vcc_cmds_tx(pdev, jdi_tp_vcc_init_cmds, \ ARRAY_SIZE(jdi_tp_vcc_init_cmds)); /* lcd vcc init */ vcc_cmds_tx(pdev, jdi_lcd_vcc_init_cmds, \ ARRAY_SIZE(jdi_lcd_vcc_init_cmds)); /* tp iomux init */ iomux_cmds_tx(jdi_tp_iomux_init_cmds, \ ARRAY_SIZE(jdi_tp_iomux_init_cmds)); /* lcd iomux init */ iomux_cmds_tx(jdi_lcd_iomux_init_cmds, \ ARRAY_SIZE(jdi_lcd_iomux_init_cmds)); /* tp vcc enable */ vcc_cmds_tx(NULL, jdi_tp_vcc_enable_cmds, \ ARRAY_SIZE(jdi_tp_vcc_enable_cmds)); /* lcd vcc enable */ vcc_cmds_tx(NULL, jdi_lcd_vcc_enable_cmds, \ ARRAY_SIZE(jdi_lcd_vcc_enable_cmds)); /* alloc panel device data */ if (platform_device_add_data(pdev, &jdi_panel_data, sizeof(struct k3_fb_panel_data))) { k3fb_loge("platform_device_add_data failed!\n"); platform_device_put(pdev); return -ENOMEM; } reg_pdev = k3_fb_add_device(pdev); /* for cabc */ lcd_props.type = TFT; lcd_props.default_gamma = GAMMA25; p_tuning_dev = lcd_tuning_dev_register(&lcd_props, &sp_tuning_ops, (void *)reg_pdev); if (IS_ERR(p_tuning_dev)) { k3fb_loge("lcd_tuning_dev_register failed!\n"); return -1; } jdi_sysfs_init(pdev); return 0; }
static int __devinit jdi_probe(struct platform_device *pdev) { struct k3_panel_info *pinfo = NULL; struct platform_device *reg_pdev = NULL; struct lcd_properities lcd_props; struct k3_fb_data_type *k3fd = NULL; int i; g_display_on = false; pinfo = jdi_panel_data.panel_info; /* init lcd panel info */ pinfo->xres = 720; pinfo->yres = 1280; pinfo->width = 58; pinfo->height = 103; pinfo->type = PANEL_MIPI_CMD; pinfo->orientation = LCD_PORTRAIT; pinfo->bpp = EDC_OUT_RGB_888; pinfo->s3d_frm = EDC_FRM_FMT_2D; pinfo->bgr_fmt = EDC_RGB; pinfo->bl_set_type = BL_SET_BY_MIPI; pinfo->bl_min = 1; pinfo->bl_max = 100; pinfo->frc_enable = 1; pinfo->esd_enable = 1; pinfo->sbl_enable = 1; pinfo->sbl.bl_max = 0xff; pinfo->sbl.cal_a = 0x08; pinfo->sbl.cal_b = 0xd8; pinfo->sbl.str_limit = 0x40; pinfo->ldi.h_back_porch = 43; pinfo->ldi.h_front_porch = 80; pinfo->ldi.h_pulse_width = 57; pinfo->ldi.v_back_porch = 12; pinfo->ldi.v_front_porch = 14; pinfo->ldi.v_pulse_width = 2; pinfo->ldi.hsync_plr = 1; pinfo->ldi.vsync_plr = 0; pinfo->ldi.pixelclk_plr = 1; pinfo->ldi.data_en_plr = 0; pinfo->ldi.disp_mode = LDI_DISP_MODE_NOT_3D_FBF; /* Note: must init here */ pinfo->frame_rate = 60; pinfo->clk_rate = 76000000; pinfo->mipi.lane_nums = DSI_4_LANES; pinfo->mipi.color_mode = DSI_24BITS_1; pinfo->mipi.vc = 0; pinfo->mipi.dsi_bit_clk = 241; /* tp vcc init */ vcc_cmds_tx(pdev, jdi_tp_vcc_init_cmds, \ ARRAY_SIZE(jdi_tp_vcc_init_cmds)); /* lcd vcc init */ vcc_cmds_tx(pdev, jdi_lcd_vcc_init_cmds, \ ARRAY_SIZE(jdi_lcd_vcc_init_cmds)); /*tk vcc init*/ g_touchkey_enable = get_touchkey_enable(); if (g_touchkey_enable == true) { vcc_cmds_tx(pdev, jdi_tk_vcc_init_cmds, \ ARRAY_SIZE(jdi_tk_vcc_init_cmds)); } /* tp iomux init */ iomux_cmds_tx(jdi_tp_iomux_init_cmds, \ ARRAY_SIZE(jdi_tp_iomux_init_cmds)); /* lcd iomux init */ iomux_cmds_tx(jdi_lcd_iomux_init_cmds, \ ARRAY_SIZE(jdi_lcd_iomux_init_cmds)); /* alloc panel device data */ if (platform_device_add_data(pdev, &jdi_panel_data, sizeof(struct k3_fb_panel_data))) { k3fb_loge("platform_device_add_data failed!\n"); platform_device_put(pdev); return -ENOMEM; } reg_pdev = k3_fb_add_device(pdev); k3fd = (struct k3_fb_data_type *)platform_get_drvdata(reg_pdev); BUG_ON(k3fd == NULL); /* read product id */ msleep(16); //TE masked in k3_fb_register(), wait 16ms for on-going refreshing for(i = 0; i < 150; i++){ outp32(k3fd->edc_base + MIPIDSI_GEN_HDR_OFFSET, 0xDA << 8 | 0x06); udelay(120); lcd_product_id = inp32(k3fd->edc_base + MIPIDSI_GEN_PLD_DATA_OFFSET); if(lcd_product_id && (lcd_product_id != 0xff)) break; } printk("lcd product id is 0x%x, read times is %d\n", lcd_product_id, i); sema_init(&ct_sem, 1); g_csc_value[0] = 0; g_csc_value[1] = 0; g_csc_value[2] = 0; g_csc_value[3] = 0; g_csc_value[4] = 0; g_csc_value[5] = 0; g_csc_value[6] = 0; g_csc_value[7] = 0; g_csc_value[8] = 0; g_is_csc_set = 0; /* for cabc */ lcd_props.type = TFT; lcd_props.default_gamma = GAMMA25; p_tuning_dev = lcd_tuning_dev_register(&lcd_props, &sp_tuning_ops, (void *)reg_pdev); if (IS_ERR(p_tuning_dev)) { k3fb_loge("lcd_tuning_dev_register failed!\n"); return -1; } jdi_sysfs_init(pdev); return 0; }
static void jdi_disp_off(struct k3_fb_data_type *k3fd) { u32 edc_base = 0; int retval = 0; struct k3_panel_info *pinfo = NULL; BUG_ON(k3fd == NULL); edc_base = k3fd->edc_base; pinfo = &(k3fd->panel_info); /* lcd display off sequence */ mipi_dsi_cmds_tx(jdi_display_off_cmds, ARRAY_SIZE(jdi_display_off_cmds), edc_base); if(rmi_fc != NULL){ retval = rmi_f01_glove_switch_read(rmi_fc); if (retval < 0) dev_err(&rmi_fc->dev, "Failed to switch mode between finger and glove. Code: %d.\n", retval); } /*tk suspend should be here, becuase this function is called before suspend*/ if (g_touchkey_enable == true) { touchkey_early_suspend_extern(); } /* GPIO_19_5 is TP's interrupt GPIO, It is upload by ldo14 which will be closed here, so this irq should be disabled at first and then enable it in mipi_jdi_panel_on. */ disable_irq(gpio_to_irq(GPIO_19_5)); /* lcd gpio request */ gpio_cmds_tx(jdi_lcd_gpio_lowpower_cmds, \ ARRAY_SIZE(jdi_lcd_gpio_lowpower_cmds)); /* lcd gpio free */ gpio_cmds_tx(jdi_lcd_gpio_free_cmds, \ ARRAY_SIZE(jdi_lcd_gpio_free_cmds)); /* lcd iomux lowpower */ iomux_cmds_tx(jdi_lcd_iomux_lowpower_cmds, \ ARRAY_SIZE(jdi_lcd_iomux_lowpower_cmds)); /* tp gpio request */ printk("%s enter:tp gpio request, free and iomux lowpower\n",__func__); gpio_cmds_tx(jdi_tp_gpio_lowpower_cmds, \ ARRAY_SIZE(jdi_tp_gpio_lowpower_cmds)); /* tp gpio free */ gpio_cmds_tx(jdi_tp_gpio_free_cmds, \ ARRAY_SIZE(jdi_tp_gpio_free_cmds)); /* tp iomux lowpower */ iomux_cmds_tx(jdi_tp_iomux_lowpower_cmds, \ ARRAY_SIZE(jdi_tp_iomux_lowpower_cmds)); /* lcd vcc disable */ vcc_cmds_tx(NULL, jdi_lcd_vcc_disable_cmds, \ ARRAY_SIZE(jdi_lcd_vcc_disable_cmds)); /* tk vcc disable */ if (g_touchkey_enable == true) { vcc_cmds_tx(NULL, jdi_tk_vcc_disable_cmds, \ ARRAY_SIZE(jdi_tk_vcc_disable_cmds)); } /* tp vcc disable */ vcc_cmds_tx(NULL, jdi_tp_vcc_disable_cmds, \ ARRAY_SIZE(jdi_tp_vcc_disable_cmds)); }
static void jdi_disp_on(struct k3_fb_data_type *k3fd) { u32 edc_base = 0; struct k3_panel_info *pinfo = NULL; BUG_ON(k3fd == NULL); edc_base = k3fd->edc_base; pinfo = &(k3fd->panel_info); jdi_set_ct_cscValue(k3fd); /* tp iomux normal */ iomux_cmds_tx(jdi_tp_iomux_normal_cmds, \ ARRAY_SIZE(jdi_tp_iomux_normal_cmds)); /* tp gpio request */ gpio_cmds_tx(jdi_tp_gpio_request_cmds, \ ARRAY_SIZE(jdi_tp_gpio_request_cmds)); /* tp gpio normal */ gpio_cmds_tx(jdi_tp_gpio_normal_cmds, \ ARRAY_SIZE(jdi_tp_gpio_normal_cmds)); /* lcd iomux normal */ iomux_cmds_tx(jdi_lcd_iomux_normal_cmds, \ ARRAY_SIZE(jdi_lcd_iomux_normal_cmds)); /* lcd gpio request */ gpio_cmds_tx(jdi_lcd_gpio_request_cmds, \ ARRAY_SIZE(jdi_lcd_gpio_request_cmds)); /* lcd gpio normal */ gpio_cmds_tx(jdi_lcd_gpio_normal_cmds, \ ARRAY_SIZE(jdi_lcd_gpio_normal_cmds)); /* lcd display on sequence */ mipi_dsi_cmds_tx(jdi_display_on_cmds, \ ARRAY_SIZE(jdi_display_on_cmds), edc_base); /*enable TP's irq which was disabled in jdi_disp_off.*/ enable_irq(gpio_to_irq(GPIO_19_5)); /* Enable CABC */ mipi_dsi_cmds_tx(jdi_cabc_cmds, \ ARRAY_SIZE(jdi_cabc_cmds), edc_base); mipi_dsi_cmds_tx(jdi_cabc_ui_on_cmds, \ ARRAY_SIZE(jdi_cabc_ui_on_cmds), edc_base); /* mipi_dsi_cmds_tx(jdi_ce_cmds, \ ARRAY_SIZE(jdi_ce_cmds), edc_base); mipi_dsi_cmds_tx(jdi_ce_on_cmds, \ ARRAY_SIZE(jdi_ce_on_cmds), edc_base); mipi_dsi_cmds_tx(jdi_vdd_cmds, \ ARRAY_SIZE(jdi_vdd_cmds), edc_base); */ /*tk suspend should be here, becuase this function is called before suspend*/ if (g_touchkey_enable == true) { touchkey_later_resume_extern(); } printk("---display on\n"); }