void mdss_dsi_ctrl_init(struct mdss_dsi_ctrl_pdata *ctrl) { if (ctrl->panel_data.panel_info.pdest == DISPLAY_1) { mdss_dsi0_hw.ptr = (void *)(ctrl); ctrl->dsi_hw = &mdss_dsi0_hw; ctrl->ndx = DSI_CTRL_0; } else { mdss_dsi1_hw.ptr = (void *)(ctrl); ctrl->dsi_hw = &mdss_dsi1_hw; ctrl->ndx = DSI_CTRL_1; } ctrl_list[ctrl->ndx] = ctrl; /* keep it */ if (mdss_register_irq(ctrl->dsi_hw)) pr_err("%s: mdss_register_irq failed.\n", __func__); pr_debug("%s: ndx=%d base=%p\n", __func__, ctrl->ndx, ctrl->ctrl_base); #ifdef LGE_HRTIMER_OLED_PATCH hrtimer_init(&oled_hrtimer, HRTIMER_BASE_MONOTONIC, HRTIMER_MODE_REL_PINNED); #endif init_completion(&ctrl->dma_comp); init_completion(&ctrl->mdp_comp); init_completion(&ctrl->video_comp); spin_lock_init(&ctrl->irq_lock); spin_lock_init(&ctrl->mdp_lock); mutex_init(&ctrl->mutex); mutex_init(&ctrl->cmd_mutex); mdss_dsi_buf_alloc(&ctrl->tx_buf, SZ_4K); mdss_dsi_buf_alloc(&ctrl->rx_buf, SZ_4K); }
void mdss_dsi_ctrl_init(struct mdss_dsi_ctrl_pdata *ctrl) { if (ctrl->shared_pdata.broadcast_enable) if (ctrl->panel_data.panel_info.pdest == DISPLAY_1) { pr_debug("%s: Broadcast mode enabled.\n", __func__); left_ctrl_pdata = ctrl; } if (ctrl->panel_data.panel_info.pdest == DISPLAY_1) { mdss_dsi0_hw.ptr = (void *)(ctrl); ctrl->dsi_hw = &mdss_dsi0_hw; ctrl->ndx = DSI_CTRL_0; } else { mdss_dsi1_hw.ptr = (void *)(ctrl); ctrl->dsi_hw = &mdss_dsi1_hw; ctrl->ndx = DSI_CTRL_1; } ctrl->panel_mode = ctrl->panel_data.panel_info.mipi.mode; ctrl_list[ctrl->ndx] = ctrl; /* keep it */ if (ctrl->shared_pdata.broadcast_enable) if (ctrl->ndx == DSI_CTRL_1) ctrl->flags |= DSI_FLAG_CLOCK_MASTER; if (mdss_register_irq(ctrl->dsi_hw)) pr_err("%s: mdss_register_irq failed.\n", __func__); pr_debug("%s: ndx=%d base=%p\n", __func__, ctrl->ndx, ctrl->ctrl_base); init_completion(&ctrl->dma_comp); init_completion(&ctrl->mdp_comp); init_completion(&ctrl->video_comp); init_completion(&ctrl->bta_comp); spin_lock_init(&ctrl->irq_lock); spin_lock_init(&ctrl->mdp_lock); mutex_init(&ctrl->mutex); mutex_init(&ctrl->cmd_mutex); #ifdef CONFIG_HUAWEI_KERNEL mutex_init(&ctrl->put_mutex); #endif mdss_dsi_buf_alloc(&ctrl->tx_buf, SZ_4K); mdss_dsi_buf_alloc(&ctrl->rx_buf, SZ_4K); ctrl->cmdlist_commit = mdss_dsi_cmdlist_commit; if (dsi_event.inited == 0) { kthread_run(dsi_event_thread, (void *)&dsi_event, "mdss_dsi_event"); dsi_event.inited = 1; } }
void mdss_dsi_irq_handler_config(struct mdss_dsi_ctrl_pdata *ctrl) { if (ctrl->panel_data.panel_info.pdest == DISPLAY_1) { mdss_dsi0_hw.ptr = (void *)(ctrl); ctrl->mdss_hw = &mdss_dsi0_hw; } else { mdss_dsi1_hw.ptr = (void *)(ctrl); ctrl->mdss_hw = &mdss_dsi1_hw; } if (!mdss_register_irq(ctrl->mdss_hw)) pr_err("%s: mdss_register_irq failed.\n", __func__); }
static int mdss_edp_irq_setup(struct mdss_edp_drv_pdata *edp_drv) { int ret = 0; edp_drv->gpio_panel_hpd = of_get_named_gpio_flags( edp_drv->pdev->dev.of_node, "gpio-panel-hpd", 0, &edp_drv->hpd_flags); if (!gpio_is_valid(edp_drv->gpio_panel_hpd)) { pr_err("%s gpio_panel_hpd %d is not valid ", __func__, edp_drv->gpio_panel_hpd); return -ENODEV; } ret = gpio_request(edp_drv->gpio_panel_hpd, "edp_hpd_irq_gpio"); if (ret) { pr_err("%s unable to request gpio_panel_hpd %d", __func__, edp_drv->gpio_panel_hpd); return -ENODEV; } ret = gpio_tlmm_config(GPIO_CFG( edp_drv->gpio_panel_hpd, 1, GPIO_CFG_INPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (ret) { pr_err("%s: unable to config tlmm = %d\n", __func__, edp_drv->gpio_panel_hpd); gpio_free(edp_drv->gpio_panel_hpd); return -ENODEV; } ret = gpio_direction_input(edp_drv->gpio_panel_hpd); if (ret) { pr_err("%s unable to set direction for gpio_panel_hpd %d", __func__, edp_drv->gpio_panel_hpd); return -ENODEV; } mdss_edp_hw.ptr = (void *)(edp_drv); if (mdss_register_irq(&mdss_edp_hw)) pr_err("%s: mdss_register_irq failed.\n", __func__); return 0; }
void mdss_dsi_ctrl_init(struct mdss_dsi_ctrl_pdata *ctrl) { if (ctrl->shared_pdata.broadcast_enable) if (ctrl->panel_data.panel_info.pdest == DISPLAY_1) { pr_debug("%s: Broadcast mode enabled.\n", __func__); left_ctrl_pdata = ctrl; } if (ctrl->panel_data.panel_info.pdest == DISPLAY_1) { mdss_dsi0_hw.ptr = (void *)(ctrl); ctrl->dsi_hw = &mdss_dsi0_hw; ctrl->ndx = DSI_CTRL_0; } else { mdss_dsi1_hw.ptr = (void *)(ctrl); ctrl->dsi_hw = &mdss_dsi1_hw; ctrl->ndx = DSI_CTRL_1; } ctrl_list[ctrl->ndx] = ctrl; /* keep it */ if (mdss_register_irq(ctrl->dsi_hw)) pr_err("%s: mdss_register_irq failed.\n", __func__); pr_debug("%s: ndx=%d base=%p\n", __func__, ctrl->ndx, ctrl->ctrl_base); #ifdef LGE_HRTIMER_OLED_PATCH hrtimer_init(&oled_hrtimer, HRTIMER_BASE_MONOTONIC, HRTIMER_MODE_REL_PINNED); #endif init_completion(&ctrl->dma_comp); init_completion(&ctrl->mdp_comp); init_completion(&ctrl->video_comp); init_completion(&ctrl->bta_comp); spin_lock_init(&ctrl->irq_lock); spin_lock_init(&ctrl->mdp_lock); mutex_init(&ctrl->mutex); mutex_init(&ctrl->cmd_mutex); mdss_dsi_buf_alloc(&ctrl->tx_buf, SZ_4K); mdss_dsi_buf_alloc(&ctrl->rx_buf, SZ_4K); ctrl->cmdlist_commit = mdss_dsi_cmdlist_commit; if (dsi_event.inited == 0) { kthread_run(dsi_event_thread, (void *)&dsi_event, "mdss_dsi_event"); dsi_event.inited = 1; } }
void mdss_dsi_ctrl_init(struct mdss_dsi_ctrl_pdata *ctrl) { if (ctrl->panel_data.panel_info.pdest == DISPLAY_1) { mdss_dsi0_hw.ptr = (void *)(ctrl); ctrl->dsi_hw = &mdss_dsi0_hw; ctrl->ndx = DSI_CTRL_0; } else { mdss_dsi1_hw.ptr = (void *)(ctrl); ctrl->dsi_hw = &mdss_dsi1_hw; ctrl->ndx = DSI_CTRL_1; } ctrl->panel_mode = ctrl->panel_data.panel_info.mipi.mode; ctrl_list[ctrl->ndx] = ctrl; /* keep it */ if (mdss_register_irq(ctrl->dsi_hw)) pr_err("%s: mdss_register_irq failed.\n", __func__); pr_debug("%s: ndx=%d base=%p\n", __func__, ctrl->ndx, ctrl->ctrl_base); init_completion(&ctrl->dma_comp); init_completion(&ctrl->mdp_comp); init_completion(&ctrl->video_comp); init_completion(&ctrl->bta_comp); spin_lock_init(&ctrl->irq_lock); spin_lock_init(&ctrl->mdp_lock); mutex_init(&ctrl->mutex); mutex_init(&ctrl->cmd_mutex); mdss_dsi_buf_alloc(&ctrl->tx_buf, SZ_4K); mdss_dsi_buf_alloc(&ctrl->rx_buf, SZ_4K); mdss_dsi_buf_alloc(&ctrl->status_buf, SZ_4K); ctrl->cmdlist_commit = mdss_dsi_cmdlist_commit; if (dsi_event.inited == 0) { kthread_run(dsi_event_thread, (void *)&dsi_event, "mdss_dsi_event"); dsi_event.inited = 1; } }
static int mdss_mdp_probe(struct platform_device *pdev) { struct resource *res; int rc; struct mdss_data_type *mdata; if (!pdev->dev.of_node) { pr_err("MDP driver only supports device tree probe\n"); return -ENOTSUPP; } if (mdss_res) { pr_err("MDP already initialized\n"); return -EINVAL; } mdata = devm_kzalloc(&pdev->dev, sizeof(*mdata), GFP_KERNEL); if (mdata == NULL) return -ENOMEM; pdev->id = 0; mdata->pdev = pdev; platform_set_drvdata(pdev, mdata); mdss_res = mdata; res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mdp_phys"); if (!res) { pr_err("unable to get MDP base address\n"); rc = -ENOMEM; goto probe_done; } mdata->mdp_reg_size = resource_size(res); mdata->mdp_base = devm_ioremap(&pdev->dev, res->start, mdata->mdp_reg_size); if (unlikely(!mdata->mdp_base)) { pr_err("unable to map MDP base\n"); rc = -ENOMEM; goto probe_done; } pr_info("MDP HW Base phy_Address=0x%x virt=0x%x\n", (int) res->start, (int) mdata->mdp_base); res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "vbif_phys"); if (!res) { pr_err("unable to get MDSS VBIF base address\n"); rc = -ENOMEM; goto probe_done; } mdata->vbif_base = devm_ioremap(&pdev->dev, res->start, resource_size(res)); if (unlikely(!mdata->vbif_base)) { pr_err("unable to map MDSS VBIF base\n"); rc = -ENOMEM; goto probe_done; } pr_info("MDSS VBIF HW Base phy_Address=0x%x virt=0x%x\n", (int) res->start, (int) mdata->vbif_base); res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); if (!res) { pr_err("unable to get MDSS irq\n"); rc = -ENOMEM; goto probe_done; } mdata->irq = res->start; mdss_mdp_hw.ptr = mdata; /*populate hw iomem base info from device tree*/ rc = mdss_mdp_parse_dt(pdev); if (rc) { pr_err("unable to parse device tree\n"); goto probe_done; } rc = mdss_mdp_res_init(mdata); if (rc) { pr_err("unable to initialize mdss mdp resources\n"); goto probe_done; } rc = mdss_mdp_pp_init(&pdev->dev); if (rc) { pr_err("unable to initialize mdss pp resources\n"); goto probe_done; } rc = mdss_mdp_bus_scale_register(mdata); if (rc) { pr_err("unable to register bus scaling\n"); goto probe_done; } mdss_mdp_bus_scale_set_quota(AB_QUOTA, IB_QUOTA); rc = mdss_mdp_debug_init(mdata); if (rc) { pr_err("unable to initialize mdp debugging\n"); goto probe_done; } pm_runtime_set_suspended(&pdev->dev); pm_runtime_enable(&pdev->dev); if (!pm_runtime_enabled(&pdev->dev)) mdss_mdp_footswitch_ctrl(mdata, true); rc = mdss_mdp_register_sysfs(mdata); if (rc) pr_err("unable to register mdp sysfs nodes\n"); rc = mdss_fb_register_mdp_instance(&mdp5); if (rc) pr_err("unable to register mdp instance\n"); rc = mdss_register_irq(&mdss_mdp_hw); if (rc) pr_err("mdss_register_irq failed.\n"); probe_done: if (IS_ERR_VALUE(rc)) { mdss_mdp_hw.ptr = NULL; mdss_res = NULL; mdss_mdp_pp_term(&pdev->dev); } return rc; }