Beispiel #1
0
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;

}