/******************************************************************************* * mvGppValueSet - Set a GPP Pin list value. * * DESCRIPTION: * This function set value for given GPP pin list. * * INPUT: * group - GPP group number * mask - 32bit mask value. Each set bit in the mask means that the * value of corresponding GPP will be set accordingly. Other GPP * are not affected. * value - 32bit value that describes GPP value per pin. * * OUTPUT: * None. * * EXAMPLE: * Set GPP8 value of '0' and GPP15 value of '1'. * mvGppActiveSet(0, (GPP8 | GPP15), ((0 & GPP8) | (GPP15)) ); * * RETURN: * None. * *******************************************************************************/ MV_STATUS mvGppValueSet (MV_U32 group, MV_U32 mask, MV_U32 value) { MV_U32 outEnable; MV_U32 i; if (group >= MV_GPP_MAX_GROUP) { DB(mvOsPrintf("mvGppValueSet: Error invalid group number \n")); return MV_BAD_PARAM; } /* verify that the gpp pin is configured as output */ /* Note that in the register out enabled -> bit = '0'. */ outEnable = ~MV_REG_READ(GPP_DATA_OUT_EN_REG(group)); for (i = 0 ; i < 32 ;i++) { if (((mask & (1 << i)) & (outEnable & (1 << i))) != (mask & (1 << i))) { mvOsPrintf("mvGppValueSet: Err. An attempt to set output "\ "value to GPP %d in input mode.\n", i); return MV_ERROR; } } gppRegSet(group, GPP_DATA_OUT_REG(group), mask, value); return MV_OK; }
/******************************************************************************* * mvGppTypeSet - Enable a GPP (OUT) pin * * DESCRIPTION: * * INPUT: * group - GPP group number * mask - 32bit mask value. Each set bit in the mask means that the type * of corresponding GPP will be set. Other GPPs are ignored. * value - 32bit value that describes GPP type per pin. * * OUTPUT: * None. * * EXAMPLE: * Set GPP8 to input and GPP15 to output. * mvGppTypeSet(0, (GPP8 | GPP15), * ((MV_GPP_IN & GPP8) | (MV_GPP_OUT & GPP15)) ); * * RETURN: * None. * *******************************************************************************/ MV_STATUS mvGppTypeSet(MV_U32 group, MV_U32 mask, MV_U32 value) { if (group >= MV_GPP_MAX_GROUP) { DB(mvOsPrintf("mvGppTypeSet: ERR. invalid group number \n")); return MV_BAD_PARAM; } gppRegSet(group, GPP_DATA_OUT_EN_REG(group), mask, value); /* Workaround for Erratum FE-MISC-70*/ if(mvCtrlRevGet()==MV_88F6XXX_A0_REV && (group == 1)) { mask &= 0x2; gppRegSet(0, GPP_DATA_OUT_EN_REG(0), mask, value); } /*End of WA*/ return MV_OK; }
/******************************************************************************* * mvGppPolaritySet - Set a GPP (IN) Pin list Polarity mode * * DESCRIPTION: * * INPUT: * group - GPP group number * mask - 32bit mask value. Each set bit in the mask means that the type * of corresponding GPP will be set. Other GPPs are ignored. * value - 32bit value that describes GPP polarity per pin. * * OUTPUT: * None. * * EXAMPLE: * Set GPP8 to the actual pin value and GPP15 to be inverted. * mvGppPolaritySet(0, (GPP8 | GPP15), * ((MV_GPP_IN_ORIGIN & GPP8) | (MV_GPP_IN_INVERT & GPP15)) ); * * RETURN: * None. * *******************************************************************************/ MV_STATUS mvGppPolaritySet(MV_U32 group, MV_U32 mask, MV_U32 value) { if (group >= MV_GPP_MAX_GROUP) { DB(mvOsPrintf("mvGppPolaritySet: ERR. invalid group number \n")); return MV_BAD_PARAM; } gppRegSet(group, GPP_DATA_IN_POL_REG(group), mask, value); return MV_OK; }
/******************************************************************************* * mvGppBlinkEn - Set a GPP (IN) Pin list to blink every ~100ms * * DESCRIPTION: * * INPUT: * group - GPP group number * mask - 32bit mask value. Each set bit in the mask means that the type * of corresponding GPP will be set. Other GPPs are ignored. * value - 32bit value that describes GPP blink per pin. * * OUTPUT: * None. * * EXAMPLE: * Set GPP8 to be static and GPP15 to be blinking. * mvGppBlinkEn(0, (GPP8 | GPP15), * ((MV_GPP_OUT_STATIC & GPP8) | (MV_GPP_OUT_BLINK & GPP15)) ); * * RETURN: * None. * *******************************************************************************/ MV_STATUS mvGppBlinkEn(MV_U32 group, MV_U32 mask, MV_U32 value) { if (group >= MV_GPP_MAX_GROUP) { DB(mvOsPrintf("mvGppBlinkEn: ERR. invalid group number \n")); return MV_BAD_PARAM; } gppRegSet(group, GPP_BLINK_EN_REG(group), mask, value); return MV_OK; }
/******************************************************************************* * mvGppValueSet - Set a GPP Pin list value. * * DESCRIPTION: * This function set value for given GPP pin list. * * INPUT: * group - GPP group number * mask - 32bit mask value. Each set bit in the mask means that the * value of corresponding GPP will be set accordingly. Other GPP * are not affected. * value - 32bit value that describes GPP value per pin. * * OUTPUT: * None. * * EXAMPLE: * Set GPP8 value of '0' and GPP15 value of '1'. * mvGppActiveSet(0, (GPP8 | GPP15), ((0 & GPP8) | (GPP15)) ); * * RETURN: * None. * *******************************************************************************/ MV_STATUS mvGppValueSet (MV_U32 group, MV_U32 mask, MV_U32 value) { MV_U32 outEnable, tmp; MV_U32 i; if (group >= MV_GPP_MAX_GROUP) { DB(mvOsPrintf("mvGppValueSet: Error invalid group number \n")); return MV_BAD_PARAM; } /* verify that the gpp pin is configured as output */ /* Note that in the register out enabled -> bit = '0'. */ outEnable = ~MV_REG_READ(GPP_DATA_OUT_EN_REG(group)); /* Workaround for Erratum FE-MISC-70*/ if(mvCtrlRevGet()==MV_88F6XXX_A0_REV && (group == 1)) { tmp = ~MV_REG_READ(GPP_DATA_OUT_EN_REG(0)); outEnable &= 0xfffffffd; outEnable |= (tmp & 0x2); } /*End of WA*/ for (i = 0 ; i < 32 ;i++) { if (((mask & (1 << i)) & (outEnable & (1 << i))) != (mask & (1 << i))) { mvOsPrintf("mvGppValueSet: Err. An attempt to set output "\ "value to GPP %d in input mode.\n", i); return MV_ERROR; } } gppRegSet(group, GPP_DATA_OUT_REG(group), mask, value); return MV_OK; }