static int mdnie_probe(struct s5p_fimd_ext_device *fx_dev) { struct resource *res; struct s5p_mdnie *mdnie; int ret = -EINVAL; int i; mdnie = kzalloc(sizeof(struct s5p_mdnie), GFP_KERNEL); if (!mdnie) { dev_err(&fx_dev->dev, "failed to alloc mdnie object.\n"); return -EFAULT; } mdnie->dev = &fx_dev->dev; mdnie->pdata = to_mdnie_platform_data(fx_dev); if (mdnie->pdata == NULL) { dev_err(&fx_dev->dev, "platform_data is NULL.\n"); return -EFAULT; } res = s5p_fimd_ext_get_resource(fx_dev, IORESOURCE_MEM, 0); if (!res) { dev_err(&fx_dev->dev, "failed to get io memory region.\n"); return -EINVAL; } mdnie->regs = ioremap(res->start, resource_size(res)); if (!mdnie->regs) { dev_err(&fx_dev->dev, "failed to remap io region.\n'"); return -EFAULT; } mdnie->mode = MODE_STANDARD; mdnie->scenario = SCENARIO_UI; mdnie->tone = TONE_NORMAL; mdnie->outdoor = OUTDOOR_OFF; mdnie->tune = TUNE_TBL; mdnie->mops = &mdnie_set_mops; mutex_init(&mdnie->lock); fimd_ext_set_drvdata(fx_dev, mdnie); for (i = 0; i < ARRAY_SIZE(mdnie_device_attrs); i++) { ret = device_create_file(&fx_dev->dev, &mdnie_device_attrs[i]); if (ret) break; } if (ret < 0) dev_err(&fx_dev->dev, "failed to add sysfs entries\n"); dev_info(&fx_dev->dev, "mDNIe driver has been probed.\n"); return 0; }
static int s5p_fimd_lite_probe(struct s5p_fimd_ext_device *fx_dev) { struct clk *sclk = NULL; struct resource *res; struct s5p_fimd_lite *fimd_lite; int ret = -1; #ifdef CONFIG_SLP_DISP_DEBUG int i; #endif fimd_lite = kzalloc(sizeof(struct s5p_fimd_lite), GFP_KERNEL); if (!fimd_lite) { dev_err(&fx_dev->dev, "failed to alloc fimd_lite object.\n"); return -EFAULT; } fimd_lite->dev = &fx_dev->dev; fimd_lite->lcd = (struct exynos_drm_fimd_pdata *) to_fimd_lite_platform_data(fx_dev); res = s5p_fimd_ext_get_resource(fx_dev, IORESOURCE_MEM, 0); if (!res) { dev_err(&fx_dev->dev, "failed to get io memory region.\n"); ret = -EINVAL; goto err0; } fimd_lite->iomem_base = ioremap(res->start, resource_size(res)); if (!fimd_lite->iomem_base) { dev_err(&fx_dev->dev, "failed to remap io region\n"); ret = -EFAULT; goto err0; } fimd_lite->clk = clk_get(&fx_dev->dev, "mdnie0"); if (IS_ERR(fimd_lite->clk)) { dev_err(&fx_dev->dev, "failed to get FIMD LITE clock source\n"); ret = -EINVAL; goto err1; } sclk = clk_get(&fx_dev->dev, "sclk_mdnie"); if (IS_ERR(sclk)) { dev_err(&fx_dev->dev, "failed to get sclk_mdnie clock\n"); ret = -EINVAL; goto err2; } fimd_lite->clk->parent = sclk; fimd_lite->irq = s5p_fimd_ext_get_irq(fx_dev, 0); /* register interrupt handler for fimd-lite. */ if (request_irq(fimd_lite->irq, s5p_fimd_lite_irq_frame, IRQF_DISABLED, fx_dev->name, (void *)fimd_lite)) { dev_err(&fx_dev->dev, "request_irq failed\n"); ret = -EINVAL; goto err3; } #ifdef CONFIG_SLP_DISP_DEBUG for (i = 0; i < ARRAY_SIZE(device_attrs); i++) { ret = device_create_file(&(fx_dev->dev), &device_attrs[i]); if (ret) break; } if (ret < 0) dev_err(&fx_dev->dev, "failed to add sysfs entries\n"); #endif fimd_ext_set_drvdata(fx_dev, fimd_lite); dev_info(&fx_dev->dev, "fimd lite driver has been probed.\n"); return 0; err3: free_irq(fimd_lite->irq, fx_dev); err2: clk_put(sclk); err1: iounmap(fimd_lite->iomem_base); clk_put(fimd_lite->clk); err0: kfree(fimd_lite); return ret; }