Lines Matching full:pin
99 int pin; member
307 if (OF_getencprop(node, "pin-count", &pincnt, sizeof(pcell_t)) >= 0 || in mv_gpio_attach()
313 device_printf(dev, "ERROR: no pin-count or ngpios entry found!\n"); in mv_gpio_attach()
320 /* Assign generic capabilities to every gpio pin */ in mv_gpio_attach()
405 void (*hand)(void *), void *arg, int pin, int flags, void **cookiep) in mv_gpio_setup_intrhandler() argument
414 if (pin < 0 || pin >= sc->pin_num) in mv_gpio_setup_intrhandler()
416 event = sc->gpio_events[pin]; in mv_gpio_setup_intrhandler()
419 if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_DEBOUNCE) { in mv_gpio_setup_intrhandler()
420 error = mv_gpio_debounce_init(dev, pin); in mv_gpio_setup_intrhandler()
425 } else if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_IRQ_DOUBLE_EDGE) in mv_gpio_setup_intrhandler()
426 mv_gpio_double_edge_init(dev, pin); in mv_gpio_setup_intrhandler()
428 error = intr_event_create(&event, (void *)s, 0, pin, in mv_gpio_setup_intrhandler()
433 "gpio%d:", pin); in mv_gpio_setup_intrhandler()
436 sc->gpio_events[pin] = event; in mv_gpio_setup_intrhandler()
450 if (s->pin >= sc->pin_num) in mv_gpio_intr_mask()
455 if (sc->gpio_setup[s->pin].gp_flags & (MV_GPIO_IN_IRQ_EDGE | in mv_gpio_intr_mask()
457 mv_gpio_edge(s->dev, s->pin, 0); in mv_gpio_intr_mask()
459 mv_gpio_level(s->dev, s->pin, 0); in mv_gpio_intr_mask()
480 if (s->pin >= sc->pin_num) in mv_gpio_intr_unmask()
485 if (sc->gpio_setup[s->pin].gp_flags & (MV_GPIO_IN_IRQ_EDGE | in mv_gpio_intr_unmask()
487 mv_gpio_edge(s->dev, s->pin, 1); in mv_gpio_intr_unmask()
489 mv_gpio_level(s->dev, s->pin, 1); in mv_gpio_intr_unmask()
499 int i, pin; in mv_gpio_exec_intr_handlers() local
508 pin = (high ? (i + GPIO_PINS_PER_REG) : i); in mv_gpio_exec_intr_handlers()
509 if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_DEBOUNCE) in mv_gpio_exec_intr_handlers()
510 mv_gpio_debounce_start(dev, pin); in mv_gpio_exec_intr_handlers()
511 else if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_IRQ_DOUBLE_EDGE) { in mv_gpio_exec_intr_handlers()
512 mv_gpio_polarity(dev, pin, 0, 1); in mv_gpio_exec_intr_handlers()
513 mv_gpio_intr_handler(dev, pin); in mv_gpio_exec_intr_handlers()
515 mv_gpio_intr_handler(dev, pin); in mv_gpio_exec_intr_handlers()
523 mv_gpio_intr_handler(device_t dev, int pin) in mv_gpio_intr_handler() argument
534 isrc.isrc_event = sc->gpio_events[pin]; in mv_gpio_intr_handler()
544 mv_gpio_configure(device_t dev, uint32_t pin, uint32_t flags, uint32_t mask) in mv_gpio_configure() argument
551 if (pin >= sc->pin_num) in mv_gpio_configure()
562 error = mv_gpio_debounce_prepare(dev, pin); in mv_gpio_configure()
570 mv_gpio_out_en(dev, pin, 0); in mv_gpio_configure()
573 mv_gpio_value_set(dev, pin, 0); in mv_gpio_configure()
575 mv_gpio_value_set(dev, pin, 1); in mv_gpio_configure()
576 mv_gpio_out_en(dev, pin, 1); in mv_gpio_configure()
580 mv_gpio_blink(dev, pin, flags & MV_GPIO_OUT_BLINK); in mv_gpio_configure()
582 mv_gpio_polarity(dev, pin, flags & MV_GPIO_IN_POL_LOW, 0); in mv_gpio_configure()
584 error = mv_gpio_debounce_setup(dev, pin); in mv_gpio_configure()
591 sc->gpio_setup[pin].gp_flags &= ~(mask); in mv_gpio_configure()
592 sc->gpio_setup[pin].gp_flags |= (flags & mask); in mv_gpio_configure()
600 mv_gpio_double_edge_init(device_t dev, int pin) in mv_gpio_double_edge_init() argument
608 raw_read = (mv_gpio_value_get(dev, pin, 1) ? 1 : 0); in mv_gpio_double_edge_init()
611 mv_gpio_polarity(dev, pin, 1, 0); in mv_gpio_double_edge_init()
613 mv_gpio_polarity(dev, pin, 0, 0); in mv_gpio_double_edge_init()
617 mv_gpio_debounce_setup(device_t dev, int pin) in mv_gpio_debounce_setup() argument
626 c = sc->debounce_callouts[pin]; in mv_gpio_debounce_setup()
639 mv_gpio_debounce_prepare(device_t dev, int pin) in mv_gpio_debounce_prepare() argument
646 c = sc->debounce_callouts[pin]; in mv_gpio_debounce_prepare()
650 sc->debounce_callouts[pin] = c; in mv_gpio_debounce_prepare()
660 mv_gpio_debounce_init(device_t dev, int pin) in mv_gpio_debounce_init() argument
670 cnt = &sc->debounce_counters[pin]; in mv_gpio_debounce_init()
671 raw_read = (mv_gpio_value_get(dev, pin, 1) ? 1 : 0); in mv_gpio_debounce_init()
673 mv_gpio_polarity(dev, pin, 1, 0); in mv_gpio_debounce_init()
676 mv_gpio_polarity(dev, pin, 0, 0); in mv_gpio_debounce_init()
680 mv_gpio_debounced_state_set(dev, pin, raw_read); in mv_gpio_debounce_init()
686 mv_gpio_debounce_start(device_t dev, int pin) in mv_gpio_debounce_start() argument
689 struct mv_gpio_pindev s = {dev, pin}; in mv_gpio_debounce_start()
696 c = sc->debounce_callouts[pin]; in mv_gpio_debounce_start()
713 sd->pin = pin; in mv_gpio_debounce_start()
723 int pin; in mv_gpio_debounce() local
731 pin = s->pin; in mv_gpio_debounce()
736 raw_read = (mv_gpio_value_get(dev, pin, 1) ? 1 : 0); in mv_gpio_debounce()
737 last_state = (mv_gpio_debounced_state_get(dev, pin) ? 1 : 0); in mv_gpio_debounce()
738 debounce_counter = &sc->debounce_counters[pin]; in mv_gpio_debounce()
748 callout_reset(sc->debounce_callouts[pin], in mv_gpio_debounce()
753 callout_reset(sc->debounce_callouts[pin], in mv_gpio_debounce()
756 mv_gpio_debounced_state_set(dev, pin, raw_read); in mv_gpio_debounce()
765 if (((sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_POL_LOW) && in mv_gpio_debounce()
767 (((sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_POL_LOW) == 0) && in mv_gpio_debounce()
769 (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_IRQ_DOUBLE_EDGE)) in mv_gpio_debounce()
770 mv_gpio_intr_handler(dev, pin); in mv_gpio_debounce()
773 mv_gpio_polarity(dev, pin, 0, 1); in mv_gpio_debounce()
776 callout_deactivate(sc->debounce_callouts[pin]); in mv_gpio_debounce()
784 mv_gpio_debounced_state_set(device_t dev, int pin, uint8_t new_state) in mv_gpio_debounced_state_set() argument
792 if (pin >= GPIO_PINS_PER_REG) { in mv_gpio_debounced_state_set()
794 pin -= GPIO_PINS_PER_REG; in mv_gpio_debounced_state_set()
799 *old_state |= (1 << pin); in mv_gpio_debounced_state_set()
801 *old_state &= ~(1 << pin); in mv_gpio_debounced_state_set()
805 mv_gpio_debounced_state_get(device_t dev, int pin) in mv_gpio_debounced_state_get() argument
813 if (pin >= GPIO_PINS_PER_REG) { in mv_gpio_debounced_state_get()
815 pin -= GPIO_PINS_PER_REG; in mv_gpio_debounced_state_get()
819 return (*state & (1 << pin)); in mv_gpio_debounced_state_get()
823 mv_gpio_out(device_t dev, uint32_t pin, uint8_t val, uint8_t enable) in mv_gpio_out() argument
830 mv_gpio_value_set(dev, pin, val); in mv_gpio_out()
831 mv_gpio_out_en(dev, pin, enable); in mv_gpio_out()
837 mv_gpio_in(device_t dev, uint32_t pin) in mv_gpio_in() argument
845 if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_DEBOUNCE) { in mv_gpio_in()
846 if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_POL_LOW) in mv_gpio_in()
847 state = (mv_gpio_debounced_state_get(dev, pin) ? 0 : 1); in mv_gpio_in()
849 state = (mv_gpio_debounced_state_get(dev, pin) ? 1 : 0); in mv_gpio_in()
850 } else if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_IRQ_DOUBLE_EDGE) { in mv_gpio_in()
851 if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_POL_LOW) in mv_gpio_in()
852 state = (mv_gpio_value_get(dev, pin, 1) ? 0 : 1); in mv_gpio_in()
854 state = (mv_gpio_value_get(dev, pin, 1) ? 1 : 0); in mv_gpio_in()
856 state = (mv_gpio_value_get(dev, pin, 0) ? 1 : 0); in mv_gpio_in()
880 mv_gpio_reg_set(device_t dev, uint32_t reg, uint32_t pin) in mv_gpio_reg_set() argument
885 reg_val |= GPIO(pin); in mv_gpio_reg_set()
890 mv_gpio_reg_clear(device_t dev, uint32_t reg, uint32_t pin) in mv_gpio_reg_clear() argument
895 reg_val &= ~(GPIO(pin)); in mv_gpio_reg_clear()
900 mv_gpio_out_en(device_t dev, uint32_t pin, uint8_t enable) in mv_gpio_out_en() argument
906 if (pin >= sc->pin_num) in mv_gpio_out_en()
912 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_out_en()
914 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_out_en()
918 mv_gpio_blink(device_t dev, uint32_t pin, uint8_t enable) in mv_gpio_blink() argument
924 if (pin >= sc->pin_num) in mv_gpio_blink()
930 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_blink()
932 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_blink()
936 mv_gpio_polarity(device_t dev, uint32_t pin, uint8_t enable, uint8_t toggle) in mv_gpio_polarity() argument
942 if (pin >= sc->pin_num) in mv_gpio_polarity()
948 reg_val = mv_gpio_reg_read(dev, reg) & GPIO(pin); in mv_gpio_polarity()
950 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_polarity()
952 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_polarity()
954 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_polarity()
956 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_polarity()
960 mv_gpio_level(device_t dev, uint32_t pin, uint8_t enable) in mv_gpio_level() argument
966 if (pin >= sc->pin_num) in mv_gpio_level()
972 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_level()
974 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_level()
978 mv_gpio_edge(device_t dev, uint32_t pin, uint8_t enable) in mv_gpio_edge() argument
984 if (pin >= sc->pin_num) in mv_gpio_edge()
990 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_edge()
992 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_edge()
998 uint32_t reg, pin; in mv_gpio_int_ack() local
1001 pin = s->pin; in mv_gpio_int_ack()
1003 if (pin >= sc->pin_num) in mv_gpio_int_ack()
1008 mv_gpio_reg_clear(s->dev, reg, pin); in mv_gpio_int_ack()
1012 mv_gpio_value_get(device_t dev, uint32_t pin, uint8_t exclude_polar) in mv_gpio_value_get() argument
1018 if (pin >= sc->pin_num) in mv_gpio_value_get()
1028 return ((reg_val & GPIO(pin)) ^ (polar_reg_val & GPIO(pin))); in mv_gpio_value_get()
1030 return (reg_val & GPIO(pin)); in mv_gpio_value_get()
1034 mv_gpio_value_set(device_t dev, uint32_t pin, uint8_t val) in mv_gpio_value_set() argument
1042 if (pin >= sc->pin_num) in mv_gpio_value_set()
1048 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_value_set()
1050 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_value_set()
1071 mv_gpio_pin_getcaps(device_t dev, uint32_t pin, uint32_t *caps) in mv_gpio_pin_getcaps() argument
1077 if (pin >= sc->pin_num) in mv_gpio_pin_getcaps()
1081 *caps = sc->gpio_setup[pin].gp_caps; in mv_gpio_pin_getcaps()
1088 mv_gpio_pin_getflags(device_t dev, uint32_t pin, uint32_t *flags) in mv_gpio_pin_getflags() argument
1094 if (pin >= sc->pin_num) in mv_gpio_pin_getflags()
1098 *flags = sc->gpio_setup[pin].gp_flags; in mv_gpio_pin_getflags()
1105 mv_gpio_pin_getname(device_t dev, uint32_t pin, char *name) in mv_gpio_pin_getname() argument
1111 if (pin >= sc->pin_num) in mv_gpio_pin_getname()
1115 memcpy(name, sc->gpio_setup[pin].gp_name, GPIOMAXNAME); in mv_gpio_pin_getname()
1122 mv_gpio_pin_setflags(device_t dev, uint32_t pin, uint32_t flags) in mv_gpio_pin_setflags() argument
1126 if (pin >= sc->pin_num) in mv_gpio_pin_setflags()
1130 if ((flags & sc->gpio_setup[pin].gp_caps) != flags) in mv_gpio_pin_setflags()
1133 ret = mv_gpio_configure(dev, pin, flags, ~0); in mv_gpio_pin_setflags()
1139 mv_gpio_pin_set(device_t dev, uint32_t pin, unsigned int value) in mv_gpio_pin_set() argument
1142 if (pin >= sc->pin_num) in mv_gpio_pin_set()
1146 mv_gpio_value_set(dev, pin, value); in mv_gpio_pin_set()
1153 mv_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *value) in mv_gpio_pin_get() argument
1159 if (pin >= sc->pin_num) in mv_gpio_pin_get()
1163 *value = mv_gpio_in(dev, pin); in mv_gpio_pin_get()
1170 mv_gpio_pin_toggle(device_t dev, uint32_t pin) in mv_gpio_pin_toggle() argument
1174 if (pin >= sc->pin_num) in mv_gpio_pin_toggle()
1178 value = mv_gpio_in(dev, pin); in mv_gpio_pin_toggle()
1180 mv_gpio_value_set(dev, pin, value); in mv_gpio_pin_toggle()
1196 pcell_t *gpios, uint32_t *pin, uint32_t *flags) in mv_gpio_map_gpios() argument
1203 *pin = gpios[0]; in mv_gpio_map_gpios()
1205 mv_gpio_configure(bus, *pin, *flags, ~0); in mv_gpio_map_gpios()