/**
*	Function Name:	DSPDRV_Init
*
*	Description: Initialize DSP driver
*
*	Notes:
*
******************************************************************************/
void DSPDRV_Init()
{
	UInt32 *dsp_shared_mem;
	int rc;
	AP_SharedMem_t *shared_mem;
	UInt16 temp;


	aTrace(LOG_AUDIO_DSP, "DSPDRV_Init:\n");

	/* get DSP AP shared memory */
	dsp_shared_mem = ioremap_nocache(AP_SH_BASE, AP_SH_SIZE);

	if (dsp_shared_mem == NULL) {
		aTrace(LOG_AUDIO_DSP,
		"\n\r\t* mapping shared memory failed\n\r");
		return;
	}

	shared_mem = (AP_SharedMem_t *) dsp_shared_mem;

	temp = shared_mem->shared_dsp_support_chip_reg_ap_int;

	/* initialize DSP AP shared memory */
	VPSHAREDMEM_Init(dsp_shared_mem);

	shared_mem->shared_dsp_support_chip_reg_ap_int = temp;

	/* Create Tasklet */
	tasklet_init(&(dsp_drv.task), dsp_thread_proc,
		     (unsigned long)(&dsp_drv));

	/* enable AP to DSP interrupt */
	IRQ_EnableRIPInt();
	/* enable DSP to AP interrupt */
	IRQ_Enable_BModem_Interrupt();

	/* Plug in the ISR enables  IRQ198 */
	rc = request_irq(COMMS_SUBS6_IRQ, rip_isr,
			IRQF_DISABLED | IRQF_NO_SUSPEND,
			 "bcm215xx-dsp", &(dsp_drv));

	if (rc < 0) {
		aTrace(LOG_AUDIO_DSP,
		       "RIPISR: %s failed to attach interrupt, rc = %d\n",
		       __func__, rc);
		return;
	}

	CSL_VPU_Enable();

	return;
}
/**
*	Function Name:	DSPDRV_Init
*
*	Description: Initialize DSP driver
*
*	Notes:
*
******************************************************************************/
void DSPDRV_Init()
{
	UInt32 *dsp_shared_mem;
	int rc;

	aTrace(LOG_AUDIO_DSP, "DSPDRV_Init:\n");

	dsp_drv.h = chal_intc_init(KONA_BINTC_BASE_ADDR);

	dsp_shared_mem = DSPDRV_GetSharedMemoryAddress();

	VPSHAREDMEM_Init(dsp_shared_mem);

	/* temporary to open CP DSP shared memory structure on AP */
	cp_shared_mem = ioremap_nocache(CP_SH_BASE, CP_SH_SIZE);

	/* Create Tasklet */
	tasklet_init(&(dsp_drv.task), dsp_thread_proc,
		     (unsigned long)(&dsp_drv));

	IRQ_EnableRIPInt();
	IRQ_Enable_BModem_Interrupt(BMIRQ23, 6);

	/* Plug in the ISR enables  IRQ198 */
	rc = request_irq(COMMS_SUBS6_IRQ, rip_isr,
			IRQF_DISABLED | IRQF_NO_SUSPEND,
			 "bcm215xx-dsp", &(dsp_drv));

	if (rc < 0) {
		aTrace(LOG_AUDIO_DSP,
		       "RIPISR: %s failed to attach interrupt, rc = %d\n",
		       __func__, rc);
		return;
	}

	CSL_VPU_Enable();

	return;
}
static void IRQ_TriggerRIPInt(void)
{
	 void __iomem *chipreg_base = (void __iomem *)(KONA_CHIPREG_VA);

	 /* Forcing new interrupt in case DSP woke up after the Interrupt */
	 /* was enabled */
	 if ((vp_shared_mem->shared_ap_support_chip_reg_ap_int == 0) &&
		 (vp_shared_mem->shared_dsp_support_chip_reg_ap_int == 1))
		 IRQ_EnableRIPInt();

	 if (vp_shared_mem->shared_ap_support_chip_reg_ap_int) {
		 aTrace(LOG_AUDIO_DSP, "\n\r\t*IRQ_TriggerRIPInt: New Int*\n\r");
		 writel((1<<CHIPREG_OUTPUT12), (chipreg_base +
		 	CHIPREG_MDM_SW_INTR_SET_OFFSET));
	 } else {
		 aTrace(LOG_AUDIO_DSP, "\n\r\t*IRQ_TriggerRIPInt: Old Int*\n\r");
		 *(volatile UInt32*)(KONA_BINTC_BASE_ADDR +
		 BINTC_ISWIR1_OFFSET) = 1<<(IRQ_TO_BMIRQ(AP_RIP_IRQ)-32);
	 }


	return;
}