void drv_mhl_seq_show(struct seq_file *s) { int gpio_value; switch(fwPowerState) { case POWER_STATE_D3: seq_printf(s, "MHL POWER STATE [D3]\n"); break; case POWER_STATE_D0_NO_MHL: seq_printf(s, "MHL POWER STATE [D0_NO_MHL]\n"); break; case POWER_STATE_D0_MHL: seq_printf(s, "MHL POWER STATE [D0_MHL]\n"); break; case POWER_STATE_FIRST_INIT: seq_printf(s, "MHL POWER STATE [FIRST_INIT]\n"); break; default:break; } if(tmdsPowRdy) seq_printf(s, "TMDS [ON]\n"); else seq_printf(s, "TMDS [OFF]\n"); HalGpioGetPin(GPIO_SRC_VBUS_ON,&gpio_value); if(gpio_value) seq_printf(s, "SRC BUS [ON]\n"); else seq_printf(s, "SRC BUS [OFF]\n"); HalGpioGetPin(GPIO_SINK_VBUS_ON,&gpio_value); if(gpio_value) seq_printf(s, "SINK BUS [ON]\n"); else seq_printf(s, "SINK BUS [OFF]\n"); }
/** * @brief SilMon IRQ handler, * *****************************************************************************/ static irqreturn_t HalSilMonRequestIrqHandler(int irq, void *data) { pMhlDeviceContext pMhlDevContext = (pMhlDeviceContext)data; int gpio_value; unsigned long flags; // SII_DEBUG_PRINT(SII_OSAL_DEBUG_TRACE,"------------- HalSilMonRequestIrqHandler irq coming! -------------\n"); spin_lock_irqsave(&pMhlDevContext->SilMonRequestIRQ_Lock, flags); if(HalGpioGetPin(GPIO_REQ_IN,&gpio_value)<0) { SII_DEBUG_PRINT(SII_OSAL_DEBUG_TRACE,"HalSilMonRequestIrqHandler GPIO(%d) get error\n",gpio_value); spin_unlock_irqrestore(&pMhlDevContext->SilMonRequestIRQ_Lock, flags); return IRQ_HANDLED; } /* the following is for void wrongly invoke irq, it may be caused by EMI when plug in/out MHL cable; */ if((gMhlDevice.SilMonControlReleased&& gpio_value) ||(!gMhlDevice.SilMonControlReleased&&!gpio_value)) { SII_DEBUG_PRINT(SII_OSAL_DEBUG_TRACE,"HalSilMonRequestIrqHandler, wrong IRQ coming, please check you board\n"); spin_unlock_irqrestore(&pMhlDevContext->SilMonRequestIRQ_Lock, flags); return IRQ_HANDLED; } if(gpio_value) { HalGpioSetPin(GPIO_GNT,1); HalEnableI2C(true); enable_irq(pMhlDevContext->pI2cClient->irq); SII_DEBUG_PRINT(SII_OSAL_DEBUG_TRACE,"release SiliMon control\n"); gMhlDevice.SilMonControlReleased = true; } else { disable_irq(pMhlDevContext->pI2cClient->irq); HalEnableI2C(false); HalGpioSetPin(GPIO_GNT,0); SII_DEBUG_PRINT(SII_OSAL_DEBUG_TRACE,"under SiliMon control \n"); gMhlDevice.SilMonControlReleased = false; } spin_unlock_irqrestore(&pMhlDevContext->SilMonRequestIRQ_Lock, flags); return IRQ_HANDLED; }
static irqreturn_t HalSilMonRequestIrqHandler(int irq, void *data) { pMhlDeviceContext pMhlDevContext = (pMhlDeviceContext)data; int gpio_value; unsigned long flags; spin_lock_irqsave(&pMhlDevContext->SilMonRequestIRQ_Lock, flags); if(HalGpioGetPin(GPIO_REQ_IN,&gpio_value)<0) { SII_DEBUG_PRINT(SII_OSAL_DEBUG_TRACE,"HalSilMonRequestIrqHandler GPIO(%d) get error\n",gpio_value); spin_unlock_irqrestore(&pMhlDevContext->SilMonRequestIRQ_Lock, flags); return IRQ_HANDLED; } if((gMhlDevice.SilMonControlReleased&& gpio_value) ||(!gMhlDevice.SilMonControlReleased&&!gpio_value)) { SII_DEBUG_PRINT(SII_OSAL_DEBUG_TRACE,"HalSilMonRequestIrqHandler, wrong IRQ coming, please check you board\n"); spin_unlock_irqrestore(&pMhlDevContext->SilMonRequestIRQ_Lock, flags); return IRQ_HANDLED; } if(gpio_value) { //HalGpioSetPin(GPIO_GNT,1); HalEnableI2C(true); enable_irq(pMhlDevContext->pI2cClient->irq); #ifdef RGB_BOARD enable_irq(pMhlDevContext->SilExtDeviceIRQ); #endif gMhlDevice.SilMonControlReleased = true; } else { disable_irq(pMhlDevContext->pI2cClient->irq); #ifdef RGB_BOARD disable_irq(pMhlDevContext->SilExtDeviceIRQ); #endif HalEnableI2C(false); //HalGpioSetPin(GPIO_GNT,0); gMhlDevice.SilMonControlReleased = false; } spin_unlock_irqrestore(&pMhlDevContext->SilMonRequestIRQ_Lock, flags); return IRQ_HANDLED; }