Lines Matching full:gpioc
17 static struct pinmux_info *gpioc; variable
102 static void config_reg_helper(struct pinmux_info *gpioc, in config_reg_helper() argument
115 *mapped_regp = pfc_phys_to_virt(gpioc, crp->reg); in config_reg_helper()
128 static int read_config_reg(struct pinmux_info *gpioc, in read_config_reg() argument
136 config_reg_helper(gpioc, crp, field, &mapped_reg, &mask, &pos); in read_config_reg()
145 static void write_config_reg(struct pinmux_info *gpioc, in write_config_reg() argument
152 config_reg_helper(gpioc, crp, field, &mapped_reg, &mask, &pos); in write_config_reg()
165 if (gpioc->unlock_reg) in write_config_reg()
166 gpio_write_raw_reg(pfc_phys_to_virt(gpioc, gpioc->unlock_reg), in write_config_reg()
172 static int setup_data_reg(struct pinmux_info *gpioc, unsigned gpio) in setup_data_reg() argument
174 struct pinmux_gpio *gpiop = &gpioc->gpios[gpio]; in setup_data_reg()
178 if (!enum_in_range(gpiop->enum_id, &gpioc->data)) in setup_data_reg()
183 data_reg = gpioc->data_regs + k; in setup_data_reg()
188 data_reg->mapped_reg = pfc_phys_to_virt(gpioc, data_reg->reg); in setup_data_reg()
207 static void setup_data_regs(struct pinmux_info *gpioc) in setup_data_regs() argument
212 for (k = gpioc->first_gpio; k <= gpioc->last_gpio; k++) in setup_data_regs()
213 setup_data_reg(gpioc, k); in setup_data_regs()
217 drp = gpioc->data_regs + k; in setup_data_regs()
228 static int get_data_reg(struct pinmux_info *gpioc, unsigned gpio, in get_data_reg() argument
231 struct pinmux_gpio *gpiop = &gpioc->gpios[gpio]; in get_data_reg()
234 if (!enum_in_range(gpiop->enum_id, &gpioc->data)) in get_data_reg()
239 *drp = gpioc->data_regs + k; in get_data_reg()
244 static int get_config_reg(struct pinmux_info *gpioc, pinmux_enum_t enum_id, in get_config_reg() argument
255 config_reg = gpioc->cfg_regs + k; in get_config_reg()
290 static int get_gpio_enum_id(struct pinmux_info *gpioc, unsigned gpio, in get_gpio_enum_id() argument
293 pinmux_enum_t enum_id = gpioc->gpios[gpio].enum_id; in get_gpio_enum_id()
294 pinmux_enum_t *data = gpioc->gpio_data; in get_gpio_enum_id()
297 if (!enum_in_range(enum_id, &gpioc->data)) { in get_gpio_enum_id()
298 if (!enum_in_range(enum_id, &gpioc->mark)) { in get_gpio_enum_id()
309 for (k = 0; k < gpioc->gpio_data_size; k++) { in get_gpio_enum_id()
322 static int pinmux_config_gpio(struct pinmux_info *gpioc, unsigned gpio, in pinmux_config_gpio() argument
338 range = &gpioc->output; in pinmux_config_gpio()
342 range = &gpioc->input; in pinmux_config_gpio()
346 range = &gpioc->input_pu; in pinmux_config_gpio()
350 range = &gpioc->input_pd; in pinmux_config_gpio()
362 pos = get_gpio_enum_id(gpioc, gpio, pos, &enum_id); in pinmux_config_gpio()
370 in_range = enum_in_range(enum_id, &gpioc->function); in pinmux_config_gpio()
407 if (get_config_reg(gpioc, enum_id, &cr, in pinmux_config_gpio()
414 (read_config_reg(gpioc, cr, field) != value)) in pinmux_config_gpio()
419 write_config_reg(gpioc, cr, field, value); in pinmux_config_gpio()
449 if (!gpioc) in sh_gpio_request()
452 if ((gpioc->gpios[offset].flags & PINMUX_FLAG_TYPE) != PINMUX_TYPE_NONE) in sh_gpio_request()
457 if (get_data_reg(gpioc, offset, &dummy, &i) != 0) in sh_gpio_request()
463 if (pinmux_config_gpio(gpioc, offset, in sh_gpio_request()
468 if (pinmux_config_gpio(gpioc, offset, in sh_gpio_request()
474 gpioc->gpios[offset].flags &= ~PINMUX_FLAG_TYPE; in sh_gpio_request()
475 gpioc->gpios[offset].flags |= pinmux_type; in sh_gpio_request()
486 if (!gpioc) in sh_gpio_free()
489 pinmux_type = gpioc->gpios[offset].flags & PINMUX_FLAG_TYPE; in sh_gpio_free()
490 pinmux_config_gpio(gpioc, offset, pinmux_type, GPIO_CFG_FREE); in sh_gpio_free()
491 gpioc->gpios[offset].flags &= ~PINMUX_FLAG_TYPE; in sh_gpio_free()
492 gpioc->gpios[offset].flags |= PINMUX_TYPE_NONE; in sh_gpio_free()
495 static int pinmux_direction(struct pinmux_info *gpioc, in pinmux_direction() argument
501 if (!gpioc) in pinmux_direction()
504 pinmux_type = gpioc->gpios[gpio].flags & PINMUX_FLAG_TYPE; in pinmux_direction()
513 pinmux_config_gpio(gpioc, gpio, pinmux_type, GPIO_CFG_FREE); in pinmux_direction()
519 if (pinmux_config_gpio(gpioc, gpio, in pinmux_direction()
524 if (pinmux_config_gpio(gpioc, gpio, in pinmux_direction()
529 gpioc->gpios[gpio].flags &= ~PINMUX_FLAG_TYPE; in pinmux_direction()
530 gpioc->gpios[gpio].flags |= new_pinmux_type; in pinmux_direction()
539 return pinmux_direction(gpioc, offset, PINMUX_TYPE_INPUT); in sh_gpio_direction_input()
542 static void sh_gpio_set_value(struct pinmux_info *gpioc, in sh_gpio_set_value() argument
548 if (!gpioc || get_data_reg(gpioc, gpio, &dr, &bit) != 0) in sh_gpio_set_value()
556 sh_gpio_set_value(gpioc, offset, value); in sh_gpio_direction_output()
557 return pinmux_direction(gpioc, offset, PINMUX_TYPE_OUTPUT); in sh_gpio_direction_output()
560 static int sh_gpio_get_value(struct pinmux_info *gpioc, unsigned gpio) in sh_gpio_get_value() argument
565 if (!gpioc || get_data_reg(gpioc, gpio, &dr, &bit) != 0) in sh_gpio_get_value()
568 if ((gpioc->gpios[gpio].flags & PINMUX_FLAG_TYPE) == PINMUX_TYPE_INPUT) in sh_gpio_get_value()
577 return sh_gpio_get_value(gpioc, offset); in sh_gpio_get()
582 sh_gpio_set_value(gpioc, offset, value); in sh_gpio_set()
588 gpioc = pip; in register_pinmux()
590 setup_data_regs(gpioc); in register_pinmux()
598 if (gpioc != pip) in unregister_pinmux()
601 gpioc = NULL; in unregister_pinmux()