static void bd_alive_init(void) { int index, bit; int mode, out, lv, plup, detect; U32 gpio; #ifdef CONFIG_AK_GPIO_CONFIGS U32 *pads = ALV_PADS_FOR_DEFAULTS; #else const U32 pads[] = { PAD_GPIOALV0, PAD_GPIOALV1, PAD_GPIOALV2, PAD_GPIOALV3, PAD_GPIOALV4, PAD_GPIOALV5 }; #endif // index = sizeof(pads)/sizeof(pads[0]); index = 6; /* Alive pad function */ for (bit = 0; index > bit; bit++) { NX_ALIVE_ClearInterruptPending(bit); gpio = pads[bit]; //printk("GPIO ALV: Pin %d Value %02x\n", bit, gpio); mode = PAD_GET_MODE(gpio); lv = PAD_GET_LEVEL(gpio); plup = PAD_GET_PULLUP(gpio); switch (mode) { case PAD_GET_MODE(PAD_MODE_IN ): case PAD_GET_MODE(PAD_MODE_INT): out = 0; break; case PAD_GET_MODE(PAD_MODE_OUT): out = 1; break; case PAD_GET_MODE(PAD_MODE_ALT): printk("ERROR, alive.%d not support alt function\n", bit); continue; default : printk("ERROR, unknown alive mode (%d=%d)\n", bit, mode); continue; } NX_ALIVE_SetOutputEnable(bit, (out ? CTRUE : CFALSE)); NX_ALIVE_SetOutputValue (bit, (lv)); NX_ALIVE_SetPullUpEnable(bit, (plup & 1 ? CTRUE : CFALSE)); /* set interrupt mode */ for (detect = 0; 6 > detect; detect++) { if (mode == PAD_GET_MODE(PAD_MODE_INT)) NX_ALIVE_SetDetectMode(detect, bit, (lv == detect ? CTRUE : CFALSE)); else NX_ALIVE_SetDetectMode(detect, bit, CFALSE); } NX_ALIVE_SetDetectEnable(bit, (mode == PAD_MODE_INT ? CTRUE : CFALSE)); } }
static void init_alive_pad(void) { int io_bit; U32 io_mod, outval, detect, pullup, io_num; const U32 alv_pad[] = { PAD_GPIOALV0, PAD_GPIOALV1, PAD_GPIOALV2, PAD_GPIOALV3 }; io_num = sizeof(alv_pad)/sizeof(alv_pad[0]); /* Alive pad function */ for (io_bit = 0; io_num > io_bit; io_bit++) { io_mod = PAD_GET_PADMODE(alv_pad[io_bit]); switch(io_mod) { case PAD_MODE_IN : case PAD_MODE_DECT : NX_ALIVE_SetOutputEnable(io_bit, CFALSE); break; case PAD_MODE_OUT : NX_ALIVE_SetOutputEnable(io_bit, CTRUE); break; default : DBGOUT("\n Unknown GPIO ALIVE Mode(0x%x)\n", io_mod); continue; } outval = PAD_GET_PADMODE(alv_pad[io_bit]); pullup = PAD_GET_PULLUP(alv_pad[io_bit]); detect = PAD_GET_DECTMODE(alv_pad[io_bit]); NX_ALIVE_SetOutputValue (io_bit, (outval ? CTRUE : CFALSE)); NX_ALIVE_SetPullUpEnable(io_bit, (pullup ? CTRUE : CFALSE)); // For wakeup source NX_ALIVE_SetDetectMode(detect, io_bit, (io_mod == PAD_MODE_DECT ? CTRUE : CFALSE)); NX_ALIVE_SetDetectEnable(io_bit, (io_mod == PAD_MODE_DECT ? CTRUE : CFALSE)); } }