Lines Matching refs:state
458 * struct tb10x_port - state of an I/O port
469 * struct tb10x_pinctrl - TB10x pin controller internal state
475 * @mutex: mutex for exclusive access to a pin controller's state.
476 * @ports: current state of each port.
492 static inline void tb10x_pinctrl_set_config(struct tb10x_pinctrl *state,
497 if (state->ports[port].count)
500 state->ports[port].mode = mode;
502 pcfg = ioread32(state->base) & ~(PCFG_PORT_MASK(port));
504 iowrite32(pcfg, state->base);
508 struct tb10x_pinctrl *state,
511 return (ioread32(state->base) & PCFG_PORT_MASK(port))
517 struct tb10x_pinctrl *state = pinctrl_dev_get_drvdata(pctl);
518 return state->pinfuncgrpcnt;
523 struct tb10x_pinctrl *state = pinctrl_dev_get_drvdata(pctl);
524 return state->pingroups[n].name;
531 struct tb10x_pinctrl *state = pinctrl_dev_get_drvdata(pctl);
533 *pins = state->pingroups[n].pins;
534 *num_pins = state->pingroups[n].pincnt;
578 struct tb10x_pinctrl *state = pinctrl_dev_get_drvdata(pctl);
579 return state->pinfuncnt;
585 struct tb10x_pinctrl *state = pinctrl_dev_get_drvdata(pctl);
586 return state->pinfuncs[n].name;
593 struct tb10x_pinctrl *state = pinctrl_dev_get_drvdata(pctl);
595 *groups = &state->pinfuncs[n].group;
605 struct tb10x_pinctrl *state = pinctrl_dev_get_drvdata(pctl);
610 mutex_lock(&state->mutex);
618 for (i = 0; i < state->pinfuncgrpcnt; i++) {
619 const struct tb10x_pinfuncgrp *pfg = &state->pingroups[i];
639 } else if (state->ports[port].count
640 && (state->ports[port].mode == mode)) {
645 mutex_unlock(&state->mutex);
659 set_bit(pin, state->gpios);
668 tb10x_pinctrl_set_config(state, muxport, muxmode);
670 mutex_unlock(&state->mutex);
679 struct tb10x_pinctrl *state = pinctrl_dev_get_drvdata(pctl);
681 mutex_lock(&state->mutex);
683 clear_bit(pin, state->gpios);
685 mutex_unlock(&state->mutex);
691 struct tb10x_pinctrl *state = pinctrl_dev_get_drvdata(pctl);
692 const struct tb10x_pinfuncgrp *grp = &state->pingroups[group_selector];
698 mutex_lock(&state->mutex);
704 if (state->ports[grp->port].count
705 && (state->ports[grp->port].mode != grp->mode)) {
706 mutex_unlock(&state->mutex);
715 if (test_bit(grp->pins[i], state->gpios)) {
716 mutex_unlock(&state->mutex);
720 tb10x_pinctrl_set_config(state, grp->port, grp->mode);
722 state->ports[grp->port].count++;
724 mutex_unlock(&state->mutex);
753 struct tb10x_pinctrl *state;
761 state = devm_kzalloc(dev, struct_size(state, pinfuncs,
764 if (!state)
767 platform_set_drvdata(pdev, state);
768 mutex_init(&state->mutex);
770 state->base = devm_platform_ioremap_resource(pdev, 0);
771 if (IS_ERR(state->base)) {
772 ret = PTR_ERR(state->base);
776 state->pingroups = tb10x_pingroups;
777 state->pinfuncgrpcnt = ARRAY_SIZE(tb10x_pingroups);
780 state->ports[i].mode = tb10x_pinctrl_get_config(state, i);
787 state->pinfuncs[state->pinfuncnt].name = child->name;
788 state->pinfuncs[state->pinfuncnt].group = name;
789 state->pinfuncnt++;
793 state->pctl = devm_pinctrl_register(dev, &tb10x_pindesc, state);
794 if (IS_ERR(state->pctl)) {
796 ret = PTR_ERR(state->pctl);
803 mutex_destroy(&state->mutex);
809 struct tb10x_pinctrl *state = platform_get_drvdata(pdev);
811 mutex_destroy(&state->mutex);