static int rk32_lvds_probe(struct platform_device *pdev) { struct rk32_lvds *lvds; struct resource *res; struct device_node *np = pdev->dev.of_node; if (!np) { dev_err(&pdev->dev, "Missing device tree node.\n"); return -EINVAL; } lvds = devm_kzalloc(&pdev->dev, sizeof(struct rk32_lvds), GFP_KERNEL); if (!lvds) { dev_err(&pdev->dev, "no memory for state\n"); return -ENOMEM; } lvds->dev = &pdev->dev; rk_fb_get_prmry_screen(&lvds->screen); if ((lvds->screen.type != SCREEN_RGB) && (lvds->screen.type != SCREEN_LVDS) && (lvds->screen.type != SCREEN_DUAL_LVDS)) { dev_err(&pdev->dev, "screen is not lvds/rgb!\n"); writel_relaxed(0xffff8000, RK_GRF_VIRT + RK3288_GRF_SOC_CON7); return -EINVAL; } platform_set_drvdata(pdev, lvds); dev_set_name(lvds->dev, "rk32-lvds"); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); lvds->regs = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(lvds->regs)) { dev_err(&pdev->dev, "ioremap reg failed\n"); return PTR_ERR(lvds->regs); } lvds->pclk = devm_clk_get(&pdev->dev,"pclk_lvds"); if (IS_ERR(lvds->pclk)) { dev_err(&pdev->dev, "get clk failed\n"); return PTR_ERR(lvds->pclk); } lvds->pd = devm_clk_get(&pdev->dev,"pd_lvds"); if (IS_ERR(lvds->pd)) { dev_err(&pdev->dev, "get clk failed\n"); return PTR_ERR(lvds->pd); } if (support_uboot_display()) { rk32_lvds_clk_enable(lvds); } rk32_lvds = lvds; rk_fb_trsm_ops_register(&trsm_lvds_ops,SCREEN_LVDS); dev_info(&pdev->dev, "rk32 lvds driver probe success\n"); return 0; }
static int rk32_edp_probe(struct platform_device *pdev) { struct rk32_edp *edp; struct resource *res; struct device_node *np = pdev->dev.of_node; int ret; if (!np) { dev_err(&pdev->dev, "Missing device tree node.\n"); return -EINVAL; } edp = devm_kzalloc(&pdev->dev, sizeof(struct rk32_edp), GFP_KERNEL); if (!edp) { dev_err(&pdev->dev, "no memory for state\n"); return -ENOMEM; } edp->dev = &pdev->dev; edp->video_info.h_sync_polarity = 0; edp->video_info.v_sync_polarity = 0; edp->video_info.interlaced = 0; edp->video_info.color_space = CS_RGB; edp->video_info.dynamic_range = VESA; edp->video_info.ycbcr_coeff = COLOR_YCBCR601; edp->video_info.color_depth = COLOR_8; edp->video_info.link_rate = LINK_RATE_1_62GBPS; edp->video_info.lane_count = LANE_CNT4; rk_fb_get_prmry_screen(&edp->screen); if (edp->screen.type != SCREEN_EDP) { dev_err(&pdev->dev, "screen is not edp!\n"); return -EINVAL; } platform_set_drvdata(pdev, edp); dev_set_name(edp->dev, "rk32-edp"); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); edp->regs = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(edp->regs)) { dev_err(&pdev->dev, "ioremap reg failed\n"); return PTR_ERR(edp->regs); } edp->clk_edp = devm_clk_get(&pdev->dev,"clk_edp"); if (IS_ERR(edp->clk_edp)) { dev_err(&pdev->dev, "cannot get clk_edp\n"); return PTR_ERR(edp->clk_edp); } edp->clk_24m = devm_clk_get(&pdev->dev,"clk_edp_24m"); if (IS_ERR(edp->clk_24m)) { dev_err(&pdev->dev, "cannot get clk_edp_24m\n"); return PTR_ERR(edp->clk_24m); } edp->pclk = devm_clk_get(&pdev->dev,"pclk_edp"); if (IS_ERR(edp->pclk)) { dev_err(&pdev->dev, "cannot get pclk\n"); return PTR_ERR(edp->pclk); } clk_prepare(edp->pclk); clk_prepare(edp->clk_edp); clk_prepare(edp->clk_24m); rk32_edp_clk_enable(edp); rk32_edp_pre_init(); edp->irq = platform_get_irq(pdev, 0); if (edp->irq < 0) { dev_err(&pdev->dev, "cannot find IRQ\n"); return edp->irq; } ret = devm_request_irq(&pdev->dev, edp->irq, rk32_edp_isr, 0, dev_name(&pdev->dev), edp); if (ret) { dev_err(&pdev->dev, "cannot claim IRQ %d\n", edp->irq); return ret; } disable_irq_nosync(edp->irq); rk32_edp_clk_disable(edp); rk32_edp = edp; rk_fb_trsm_ops_register(&trsm_edp_ops, SCREEN_EDP); dev_info(&pdev->dev, "rk32 edp driver probe success\n"); return 0; }