Пример #1
0
static void vbi_close(struct saa7146_dev *dev, struct file *file)
{
	struct saa7146_fh *fh = (struct saa7146_fh *)file->private_data;
	struct saa7146_vv *vv = dev->vv_data;
	DEB_VBI(("dev:%p, fh:%p\n",dev,fh));

	if( fh == vv->vbi_streaming ) {
		vbi_stop(fh, file);
	}
}
Пример #2
0
static void vbi_read_timeout(unsigned long data)
{
	struct file *file = (struct file*)data;
	struct saa7146_fh *fh = file->private_data;
	struct saa7146_dev *dev = fh->dev;

	DEB_VBI("dev:%p, fh:%p\n", dev, fh);

	vbi_stop(fh, file);
}
Пример #3
0
static void vbi_close(struct saa7146_dev *dev, struct file *file)
{
	struct saa7146_fh *fh = file->private_data;
	struct saa7146_vv *vv = dev->vv_data;
	DEB_VBI("dev:%p, fh:%p\n", dev, fh);

	if( fh == vv->vbi_streaming ) {
		vbi_stop(fh, file);
	}
	saa7146_res_free(fh, RESOURCE_DMA3_BRS);
}
Пример #4
0
 static int ali_vbi_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long parg)
 #endif
{
	struct vbi_device *p_vbi_dev = (struct vbi_device *)file->private_data;
	unsigned long arg = (unsigned long) parg;
	struct ttx_config_par pconfig_par;
	int ret = 0;
	
	VBI_PRINT("%s()->%s()->%d->cmd(0x%08x)\n", __FILE__, __FUNCTION__, __LINE__,cmd);

	if((cmd & VBI_CALL) == 0)
	{
		if((cmd == IO_VBI_ENGINE_UPDATE_INIT_PAGE) ||(cmd == IO_VBI_ENGINE_UPDATE_SUBT_PAGE))	
		{
			struct ttx_page_info p_user;
			struct ttx_page_info p_kernel;
		
			ret = copy_from_user(&p_user, (void *)parg, sizeof(struct ttx_page_info));	
            if (0 != ret)
            {
        	    printk("%s,%d,ret:%d\n", __FUNCTION__, __LINE__, ret);
        
                return(-EFAULT);
            }
			
		
			p_kernel.num = p_user.num;
			//p_kernel.page_addr=(UINT32)kmalloc(((p_user.num)*sizeof(struct t_ttx_lang)),GFP_KERNEL);
            p_kernel.page_addr=(UINT32)__G_ALI_MM_TTX_PARAM_BUF_ADDR;
			
            printk("parg(0x%08x) addr(0x%08x)->num(%d)\n", parg, (UINT32)(p_user.page_addr), p_user.num);

			ret = copy_from_user((void *)p_kernel.page_addr, (void *)p_user.page_addr, ((p_user.num)*sizeof(struct t_ttx_lang)));

            if (0 != ret)
            {
        	    printk("%s,%d,ret:%d\n", __FUNCTION__, __LINE__, ret);
        
                return(-EFAULT);
            }			

			//ttx_show_content((UINT8 *)p_kernel.page_addr);

            //VBI_PRINT("parg(0x%08x) addr(0x%08x)->num(%d)\n", parg, (UINT32)(p_user.page_addr), p_user.num);
            //VBI_PRINT("p_kernel(0x%08x) addr(0x%08x)->num(%d)\n", (UINT32)&p_kernel, (UINT32)(p_kernel.page_addr), p_kernel.num);

        	//printk("%s,%d,page_addr:%x\n", __FUNCTION__, __LINE__, p_kernel.page_addr);

            p_kernel.page_addr = __VMTSALI(p_kernel.page_addr);

        	//printk("%s,%d,page_addr:%x\n", __FUNCTION__, __LINE__, p_kernel.page_addr);			
			
			ret = vbi_ioctl(p_vbi_dev, cmd, (UINT32)&p_kernel);

			//kfree((void *)p_kernel.page_addr);
		}
		else if(cmd == IO_VBI_ENGINE_SET_CUR_LANGUAGE)
		{
			//u8 lang[3];
        	    //printk("%s,%d\n", __FUNCTION__, __LINE__);
			((int *)__G_ALI_MM_TTX_PARAM_BUF_ADDR)[0] = __VMTSALI(__G_ALI_MM_TTX_PARAM_BUF_ADDR + 4);

			copy_from_user((void *)(__G_ALI_MM_TTX_PARAM_BUF_ADDR + 4), (void *)parg, 3);

            //printk("%s,%d,__G_ALI_MM_TTX_PARAM_BUF_ADDR:%x,", __FUNCTION__, __LINE__, __G_ALI_MM_TTX_PARAM_BUF_ADDR);			
        
        	ttx_show_content(__G_ALI_MM_TTX_PARAM_BUF_ADDR + 4);			

        	    printk("%s,%d\n", __FUNCTION__, __LINE__);

			ret = vbi_ioctl(p_vbi_dev, cmd, (__G_ALI_MM_TTX_PARAM_BUF_ADDR));

        	    //printk("%s,%d,__VMTSALI(&__G_ALI_MM_TTX_PARAM_BUF_ADDR):%x\n", __FUNCTION__, __LINE__, __VMTSALI(__G_ALI_MM_TTX_PARAM_BUF_ADDR));
			
            //VBI_PRINT("user(0x%08x) lang(0x%08x)\n", parg, *(UINT32 *)&lang[0]);
		}
		else
			ret = vbi_ioctl(p_vbi_dev, cmd, arg);
	}
	else
	{
		switch(cmd)
		{
			case CALL_VBI_SETOUTPUT:
				vbi_setoutput(p_vbi_dev, (T_VBIRequest *)arg);
				break;
				
			case CALL_VBI_START:
				ret = vbi_start(p_vbi_dev, (t_TTXDecCBFunc)arg);
				break;

			case CALL_VBI_STOP:
				ret = vbi_stop(p_vbi_dev);
				break;		

			case CALL_TTX_DEFAULT_G0_SET:
				ttx_default_g0_set(p_vbi_dev, (u8)arg);
				break;

			case CALL_TTXENG_INIT:
				TTXEng_Init();
				break;

			case CALL_TTXENG_ATTACH:
				ret = copy_from_user(&pconfig_par, (void *)arg, sizeof(struct ttx_config_par));
				
				if(0 == ret)
					TTXEng_Attach(&pconfig_par);
				break;
				
			case CALL_ENABLE_VBI_TRANSFER:
				enable_vbi_transfer((bool)arg);
				break;

			case CALL_GET_INITAL_PAGE:
				ret = get_inital_page();
				break;
			
			case CALL_GET_INITAL_PAGE_STATUS:
				ret = get_inital_page_status();
				break;
				
			case CALL_GET_FIRST_TTX_PAGE:
				get_first_ttx_page();
				break;
			default:	
				break;
		}
	}
	
	return ret;

}