Exemple #1
0
BOOL s3c_mfc_setup_memory(void)
{
	BOOL ret_bit, ret_dat;
	unsigned char *pDataBuf;

	/* 
	 * MFC SFR(Special Function Registers), Bitprocessor buffer, Data buffer의 
	 * physical address 를 virtual address로 mapping 한다 
	 */

	ret_bit = s3c_mfc_memmap_bitproc_buff();
	if (ret_bit == FALSE) {
		mfc_err("fail to mapping bitprocessor buffer memory\n");
		return FALSE;
	}

	ret_dat	= s3c_mfc_memmap_databuf();
	if (ret_dat == FALSE) {
		mfc_err("fail to mapping data buffer memory \n");
		return FALSE;
	}

	/* FramBufMgr Module Initialization */
	pDataBuf = (unsigned char *)s3c_mfc_get_databuf_virt_addr();
	s3c_mfc_init_yuvbuf_mgr(pDataBuf + S3C_MFC_STREAM_BUF_SIZE, S3C_MFC_YUV_BUF_SIZE);


	return TRUE;
}
Exemple #2
0
static int s3c_mfc_open(struct inode *inode, struct file *file)
{
	s3c_mfc_handle_t		*handle;
	unsigned char			*pDataBuf;

	/* 
	 * Mutex Lock
	 */
	mutex_lock(s3c_mfc_mutex);

	clk_enable(s3c_mfc_hclk);
	clk_enable(s3c_mfc_sclk);
	clk_enable(s3c_mfc_pclk);

	s3c_mfc_openhandle_count++;
	if (s3c_mfc_openhandle_count == 1) {
#if defined(CONFIG_S3C6400_KDPMD) || defined(CONFIG_S3C6400_KDPMD_MODULE)
		kdpmd_set_event(s3c_mfc_pmdev.devid, KDPMD_DRVOPEN);
		kdpmd_wakeup();
		kdpmd_wait(s3c_mfc_pmdev.devid);
		s3c_mfc_pmdev.state = DEV_RUNNING;
		mfc_debug("mfc_open woke up\n");
#endif
		/* FramBufMgr Module Re-initialization */
		s3c_mfc_yuv_buffer_mgr_final();
		pDataBuf = (unsigned char *)s3c_mfc_get_databuf_virt_addr();
		s3c_mfc_init_yuvbuf_mgr(pDataBuf + S3C_MFC_STREAM_BUF_SIZE, S3C_MFC_YUV_BUF_SIZE);

		/*
		 * 3. MFC Hardware Initialization
		 */
		if (s3c_mfc_init_hw() == FALSE) 
			return -ENODEV;	
	}


	handle = (s3c_mfc_handle_t *)kmalloc(sizeof(s3c_mfc_handle_t), GFP_KERNEL);
	if (!handle) {
		mfc_debug("mfc open error\n");
		mutex_unlock(s3c_mfc_mutex);
		return -ENOMEM;
	}
	memset(handle, 0, sizeof(s3c_mfc_handle_t));


	/* 
	 * MFC Instance creation
	 */
	handle->mfc_inst = s3c_mfc_inst_create();
	if (handle->mfc_inst == NULL) {
		mfc_err("fail to mfc instance allocation\n");
		kfree(handle);
		mutex_unlock(s3c_mfc_mutex);
		return -EPERM;
	}

	/*
	 * MFC supports multi-instance. so each instance have own data structure
	 * It saves file->private_data
	 */
	file->private_data = (s3c_mfc_handle_t *)handle;

	mutex_unlock(s3c_mfc_mutex);

	mfc_debug("mfc open success\n");

	return 0;
}