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; }
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 ) ; }