static int broadcast_Isdb_spi_remove(struct spi_device *spi) { int rc = 0; /* */ tcc353x_lnaControl_stop(); TcpalPrintStatus((I08S *)"[%s]\n", __func__); TcpalUnRegisterIrqHandler(); #ifndef _NOT_USE_WAKE_LOCK_ wake_lock_destroy(&IsdbCtrlInfo.wake_lock); #endif memset((unsigned char*)&IsdbCtrlInfo, 0x0, sizeof(struct broadcast_tcc3530_ctrl_data)); TcpalDeleteSemaphore(&Tcc353xDrvSem); TcpalDeleteSemaphore(&Tcc353xStreamSema); TcpalDeleteSemaphore(&Tcc353xLnaControlSema); return rc; }
void TcbdDeinitQueue(TcbdQueue_t *_queue) { _queue->front = 0; _queue->rear = 0; _queue->qsize = 0; _queue->buffSize = 0; TcpalMemoryFree((void*)_queue->q); TcpalDeleteSemaphore(&_queue->sem); }
static int broadcast_Isdb_i2c_remove(struct i2c_client* client) { int rc = 0; TcpalPrintStatus((I08S *)"[%s]\n", __func__); #ifndef _NOT_USE_WAKE_LOCK_ wake_lock_destroy(&IsdbCtrlInfo.wake_lock); #endif memset((unsigned char*)&IsdbCtrlInfo, 0x0, sizeof(struct broadcast_tcc3530_ctrl_data)); TcpalDeleteSemaphore(&Tcc353xDrvSem); return rc; }
I32S TcpalRegisterIrqHandler(TcbdDevice_t *_device) { #else I32S TcpalRegisterIrqHandler(void) { extern TcbdDevice_t *GetTcbdDevice(void); TcbdDevice_t *_device = GetTcbdDevice(); #endif struct spi_device *spi = TCC_GET_SPI_DRIVER(); TcbdIrqData.isIrqEnable = 0; #if defined(__WORKQUEUE__) TcbdIrqData.workQueue = create_singlethread_workqueue("TcbdStreamParsingWork"); TcbdIrqData.device = _device; TcbdIrqData.tcbd_irq = spi->irq; TcpalCreateSemaphore(&TcbdIrqData.lock, "IRQ", 1); INIT_WORK(&TcbdIrqData.work, TcbdStreamParsingWork); #endif //__WORKQUEUE__ TcbdInitParser(TcbdStreamCallback); TchalIrqSetup(); TcbdDebug(DEBUG_ERROR,"irq:%d\n", TcbdIrqData.tcbd_irq); return request_irq(TcbdIrqData.tcbd_irq, TcbdIrqHandler, IRQF_DISABLED | IRQF_TRIGGER_FALLING, "tc317x_stream", &TcbdIrqData); } I32S TcpalUnRegisterIrqHandler(void) { disable_irq(TcbdIrqData.tcbd_irq); flush_workqueue(TcbdIrqData.workQueue); destroy_workqueue(TcbdIrqData.workQueue); TcpalDeleteSemaphore(&TcbdIrqData.lock); return 0; }