159 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
#include <linux/wait.h>
 | 
						|
#include <linux/param.h>
 | 
						|
#include <linux/sched.h>
 | 
						|
#include <linux/interrupt.h>
 | 
						|
#include <linux/uaccess.h>
 | 
						|
#include <linux/clk.h>
 | 
						|
#include "dispdev_drv.h"
 | 
						|
#include "dispdev_ioctl.h"
 | 
						|
#include "dispdev_dbg.h"
 | 
						|
 | 
						|
/*===========================================================================*/
 | 
						|
/* Function declaration                                                      */
 | 
						|
/*===========================================================================*/
 | 
						|
int nvt_dispdev_drv_wait_cmd_complete(PMODULE_INFO pmodule_info);
 | 
						|
int nvt_dispdev_drv_ioctl(unsigned char uc_if, MODULE_INFO *pmodule_info, unsigned int cmd, unsigned long arg);
 | 
						|
/*===========================================================================*/
 | 
						|
/* Define                                                                    */
 | 
						|
/*===========================================================================*/
 | 
						|
typedef irqreturn_t (*irq_handler_t)(int, void *);
 | 
						|
 | 
						|
/*===========================================================================*/
 | 
						|
/* Global variable                                                           */
 | 
						|
/*===========================================================================*/
 | 
						|
int i_even_flag = 0;
 | 
						|
 | 
						|
/*===========================================================================*/
 | 
						|
/* Function define                                                           */
 | 
						|
/*===========================================================================*/
 | 
						|
int nvt_dispdev_drv_open(PMODULE_INFO pmodule_info, unsigned char uc_if)
 | 
						|
{
 | 
						|
	nvt_dbg(IND, "%d\n", uc_if);
 | 
						|
 | 
						|
	/* Add HW Moduel initial operation here when the device file opened*/
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int nvt_dispdev_drv_release(PMODULE_INFO pmodule_info, unsigned char uc_if)
 | 
						|
{
 | 
						|
	nvt_dbg(IND, "%d\n", uc_if);
 | 
						|
 | 
						|
	/* Add HW Moduel release operation here when device file closed */
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
int nvt_dispdev_drv_init(MODULE_INFO *pmodule_info)
 | 
						|
{
 | 
						|
	int i_ret = 0;
 | 
						|
 | 
						|
	/* Add HW Module initialization here when driver loaded */
 | 
						|
 | 
						|
	return i_ret;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
int nvt_dispdev_drv_remove(MODULE_INFO *pmodule_info)
 | 
						|
{
 | 
						|
 | 
						|
	/* Add HW Moduel release operation here*/
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
int nvt_dispdev_drv_suspend(MODULE_INFO *pmodule_info)
 | 
						|
{
 | 
						|
	nvt_dbg(IND, "\n");
 | 
						|
 | 
						|
	/* Add suspend operation here*/
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
int nvt_dispdev_drv_resume(MODULE_INFO *pmodule_info)
 | 
						|
{
 | 
						|
	nvt_dbg(IND, "\n");
 | 
						|
	/* Add resume operation here*/
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
int nvt_dispdev_drv_ioctl(unsigned char uc_if, MODULE_INFO *pmodule_info, unsigned int ui_cmd, unsigned long ui_arg)
 | 
						|
{
 | 
						|
	//REG_INFO reg_info;
 | 
						|
	//REG_INFO_LIST reg_info_list;
 | 
						|
	//int i_loop;
 | 
						|
	int i_ret = 0;
 | 
						|
 | 
						|
	nvt_dbg(IND, "IF-%d cmd:%x\n", uc_if, ui_cmd);
 | 
						|
 | 
						|
 | 
						|
 | 
						|
	switch (ui_cmd) {
 | 
						|
	case DISPDEV_IOC_START:
 | 
						|
		/*call someone to start operation*/
 | 
						|
		break;
 | 
						|
 | 
						|
	case DISPDEV_IOC_STOP:
 | 
						|
		/*call someone to stop operation*/
 | 
						|
		break;
 | 
						|
#if 0
 | 
						|
	case DISPDEV_IOC_READ_REG:
 | 
						|
		i_ret = copy_from_user(®_info, (void __user *)ui_arg, sizeof(REG_INFO));
 | 
						|
		if (!i_ret) {
 | 
						|
			//reg_info.ui_value = READ_REG(pmodule_info->io_addr[uc_if] + reg_info.ui_addr);
 | 
						|
			i_ret = copy_to_user((void __user *)ui_arg, ®_info, sizeof(REG_INFO));
 | 
						|
		}
 | 
						|
		break;
 | 
						|
 | 
						|
	case DISPDEV_IOC_WRITE_REG:
 | 
						|
		i_ret = copy_from_user(®_info, (void __user *)ui_arg, sizeof(REG_INFO));
 | 
						|
		if (!i_ret)
 | 
						|
			//WRITE_REG(reg_info.ui_value, pmodule_info->io_addr[uc_if] + reg_info.ui_addr);
 | 
						|
		{
 | 
						|
			break;
 | 
						|
		}
 | 
						|
 | 
						|
	case DISPDEV_IOC_READ_REG_LIST:
 | 
						|
		i_ret = copy_from_user(®_info_list, (void __user *)ui_arg, sizeof(REG_INFO_LIST));
 | 
						|
		if (!i_ret) {
 | 
						|
			for (i_loop = 0 ; i_loop < reg_info_list.ui_count; i_loop++)
 | 
						|
				//reg_info_list.reg_list[i_loop].ui_value = READ_REG(pmodule_info->io_addr[uc_if] + reg_info_list.reg_list[i_loop].ui_addr);
 | 
						|
 | 
						|
			{
 | 
						|
				i_ret = copy_to_user((void __user *)ui_arg, ®_info_list, sizeof(REG_INFO_LIST));
 | 
						|
			}
 | 
						|
		}
 | 
						|
		break;
 | 
						|
	case DISPDEV_IOC_WRITE_REG_LIST:
 | 
						|
		i_ret = copy_from_user(®_info_list, (void __user *)ui_arg, sizeof(REG_INFO_LIST));
 | 
						|
		if (!i_ret)
 | 
						|
			for (i_loop = 0 ; i_loop < reg_info_list.ui_count ; i_loop++)
 | 
						|
				//WRITE_REG(reg_info_list.reg_list[i_loop].ui_value, pmodule_info->io_addr[uc_if] + reg_info_list.reg_list[i_loop].ui_addr);
 | 
						|
			{
 | 
						|
				break;
 | 
						|
			}
 | 
						|
#endif
 | 
						|
		/* Add other operations here */
 | 
						|
	}
 | 
						|
 | 
						|
	return i_ret;
 | 
						|
}
 | 
						|
 | 
						|
int nvt_dispdev_drv_wait_cmd_complete(PMODULE_INFO pmodule_info)
 | 
						|
{
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
int nvt_dispdev_drv_write_reg(PMODULE_INFO pmodule_info, unsigned long addr, unsigned long value)
 | 
						|
{
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
int nvt_dispdev_drv_read_reg(PMODULE_INFO pmodule_info, unsigned long addr)
 | 
						|
{
 | 
						|
	return 0;
 | 
						|
}
 |