static int __devinit mdss_dsi_panel_probe(struct platform_device *pdev) { int rc = 0; static struct mdss_panel_common_pdata vendor_pdata; static const char *panel_name; pr_debug("%s:%d, debug info id=%d", __func__, __LINE__, pdev->id); if (!pdev->dev.of_node) return -ENODEV; panel_name = of_get_property(pdev->dev.of_node, "label", 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); rc = mdss_panel_parse_dt(pdev, &vendor_pdata); if (rc) return rc; vendor_pdata.on = mdss_dsi_panel_on; vendor_pdata.off = mdss_dsi_panel_off; vendor_pdata.bl_fnc = mdss_dsi_panel_bl_ctrl; rc = dsi_panel_device_register(pdev, &vendor_pdata); if (rc) return rc; #ifdef CONFIG_DEBUG_FS debug_fs_init(&vendor_pdata); #endif return 0; }
int mdss_dsi_panel_init(struct device_node *node, struct mdss_panel_common_pdata *vendor_pdata) { int rc = 0; static const char *panel_name; 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); rc = mdss_panel_parse_dt(node, vendor_pdata); if (rc) { pr_err("%s:%d panel dt parse failed\n", __func__, __LINE__); return rc; } vendor_pdata->on = mdss_dsi_panel_on; vendor_pdata->off = mdss_dsi_panel_off; vendor_pdata->bl_fnc = mdss_dsi_panel_bl_ctrl; return 0; }
static int __devinit mdss_dsi_panel_probe(struct platform_device *pdev) { int rc = 0; static struct mdss_panel_common_pdata vendor_pdata; static const char *panel_name; const char *driver_name = this_driver.driver.name; pr_debug("%s:%d, debug info id=%d", __func__, __LINE__, pdev->id); if (!pdev->dev.of_node) return -ENODEV; panel_name = of_get_property(pdev->dev.of_node, "label", 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); rc = mdss_panel_parse_dt(pdev, &vendor_pdata); if (rc) return rc; vendor_pdata.on = mdss_dsi_panel_on; vendor_pdata.off = mdss_dsi_panel_off; vendor_pdata.bl_fnc = mdss_dsi_panel_bl_ctrl; rc = dsi_panel_device_register(pdev, &vendor_pdata); if (rc) return rc; INIT_WORK(&send_cmds_work, send_local_on_cmds); local_pdata = &vendor_pdata; if (!local_pdata) return -EINVAL; #ifdef CONFIG_DEBUG_FS debug_fs_init(&vendor_pdata); #endif module_kobj = kobject_create_and_add(driver_name, &module_kset->kobj); if (!module_kobj) { pr_err("%s: kobject create failed\n", driver_name); return -ENOMEM; } rc = sysfs_create_group(module_kobj, &dsi_panel_attribute_group); if (rc) pr_err("%s: sysfs create failed: %d\n", panel_name, rc); return rc; }
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 mdss_dsi_panel_probe(struct platform_device *pdev) { int rc = 0; static struct mdss_panel_common_pdata vendor_pdata; static const char *panel_name; #ifdef CONFIG_LGE_SUPPORT_LCD_MAKER_ID struct class *panel; struct device *panel_sysfs_dev; #endif pr_debug("%s:%d, debug info id=%d", __func__, __LINE__, pdev->id); if (!pdev->dev.of_node) return -ENODEV; #if defined(CONFIG_MACH_LGE) register_syscore_ops(&panel_syscore_ops); #endif panel_name = of_get_property(pdev->dev.of_node, "label", 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); rc = mdss_panel_parse_dt(pdev, &vendor_pdata); if (rc) return rc; vendor_pdata.on = mdss_dsi_panel_on; vendor_pdata.off = mdss_dsi_panel_off; vendor_pdata.bl_fnc = mdss_dsi_panel_bl_ctrl; rc = dsi_panel_device_register(pdev, &vendor_pdata); if (rc) return rc; #ifdef CONFIG_LGE_SUPPORT_LCD_MAKER_ID panel = class_create(THIS_MODULE, "panel"); if (IS_ERR(panel)) pr_err("%s : Failed to create class(panel)!", __func__); panel_sysfs_dev = device_create(panel, NULL, 0, NULL, "panel_info"); if (IS_ERR(panel_sysfs_dev)) { pr_err("%s : Failed to create dev(panel_sysfs_dev)!", __func__); } else { if (device_create_file(panel_sysfs_dev, &dev_attr_panel_maker_id) < 0) pr_err("%s : Failed to create device file(%s)!", __func__, dev_attr_panel_maker_id.attr.name); } #endif #if defined(CONFIG_OLED_SUPPORT) && defined(CONFIG_LGE_OLED_IMG_TUNING) rc = device_create_file(&pdev->dev,&panel_tuning_device_attrs[0]); if(rc) pr_err("%s: device file(img_tune_mode) create fail!\n",__func__); rc = device_create_file(&pdev->dev,&panel_tuning_device_attrs[1]); if(rc) pr_err("%s: device file(bl_tune_mode) create fail!\n",__func__); rc = device_create_file(&pdev->dev,&panel_tuning_device_attrs[2]); if(rc) pr_err("%s: device file(mipi_dsi_read) create fail!\n",__func__); #endif #if defined(CONFIG_MACH_LGE) && !(defined(CONFIG_MACH_MSM8974_Z_KR) || defined(CONFIG_MACH_MSM8974_Z_US) || defined(CONFIG_MACH_MSM8974_Z_KDDI)) rc = device_create_file(&pdev->dev, &dev_attr_ief_on_off); #endif #ifdef CONFIG_LGE_SUPPORT_LCD_MAKER_ID pr_info("panel maker ID is %d\n", lge_get_panel_maker()); #endif 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; 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; }