void mt_gpio_dump_diff(UINT32 pre, UINT32 cur) { #if defined(GPIO_INIT_DEBUG) int idx; GPIOVER("------ dumping difference between %p and %p ------\n", &pre, &cur); for (idx = 0; idx < sizeof(pre); idx++) { if (pre != cur) GPIOVER("diff: raw[%2d] : 0x%08X <=> 0x%08X\n", idx, pre, cur); } //GPIOVER("memcmp(%p, %p, %d) = %d\n", p, q, sizeof(*pre), memcmp(p, q, sizeof(*pre))); GPIOVER("------ dumping difference end --------------------------------\n"); #endif }
void mt_gpio_set_default_chip(void) { GPIO_REGS *pReg = (GPIO_REGS*)(GPIO_BASE); unsigned int idx; u32 val; for (idx = 0; idx < sizeof(pReg->dir)/sizeof(pReg->dir[0]); idx++){ val = gpio_init_dir_data[idx]; GPIO_WR32(&pReg->dir[idx],val); } for (idx = 0; idx < sizeof(pReg->pullen)/sizeof(pReg->pullen[0]); idx++){ val = gpio_init_pullen_data[idx]; GPIO_WR32(&pReg->pullen[idx],val); } for (idx = 0; idx < sizeof(pReg->pullsel)/sizeof(pReg->pullsel[0]); idx++){ val = gpio_init_pullsel_data[idx]; GPIO_WR32(&pReg->pullsel[idx],val); } /*for keypad special register*/ mt_set_gpio_pull_select(GPIO74, GPIO74_PULL); mt_set_gpio_pull_select(GPIO75, GPIO75_PULL); mt_set_gpio_pull_select(GPIO92, GPIO92_PULL); mt_set_gpio_pull_select(GPIO93, GPIO93_PULL); mt_set_gpio_pull_select(GPIO167, GPIO167_PULL); mt_set_gpio_pull_select(GPIO168, GPIO168_PULL); for (idx = 0; idx < sizeof(pReg->dout)/sizeof(pReg->dout[0]); idx++) { val = gpio_init_dout_data[idx]; GPIO_WR32(&pReg->dout[idx],val); } for (idx = 0; idx < sizeof(pReg->mode)/sizeof(pReg->mode[0]); idx++) { val = gpio_init_mode_data[idx]; GPIO_WR32(&pReg->mode[idx],val); } for (idx = 0; idx < sizeof(pReg->smt)/sizeof(pReg->smt[0]); idx++) { val = gpio_init_smt_data[idx]; GPIO_WR32(&pReg->smt[idx],val); } /*for msdc special smt */ mt_set_gpio_smt(GPIO_SMT_GRP25, GPIO_SMT_GROUP_25); mt_set_gpio_smt(GPIO_SMT_GRP26, GPIO_SMT_GROUP_26); mt_set_gpio_smt(GPIO_SMT_GRP27, GPIO_SMT_GROUP_27); mt_set_gpio_smt(GPIO_SMT_GRP28, GPIO_SMT_GROUP_28); mt_set_gpio_smt(GPIO_SMT_GRP29, GPIO_SMT_GROUP_29); mt_set_gpio_smt(GPIO_SMT_GRP30, GPIO_SMT_GROUP_30); mt_set_gpio_smt(GPIO_SMT_GRP31, GPIO_SMT_GROUP_31); mt_set_gpio_smt(GPIO_SMT_GRP32, GPIO_SMT_GROUP_32); mt_set_gpio_smt(GPIO_SMT_GRP33, GPIO_SMT_GROUP_33); //set BSI driving 2ma->4ma: 0x10005B30[7:4]=0x2 GPIO_WR32(&pReg->drv_mode[3].set, 0x20); GPIOVER("mt_gpio_set_default() done\n"); }
void mt_gpio_set_dsel(u8 bpi_1v8) { GPIO_REGS *pReg = (GPIO_REGS*)(GPIO_BASE); if (bpi_1v8 == GPIO_VIO18) { /*bpi_ctrl[9:4] = b`000000, [3:0] = b`0000*/ GPIO_WR32(&pReg->bpi_ctrl[0].rst, 0x3FF); } else if (bpi_1v8 == GPIO_VIO28){ /*bpi_ctrl[9:4] = b`001100, [3:0] = b`0101*/ GPIO_WR32(&pReg->bpi_ctrl[0].set, 0xC5); GPIO_WR32(&pReg->bpi_ctrl[0].rst, 0x33A); } GPIOVER("BPI 0x%x\n",GPIO_RD32(&pReg->bpi_ctrl[0].val)); }
/*----------------------------------------------------------------------------*/ void mt_gpio_dump_diff(GPIO_REGS* pre, GPIO_REGS* cur) { #if defined(GPIO_INIT_DEBUG) GPIO_REGS *pReg = (GPIO_REGS*)(GPIO_BASE); unsigned int idx; unsigned char* p = (unsigned char*)pre; unsigned char* q = (unsigned char*)cur; GPIOVER("------ dumping difference between %p and %p ------\n", pre, cur); for (idx = 0; idx < sizeof(pReg->dir)/sizeof(pReg->dir[0]); idx++) { if (pre->dir[idx].val != cur->dir[idx].val) GPIOVER("diff: dir[%2d] : 0x%08X <=> 0x%08X\n", idx, pre->dir[idx].val, cur->dir[idx].val); } for (idx = 0; idx < sizeof(pReg->pullen)/sizeof(pReg->pullen[0]); idx++) { if (pre->pullen[idx].val != cur->pullen[idx].val) GPIOVER("diff: pullen[%2d] : 0x%08X <=> 0x%08X\n", idx, pre->pullen[idx].val, cur->pullen[idx].val); } for (idx = 0; idx < sizeof(pReg->pullsel)/sizeof(pReg->pullsel[0]); idx++) { if (pre->pullsel[idx].val != cur->pullsel[idx].val) GPIOVER("diff: pullsel[%2d]: 0x%08X <=> 0x%08X\n", idx, pre->pullsel[idx].val, cur->pullsel[idx].val); } for (idx = 0; idx < sizeof(pReg->dout)/sizeof(pReg->dout[0]); idx++) { if (pre->dout[idx].val != cur->dout[idx].val) GPIOVER("diff: dout[%2d] : 0x%08X <=> 0x%08X\n", idx, pre->dout[idx].val, cur->dout[idx].val); } for (idx = 0; idx < sizeof(pReg->mode)/sizeof(pReg->mode[0]); idx++) { if (pre->mode[idx].val != cur->mode[idx].val) GPIOVER("diff: mode[%2d] : 0x%08X <=> 0x%08X\n", idx, pre->mode[idx].val, cur->mode[idx].val); } for (idx = 0; idx < sizeof(*pre); idx++) { if (p[idx] != q[idx]) GPIOVER("diff: raw[%2d]: 0x%02X <=> 0x%02X\n", idx, p[idx], q[idx]); } GPIOVER("memcmp(%p, %p, %d) = %d\n", p, q, sizeof(*pre), memcmp(p, q, sizeof(*pre))); GPIOVER("------ dumping difference end --------------------------------\n"); #endif }
void mt_gpio_set_default_ext(void) { #if 0 GPIOEXT_REGS *pReg = (GPIOEXT_REGS*)(GPIOEXT_BASE); int idx; u32 val; for (idx = 0; idx < sizeof(pReg->dir)/sizeof(pReg->dir[0]); idx++){ val = gpioext_init_dir_data[idx]; GPIOEXT_WR(&pReg->dir[idx],val); } for (idx = 0; idx < sizeof(pReg->pullen)/sizeof(pReg->pullen[0]); idx++){ val = gpioext_init_pullen_data[idx]; GPIOEXT_WR(&pReg->pullen[idx],val); } for (idx = 0; idx < sizeof(pReg->pullsel)/sizeof(pReg->pullsel[0]); idx++){ val = gpioext_init_pullsel_data[idx]; GPIOEXT_WR(&pReg->pullsel[idx],val); } for (idx = 0; idx < sizeof(pReg->dinv)/sizeof(pReg->dinv[0]); idx++) { val = gpioext_init_dinv_data[idx]; GPIOEXT_WR(&pReg->dinv[idx],val); } for (idx = 0; idx < sizeof(pReg->dout)/sizeof(pReg->dout[0]); idx++) { val = gpioext_init_dout_data[idx]; GPIOEXT_WR(&pReg->dout[idx],val); } for (idx = 0; idx < sizeof(pReg->mode)/sizeof(pReg->mode[0]); idx++) { val = gpioext_init_mode_data[idx]; GPIOEXT_WR(&pReg->mode[idx],val); } GPIOVER("mt_gpio_set_default_ext() done\n"); #endif }
void mt_gpio_set_dsel(u8 nml2_1v8,u8 bsi_1v8,u8 bpi_1v8) { #if 0 u32 mask; u32 val; u32 bit; #define TDSEL_1V8 0x0 #define TDSEL_3V3 0x5 #define RDSEL_1V8 0x0 #define RDSEL_3V3 0xC #define GPIO_NML2_OFFSET 0x730 #define GPIO_NML2_PWMR_OFFSET 0x740 #define GPIO_BSI_OFFSET 0x750 #define GPIO_BPI_OFFSET 0x740 //set NML2 UART val = GPIO_RD32(GPIO_BASE + GPIO_NML2_OFFSET); mask = (1L << 4) - 1; bit = 8; val &= ~(mask << (bit)); val |= (nml2_1v8?TDSEL_1V8:TDSEL_3V3)<<bit; GPIO_WR32(GPIO_BASE + GPIO_NML2_OFFSET, val); val = GPIO_RD32(GPIO_BASE + GPIO_NML2_OFFSET); mask = (1L << 6) - 1; bit = 16; val &= ~(mask << (bit)); val |= (nml2_1v8?RDSEL_1V8:RDSEL_3V3)<<bit; GPIO_WR32(GPIO_BASE + GPIO_NML2_OFFSET, val); //set NML2 PWM val = GPIO_RD32(GPIO_BASE + GPIO_NML2_OFFSET); mask = (1L << 4) - 1; bit = 24; val &= ~(mask << (bit)); val |= (nml2_1v8?TDSEL_1V8:TDSEL_3V3)<<bit; GPIO_WR32(GPIO_BASE + GPIO_NML2_OFFSET, val); val = GPIO_RD32(GPIO_BASE + GPIO_NML2_PWMR_OFFSET); mask = (1L << 6) - 1; bit = 0; val &= ~(mask << (bit)); val |= (nml2_1v8?RDSEL_1V8:RDSEL_3V3)<<bit; GPIO_WR32(GPIO_BASE + GPIO_NML2_PWMR_OFFSET, val); //set BPI val = GPIO_RD32(GPIO_BASE + GPIO_BPI_OFFSET); mask = (1L << 4) - 1; bit = 8; val &= ~(mask << (bit)); val |= (bpi_1v8?TDSEL_1V8:TDSEL_3V3)<<bit; GPIO_WR32(GPIO_BASE + GPIO_BPI_OFFSET, val); val = GPIO_RD32(GPIO_BASE + GPIO_BPI_OFFSET ); mask = (1L << 6) - 1; bit = 16; val &= ~(mask << (bit)); val |= (bpi_1v8?RDSEL_1V8:RDSEL_3V3)<<bit; GPIO_WR32(GPIO_BASE + GPIO_BPI_OFFSET, val); //set BSI val = GPIO_RD32(GPIO_BASE + GPIO_BSI_OFFSET); mask = (1L << 4) - 1; bit = 0; val &= ~(mask << (bit)); val |= (bsi_1v8?TDSEL_1V8:TDSEL_3V3)<<bit; GPIO_WR32(GPIO_BASE + GPIO_BSI_OFFSET, val); val = GPIO_RD32(GPIO_BASE + GPIO_BSI_OFFSET ); mask = (1L << 6) - 1; bit = 8; val &= ~(mask << (bit)); val |= (bsi_1v8?RDSEL_1V8:RDSEL_3V3)<<bit; GPIO_WR32(GPIO_BASE + GPIO_BSI_OFFSET, val); GPIOVER("NML2 0x%x,BPI 0x%x, BSI 0x%x\n",GPIO_RD32(GPIO_BASE + GPIO_NML2_OFFSET),GPIO_RD32(GPIO_BASE + GPIO_BPI_OFFSET),GPIO_RD32(GPIO_BASE + GPIO_BSI_OFFSET)); #endif }