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