void __init s3c_mfc_get_reserve_memory_info(void) { mfc_platdata.buf_phy_base[0] = s3c_get_media_memory_node(S3C_MDEV_MFC, 0); mfc_platdata.buf_phy_base[1] = s3c_get_media_memory_node(S3C_MDEV_MFC, 1); mfc_platdata.buf_size[0] = s3c_get_media_memsize_node(S3C_MDEV_MFC, 0); mfc_platdata.buf_size[1] = s3c_get_media_memsize_node(S3C_MDEV_MFC, 1); s3c_mfc_set_platdata(&mfc_platdata); }
dma_addr_t s3c_get_media_memory(int dev_id) { return s3c_get_media_memory_node(dev_id, 0); }
static struct fimc_control *fimc_register_controller(struct platform_device *pdev) { struct s3c_platform_fimc *pdata; struct fimc_control *ctrl; struct resource *res; int id, mdev_id, irq; #ifdef VIEW_FUNCTION_CALL printk("[FIMC_DEV] %s(%d)\n", __func__, __LINE__); #endif id = pdev->id; mdev_id = S3C_MDEV_FIMC0 + id; pdata = to_fimc_plat(&pdev->dev); ctrl = get_fimc_ctrl(id); ctrl->id = id; ctrl->dev = &pdev->dev; ctrl->vd = &fimc_video_device[id]; ctrl->vd->minor = id; /* alloc from bank1 as default */ #if 0 ctrl->mem.base = s3c_get_media_memory_node(mdev_id, 1); ctrl->mem.size = s3c_get_media_memsize_node(mdev_id, 1); #else if(id == 0){ ctrl->mem.base = FIMC0_RESERVED_MEM_START; ctrl->mem.size = RESERVED_MEM_FIMC0; } else if(id == 1){ ctrl->mem.base = FIMC1_RESERVED_MEM_START; ctrl->mem.size = RESERVED_MEM_FIMC1; } else if(id == 2){ ctrl->mem.base = FIMC2_RESERVED_MEM_START; ctrl->mem.size = RESERVED_MEM_FIMC2; } #endif ctrl->mem.curr = ctrl->mem.base; ctrl->status = FIMC_STREAMOFF; ctrl->limit = &fimc_limits[id]; sprintf(ctrl->name, "%s%d", FIMC_NAME, id); strcpy(ctrl->vd->name, ctrl->name); atomic_set(&ctrl->in_use, 0); mutex_init(&ctrl->lock); mutex_init(&ctrl->v4l2_lock); spin_lock_init(&ctrl->lock_in); spin_lock_init(&ctrl->lock_out); init_waitqueue_head(&ctrl->wq); /* get resource for io memory */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(ctrl->dev, "%s: failed to get io memory region\n", __func__); return NULL; } /* request mem region */ res = request_mem_region(res->start, res->end - res->start + 1, pdev->name); if (!res) { dev_err(ctrl->dev, "%s: failed to request io memory region\n", __func__); return NULL; } /* ioremap for register block */ ctrl->regs = ioremap(res->start, res->end - res->start + 1); if (!ctrl->regs) { dev_err(ctrl->dev, "%s: failed to remap io region\n", __func__); return NULL; } /* irq */ irq = platform_get_irq(pdev, 0); if (request_irq(irq, fimc_irq, IRQF_DISABLED, ctrl->name, ctrl)) dev_err(ctrl->dev, "%s: request_irq failed\n", __func__); fimc_hwset_reset(ctrl); return ctrl; }