Example #1
0
static int SMT113J_SPI_release(struct inode *inode, struct file *filp)
{
	int ret = 0;

	DEBUG_PRINT("SMT113J_SPI_release << Start >>");

	/*** Device Open Check ***/
	if ( 0 == spi_open_cnt )
	{
		ERROR_PRINT ("No Open Devices");
		return ( ret );
	}
	spi_open_cnt--;
	
	if ( 0 != spi_open_cnt )
	{
		ERROR_PRINT ("Not Relase : Open Device Num[%d]", spi_open_cnt );
		return ( ret );
	}
	
	/*** Private Data Area Check ***/
	if ( NULL == (unsigned char *)filp->private_data )
	{
		ERROR_PRINT("No Private Data");
		return ( ret );
	}
	/*** thread stop ***/
	smt113j_spi_thread_Stop();
	
	memset ( (unsigned char *)filp->private_data,
			 0,
			 sizeof ( smt113j_ioctl_data ));

	kfree ( filp->private_data );	
	
	filp->private_data = NULL;
	
	/*** buffer clear ***/
	memset ( rx_pkt_buffer, 0, MAX_BUFFER_PKT * PAKCET_SIZE );
	pwrite = 0;
	pread  = 0;
	
	DEBUG_PRINT("SMT113J_SPI_release << End >>");

	return ret;
}
Example #2
0
static long SMT113J_SPI_ioctl(struct file *filp, 
							  unsigned int cmd, 
							  unsigned long arg)
{
	int 				ret = 0;
	unsigned char 		pkt_status = 0;
	TUNER_DATA_SPI_RW 	*debug_buf = (TUNER_DATA_SPI_RW*)arg;
	
	DEBUG_PRINT("SMT113J_SPI_ioctl << Start >>");

	switch ( cmd )
	{
		/*** SPI INIT ***/
		case TUNER_SPI_IOCTL_INIT:
			printk ("-> TUNER_SPI_IOCTL_INIT\n");
			ret = smt113j_spi_cmd_init();
			break;

		/*** thread stop ***/
		case TUNER_SPI_IOCTL_PKTANSYNC:
			printk ("-> TUNER_SPI_IOCTL_PKTANSYNC\n");
			smt113j_spi_thread_Stop();
			break;
				
		/*** SPI Packet Synchronize ***/
		case TUNER_SPI_IOCTL_PKTSYNC:
			printk ("-> TUNER_SPI_IOCTL_PKTSYNC\n");
			smt113j_spi_thread_Stop();
			ret = smt113j_spi_cmd_pktsync();
			smt113j_spi_thread_Start();
			break;

		/*** SPI Buffer Status ***/
		case TUNER_SPI_IOCTL_BUFSTAT:
			printk ("-> TUNER_SPI_IOCTL_BUFSTAT\n");
			ret = smt113j_spi_cmd_bufstat ( &pkt_status );
			
			if ( 0 != ret )
			{
				pkt_status = 0;
				ERROR_PRINT ("-> put_user(arg_data->moni_cnt) Error : ret = %d",
							 ret );
				break;
			}
			/* Copy to User Area */
			ret = put_user ( pkt_status, 
							(unsigned int __user *)&(debug_buf->val) );
			if ( 0 != ret )
			{
				ERROR_PRINT ("-> put_user(arg_data->moni_cnt) Error : ret = %d",
							 ret );
				break;
			}	
			DEBUG_PRINT ("-> pkt_status = %d", pkt_status );
			break;

		/*** SPI TS Packet Read ***/
		case TUNER_SPI_IOCTL_READPKT:
			ret = smt113j_spi_cmd_pktread ( rx_buf_temp );
		
			if ( 0 > ret )
			{
				ERROR_PRINT("TUNER_SPI_IOCTL_READPKT : Error << ret = %d >>", 
							ret );
				break;
			}
			ret = copy_to_user ( rx_buf_temp, 
								(unsigned char *)debug_buf->buf, 256 );
			if ( 0 > ret )
			{
				ERROR_PRINT(
				 "TUNER_SPI_IOCTL_READPKT * copy_to_user Error << ret = %d >>",
				 ret );
			}
			break;

		default:
			DEBUG_PRINT ("-> SMT113J_SPI_ioctl : No Coomand Case");
			ret = -EINVAL;
			break;
	}
	DEBUG_PRINT("SMT113J_SPI_ioctl << End >> : ret = %d", ret );

	return ( ret ) ;
}