void bsp_set_pintrl(unsigned int type, unsigned int gpio, unsigned int value) { unsigned int group = 0; unsigned int pin = 0; struct pintrl_stru *normal_stru = NULL; if(gpio > GPIO_TOTAL || (type >= MODEM_IO_BUTT)) { ios_print_error("para is error, gpio = %d, type = %d, value = %d.\n", gpio, type, value); return ; } group = gpio / GPIO_MAX_NUMBER; pin = gpio % GPIO_MAX_NUMBER; normal_stru = get_pintrl(MODEM_PIN_NORMAL, group, pin); if(NULL == normal_stru) { ios_print_error("get_pintrl is fail, normal_stru = 0x%x.\n", normal_stru); return ; } bsp_pinctrl_modify_dts(MODEM_PIN_NORMAL, type, gpio, value); bsp_pinctrl_modify_dts(MODEM_PIN_POWERDOWN, type, gpio, value); pintrl_config(normal_stru, 1); }
int is_in_modem_pintrl(unsigned int gpio) { unsigned int group = gpio / GPIO_MAX_NUMBER; unsigned int pin = gpio % GPIO_MAX_NUMBER; if(NULL != get_pintrl(MODEM_PIN_NORMAL,group,pin)) return 0; return -1; }
int bsp_get_pintrl(unsigned int type, unsigned int gpio, unsigned int *value) { int ret = 0; unsigned int group = 0; unsigned int pin = 0; struct pintrl_stru *normal_stru = NULL; if(gpio > GPIO_TOTAL || (type >= MODEM_IO_BUTT) || (NULL == value)) { ios_print_error("para is error, gpio = %d, type = %d, value = %d.\n", gpio, type, value); return -1; } group = gpio / GPIO_MAX_NUMBER; pin = gpio % GPIO_MAX_NUMBER; normal_stru = get_pintrl(MODEM_PIN_NORMAL, group, pin); if(NULL == normal_stru) { ios_print_error("get_pintrl is fail, normal_stru = 0x%x.\n", normal_stru); return -1; } switch(type) { case MODEM_IO_MUX: *value = normal_stru->iomg_val; ret = 0; break; case MODEM_IO_CFG: *value = normal_stru->iocg_val; ret = 0; break; default: ios_print_error("type is error, type = %d.\n", type); ret = -1; } return ret; }
void bsp_set_pintrl(unsigned int type, unsigned int gpio, unsigned int value) { unsigned int group = 0; unsigned int pin = 0; struct pintrl_stru *init_stru = NULL; struct pintrl_stru *normal_stru = NULL; struct pintrl_stru *lowpower_stru = NULL; if(gpio > GPIO_TOTAL || (type >= MODEM_IO_BUTT)) { ios_print_error("para is error, gpio = %d, type = %d, value = %d.\n", gpio, type, value); return ; } group = gpio / GPIO_MAX_NUMBER; pin = gpio % GPIO_MAX_NUMBER; init_stru = get_pintrl(MODEM_PIN_INIT, group, pin); if(NULL == init_stru) { ios_print_error("get_pintrl is fail, init_stru = 0x%x.\n", init_stru); return ; } normal_stru = get_pintrl(MODEM_PIN_NORMAL, group, pin); if(NULL == normal_stru) { ios_print_error("get_pintrl is fail, normal_stru = 0x%x.\n", normal_stru); return ; } lowpower_stru = get_pintrl(MODEM_PIN_POWERDOWN, group, pin); if(NULL == lowpower_stru) { ios_print_error("get_pintrl is fail, lowpower_stru = 0x%x.\n", lowpower_stru); return ; } switch(type) { case MODEM_IO_MUX: init_stru->iomg_val = value; normal_stru->iomg_val = value; lowpower_stru->iomg_val = value; break; case MODEM_IO_CFG: init_stru->iocg_val = value; normal_stru->iocg_val = value; lowpower_stru->iocg_val = value; break; case MODEM_GPIO_INPUT: init_stru->iomg_val = 0; init_stru->gpio_dir = 0; normal_stru->iomg_val = 0; normal_stru->gpio_dir = 0; lowpower_stru->iomg_val = 0; lowpower_stru->gpio_dir = 0; break; case MODEM_GPIO_OUTPUT: init_stru->iomg_val = 0; init_stru->gpio_dir = 1; init_stru->gpio_val = !!value; normal_stru->iomg_val = 0; normal_stru->gpio_dir = 1; normal_stru->gpio_val = !!value; lowpower_stru->iomg_val = 0; lowpower_stru->gpio_dir = 1; lowpower_stru->gpio_val = !!value; break; default: ios_print_error("type is error, type = %d.\n", type); return ; } pintrl_config(normal_stru, 1); }
void bsp_pinctrl_modify_dts(u32 step ,unsigned int type, unsigned int gpio, unsigned int value) { unsigned int group = 0; unsigned int pin = 0; struct pintrl_stru *pin_cfg = NULL; if(gpio > GPIO_TOTAL || (type >= MODEM_IO_BUTT) || (step >= MODEM_PIN_BUTT)) { ios_print_error("para is error, step = %d, gpio = %d, type = %d, value = %d.\n", step, gpio, type, value); return ; } group = gpio / GPIO_MAX_NUMBER; pin = gpio % GPIO_MAX_NUMBER; pin_cfg = get_pintrl(step, group, pin); if(NULL == pin_cfg) { ios_print_error("get_pintrl is fail, pin_cfg = 0x%x.\n", pin_cfg); return ; } switch(type) { case MODEM_IO_MUX: if(PINCONFIG_NF_VAL != pin_cfg->iomg_val){ pin_cfg->iomg_val = value; } break; case MODEM_IO_CFG: if(PINCONFIG_NF_VAL != pin_cfg->iocg_val){ pin_cfg->iocg_val = value; } break; case MODEM_GPIO_INPUT: if(PINCONFIG_NF_VAL != pin_cfg->iocg_val){ pin_cfg->iomg_val = 0; } if(PINCONFIG_NF_VAL != pin_cfg->gpio_dir){ pin_cfg->gpio_dir = 0; } break; case MODEM_GPIO_OUTPUT: if(PINCONFIG_NF_VAL != pin_cfg->iomg_val){ pin_cfg->iomg_val = 0; } if(PINCONFIG_NF_VAL != pin_cfg->gpio_dir){ pin_cfg->gpio_dir = 1; } if(PINCONFIG_NF_VAL != pin_cfg->gpio_val){ pin_cfg->gpio_val = !!value; } break; default: ios_print_error("type is error, type = %d.\n", type); return ; } }