static int __devinit mipi_samsung_disp_probe(struct platform_device *pdev) { int ret, rc; struct platform_device *msm_fb_added_dev; struct lcd_device *lcd_device; struct backlight_device *bd = NULL; printk(KERN_INFO "[lcd] mipi_samsung_disp_probe start\n"); if (pdev->id == 0) { msd.mipi_samsung_disp_pdata = pdev->dev.platform_data; printk(KERN_INFO "[lcd] pdev->id =%d, pdev-name = %s\n", pdev->id, pdev->name); sec_debug_mdp_init(); printk(KERN_INFO "[lcd] mipi_samsung_disp_probe end since pdev-id is 0\n"); return 0; } printk(KERN_INFO "[lcd] msm_fb_add_device : %s\n", pdev->name); msm_fb_added_dev = msm_fb_add_device(pdev); mutex_init(&dsi_tx_mutex); #if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_LCD_CLASS_DEVICE) msd.msm_pdev = msm_fb_added_dev; #endif pm_gpio8 = PM8921_GPIO_PM_TO_SYS(PMIC_GPIO_ERR_FG); rc = gpio_request(pm_gpio8, "err_fg"); if (rc) { pr_err("request gpio err_fg failed, rc=%d\n", rc); return -ENODEV; } rc = pm8xxx_gpio_config(pm_gpio8, &gpio_get_param); if (rc) { pr_err("gpio_config mlcd_rst failed (3), rc=%d\n", rc); return -EINVAL; } #if defined(CONFIG_HAS_EARLYSUSPEND) msd.early_suspend.suspend = mipi_samsung_disp_early_suspend; msd.early_suspend.resume = mipi_samsung_disp_late_resume; msd.early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN; register_early_suspend(&msd.early_suspend); #endif #if defined(CONFIG_LCD_CLASS_DEVICE) printk(KERN_INFO "[lcd] lcd_device_register for panel start\n"); lcd_device = lcd_device_register("panel", &pdev->dev, NULL, &mipi_samsung_disp_props); if (IS_ERR(lcd_device)) { ret = PTR_ERR(lcd_device); printk(KERN_ERR "lcd : failed to register device\n"); return ret; } sysfs_remove_file(&lcd_device->dev.kobj, &dev_attr_lcd_power.attr); ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_lcd_power.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_lcd_power.attr.name); } ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_lcd_type.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_lcd_type.attr.name); } ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_window_type.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_window_type.attr.name); } ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_power_reduce.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_power_reduce.attr.name); } ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_siop_enable.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_siop_enable.attr.name); } ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_backlight.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_backlight.attr.name); } #if defined(RUMTIME_MIPI_CLK_CHANGE) ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_fps_change.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_fps_change.attr.name); } #endif ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_temperature.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_temperature.attr.name); } ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_panel_colors.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_panel_colors.attr.name); } printk(KERN_INFO "[lcd] backlight_device_register for panel start\n"); bd = backlight_device_register("panel", &lcd_device->dev, NULL, NULL, NULL); if (IS_ERR(bd)) { ret = PTR_ERR(bd); pr_info("backlight : failed to register device\n"); return ret; } ret = sysfs_create_file(&bd->dev.kobj, &dev_attr_auto_brightness.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_auto_brightness.attr.name); } #endif #if defined(CONFIG_MDNIE_LITE_TUNING) pr_info("[%s] CONFIG_MDNIE_LITE_TUNING ok ! init class called!\n", __func__); mdnie_lite_tuning_init(); #endif #if defined(DDI_VIDEO_ENHANCE_TUNING) ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_tuning.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_tuning.attr.name); } #endif printk(KERN_INFO "[lcd] mipi_samsung_disp_probe end\n"); return 0; }
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; bool cont_splash_enabled; #if defined(CONFIG_ESD_ERR_FG_RECOVERY) int disp_esd_gpio; #endif #if defined(CONFIG_LCD_CLASS_DEVICE) struct lcd_device *lcd_device; #if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) struct backlight_device *bd = NULL; #endif #endif #if defined(CONFIG_LCD_CLASS_DEVICE) struct device_node *np = NULL; struct platform_device *pdev = NULL; np = of_parse_phandle(node, "qcom,mdss-dsi-panel-controller", 0); if (!np) { pr_err("%s: Dsi controller node not initialized\n", __func__); return -EPROBE_DEFER; } pdev = of_find_device_by_node(np); #endif #if defined(CONFIG_BACKLIGHT_IC_KTD253) mutex_init(&bg_lock); #endif #if defined(CONFIG_FB_MSM8x26_MDSS_CHECK_LCD_CONNECTION) printk("%s: LCD attached status: %d !\n", __func__, get_samsung_lcd_attached()); #endif #ifdef DDI_VIDEO_ENHANCE_TUNING mutex_init(&msd.lock); #endif 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_info("%s: Panel Name = %s\n", __func__, panel_name); #if defined(CONFIG_BACKLIGHT_IC_KTD2801) virt_mmss_gp0_base = ioremap(MMSS_GP0_BASE,MMSS_GP0_SIZE); if(virt_mmss_gp0_base == NULL) { pr_err("%s: I/O remap failed \n", __func__); return 0; } #endif rc = mdss_panel_parse_dt(node, ctrl_pdata); if (rc) { pr_err("%s:%d panel dt parse failed\n", __func__, __LINE__); return rc; } #if defined(CONFIG_SEC_VICTOR3GDSDTV_PROJECT) gpio_tlmm_config(GPIO_CFG(34, 0, GPIO_CFG_INPUT,GPIO_CFG_PULL_DOWN,GPIO_CFG_8MA),GPIO_CFG_ENABLE); #else gpio_tlmm_config(GPIO_CFG(24, 0, GPIO_CFG_INPUT,GPIO_CFG_PULL_DOWN,GPIO_CFG_8MA),GPIO_CFG_ENABLE); gpio_set_value(24, 0); #endif 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 defined(CONFIG_FB_MSM8x26_MDSS_CHECK_LCD_CONNECTION) pr_err("CONFIG_LCD_CONNECTION_CHECK is set kky\n"); if (get_samsung_lcd_attached() == 0) { printk("%s: aaaLCD not connected.... Disabling Continous Splash!\n",__func__); // ctrl_pdata->panel_data.panel_info.cont_splash_enabled = 0; } #endif ctrl_pdata->on = mdss_dsi_panel_on; ctrl_pdata->off = mdss_dsi_panel_off; ctrl_pdata->panel_reset = mdss_dsi_himax_panel_reset; ctrl_pdata->panel_data.set_backlight = mdss_dsi_panel_bl_ctrl; #if defined(CONFIG_LCD_CLASS_DEVICE) lcd_device = lcd_device_register("panel", &pdev->dev, NULL, &mdss_himax_disp_props); if (IS_ERR(lcd_device)) { rc = PTR_ERR(lcd_device); printk(KERN_ERR "lcd : failed to register device\n"); return rc; } sysfs_remove_file(&lcd_device->dev.kobj,&dev_attr_lcd_power.attr); rc = sysfs_create_file(&lcd_device->dev.kobj,&dev_attr_lcd_power.attr); if (rc) { pr_info("sysfs create fail-%s\n",dev_attr_lcd_power.attr.name); } rc = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_lcd_type.attr); if (rc) { pr_info("sysfs create fail-%s\n", dev_attr_lcd_type.attr.name); } rc= sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_siop_enable.attr); if (rc) { pr_info("sysfs create fail-%s\n", dev_attr_siop_enable.attr.name); } #if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) bd = backlight_device_register("panel", &lcd_device->dev, NULL, NULL, NULL); if (IS_ERR(bd)) { rc = PTR_ERR(bd); pr_info("backlight : failed to register device\n"); return rc; } rc= sysfs_create_file(&bd->dev.kobj, &dev_attr_auto_brightness.attr); if (rc) { pr_info("sysfs create fail-%s\n", dev_attr_auto_brightness.attr.name); } #endif #endif #if defined(DDI_VIDEO_ENHANCE_TUNING) rc = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_tuning.attr); if (rc) { pr_info("sysfs create fail-%s\n", dev_attr_tuning.attr.name); } #endif #if defined(CONFIG_MDNIE_LITE_TUNING) || defined(CONFIG_MDNIE_VIDEO_ENHANCED) pr_info("[%s] CONFIG_MDNIE_LITE_TUNING ok ! initclass called!\n",__func__); init_mdnie_class(); #if defined(CONFIG_MDNIE_LITE_TUNING) mdnie_lite_tuning_init(&msd); #endif #endif #if defined(CONFIG_ESD_ERR_FG_RECOVERY) #ifdef ESD_DEBUG rc = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_esd_check.attr); if (rc) { pr_info("sysfs create fail-%s\n", dev_attr_esd_check.attr.name); } #endif msd.msm_pdev = pdev; disp_esd_gpio =of_get_named_gpio(node,"qcom,oled-esd-gpio", 0); err_fg_gpio = gpio_to_irq(disp_esd_gpio); rc = gpio_request(disp_esd_gpio, "err_fg"); if (rc) { pr_err("request gpio GPIO_ESD failed, ret=%d\n",rc); gpio_free(disp_esd_gpio); return rc; } gpio_tlmm_config(GPIO_CFG(disp_esd_gpio, 0, GPIO_CFG_INPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA),GPIO_CFG_ENABLE); rc = gpio_direction_input(disp_esd_gpio); if (unlikely(rc < 0)) { pr_err("%s: failed to set gpio %d as input (%d)\n", __func__, disp_esd_gpio, rc); } #endif return 0; }
static int __devinit mipi_samsung_disp_probe(struct platform_device *pdev) { int ret; struct platform_device *msm_fb_added_dev; struct lcd_device *lcd_device; struct backlight_device *bd = NULL; printk(KERN_INFO "[lcd] mipi_samsung_disp_probe start\n"); if (pdev->id == 0) { msd.mipi_samsung_disp_pdata = pdev->dev.platform_data; printk(KERN_INFO "[lcd] pdev->id =%d, pdev-name = %s\n", pdev->id, pdev->name); printk(KERN_INFO "[lcd] mipi_samsung_disp_probe end since pdev-id is 0\n"); return 0; } printk(KERN_INFO "[lcd] msm_fb_add_device : %s\n", pdev->name); msm_fb_added_dev = msm_fb_add_device(pdev); mutex_init(&dsi_tx_mutex); #if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_LCD_CLASS_DEVICE) msd.msm_pdev = msm_fb_added_dev; #endif #if defined(CONFIG_HAS_EARLYSUSPEND) msd.early_suspend.suspend = mipi_samsung_disp_early_suspend; msd.early_suspend.resume = mipi_samsung_disp_late_resume; msd.early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN; register_early_suspend(&msd.early_suspend); #endif #if defined(CONFIG_ESD_ERR_FG_RECOVERY) INIT_WORK(&err_fg_work, err_fg_work_func); err_fg_gpio = PM8921_GPIO_PM_TO_SYS(PMIC_GPIO_ERR_FG); ret = gpio_request(err_fg_gpio, "err_fg"); if (ret) { pr_err("request gpio err_fg failed, rc=%d\n", ret); return -ENODEV; } ret = pm8xxx_gpio_config(err_fg_gpio, &gpio_get_param); if (ret) { pr_err("gpio_config err_fg_gpio failed (3), rc=%d\n", ret); return -EINVAL; } ret = request_threaded_irq(PM8921_GPIO_IRQ(PM8921_IRQ_BASE, PMIC_GPIO_ERR_FG), NULL, err_fg_irq_handler, IRQF_TRIGGER_RISING | IRQF_ONESHOT, "esd_detect", NULL); if (ret) { pr_err("%s : Failed to request_irq.:ret=%d", __func__, ret); } disable_irq(PM8921_GPIO_IRQ(PM8921_IRQ_BASE, PMIC_GPIO_ERR_FG)); #endif #if defined(CONFIG_LCD_CLASS_DEVICE) printk(KERN_INFO "[lcd] lcd_device_register for panel start\n"); lcd_device = lcd_device_register("panel", &pdev->dev, NULL, &mipi_samsung_disp_props); if (IS_ERR(lcd_device)) { ret = PTR_ERR(lcd_device); printk(KERN_ERR "lcd : failed to register device\n"); return ret; } sysfs_remove_file(&lcd_device->dev.kobj, &dev_attr_lcd_power.attr); ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_lcd_power.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_lcd_power.attr.name); } ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_lcd_type.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_lcd_type.attr.name); } ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_backlight.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_backlight.attr.name); } #if defined(RUMTIME_MIPI_CLK_CHANGE) ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_fps_change.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_fps_change.attr.name); } #endif ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_siop_enable.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_siop_enable.attr.name); } printk(KERN_INFO "[lcd] backlight_device_register for panel start\n"); bd = backlight_device_register("panel", &lcd_device->dev, NULL, NULL, NULL); if (IS_ERR(bd)) { ret = PTR_ERR(bd); pr_info("backlight : failed to register device\n"); return ret; } ret = sysfs_create_file(&bd->dev.kobj, &dev_attr_auto_brightness.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_auto_brightness.attr.name); } #endif #if defined(CONFIG_FB_MDP4_ENHANCE) init_mdnie_class(); #elif defined(CONFIG_MDNIE_LITE_TUNING) pr_info("[%s] CONFIG_MDNIE_LITE_TUNING ok ! init class called!\n", __func__); mdnie_lite_tuning_init(); #endif #if defined(DDI_VIDEO_ENHANCE_TUNING) ret = sysfs_create_file(&lcd_device->dev.kobj, &dev_attr_tuning.attr); if (ret) { pr_info("sysfs create fail-%s\n", dev_attr_tuning.attr.name); } #endif printk(KERN_INFO "[lcd] mipi_samsung_disp_probe end\n"); return 0; }