static I32S Tcc353xTccspiSetup(I32S _moduleIndex) { struct TcpalTcspiData_t *spiData; if (_moduleIndex >= 2) { TcpalPrintErr((I08S *) "Not supported, moduleidx=%d\n", _moduleIndex); return TCC353X_RETURN_FAIL; } spiData = &TcpalTcspiData; memset(&TcpalTcspiData, 0, sizeof(TcpalTcspiData)); spiData->spi_dev = TCC_GET_SPI_DRIVER(); Tcc353xTccspiInit(); return TCC353X_RETURN_SUCCESS; }
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; }