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()
406 void (*hand)(void *), void *arg, int pin, int flags, void **cookiep) in mv_gpio_setup_intrhandler() argument
415 if (pin < 0 || pin >= sc->pin_num) in mv_gpio_setup_intrhandler()
417 event = sc->gpio_events[pin]; in mv_gpio_setup_intrhandler()
420 if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_DEBOUNCE) { in mv_gpio_setup_intrhandler()
421 error = mv_gpio_debounce_init(dev, pin); in mv_gpio_setup_intrhandler()
426 } else if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_IRQ_DOUBLE_EDGE) in mv_gpio_setup_intrhandler()
427 mv_gpio_double_edge_init(dev, pin); in mv_gpio_setup_intrhandler()
429 error = intr_event_create(&event, (void *)s, 0, pin, in mv_gpio_setup_intrhandler()
434 "gpio%d:", pin); in mv_gpio_setup_intrhandler()
437 sc->gpio_events[pin] = event; in mv_gpio_setup_intrhandler()
451 if (s->pin >= sc->pin_num) in mv_gpio_intr_mask()
456 if (sc->gpio_setup[s->pin].gp_flags & (MV_GPIO_IN_IRQ_EDGE | in mv_gpio_intr_mask()
458 mv_gpio_edge(s->dev, s->pin, 0); in mv_gpio_intr_mask()
460 mv_gpio_level(s->dev, s->pin, 0); in mv_gpio_intr_mask()
481 if (s->pin >= sc->pin_num) in mv_gpio_intr_unmask()
486 if (sc->gpio_setup[s->pin].gp_flags & (MV_GPIO_IN_IRQ_EDGE | in mv_gpio_intr_unmask()
488 mv_gpio_edge(s->dev, s->pin, 1); in mv_gpio_intr_unmask()
490 mv_gpio_level(s->dev, s->pin, 1); in mv_gpio_intr_unmask()
500 int i, pin; in mv_gpio_exec_intr_handlers() local
509 pin = (high ? (i + GPIO_PINS_PER_REG) : i); in mv_gpio_exec_intr_handlers()
510 if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_DEBOUNCE) in mv_gpio_exec_intr_handlers()
511 mv_gpio_debounce_start(dev, pin); in mv_gpio_exec_intr_handlers()
512 else if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_IRQ_DOUBLE_EDGE) { in mv_gpio_exec_intr_handlers()
513 mv_gpio_polarity(dev, pin, 0, 1); in mv_gpio_exec_intr_handlers()
514 mv_gpio_intr_handler(dev, pin); in mv_gpio_exec_intr_handlers()
516 mv_gpio_intr_handler(dev, pin); in mv_gpio_exec_intr_handlers()
524 mv_gpio_intr_handler(device_t dev, int pin) in mv_gpio_intr_handler() argument
535 isrc.isrc_event = sc->gpio_events[pin]; in mv_gpio_intr_handler()
545 mv_gpio_configure(device_t dev, uint32_t pin, uint32_t flags, uint32_t mask) in mv_gpio_configure() argument
552 if (pin >= sc->pin_num) in mv_gpio_configure()
563 error = mv_gpio_debounce_prepare(dev, pin); in mv_gpio_configure()
571 mv_gpio_out_en(dev, pin, 0); in mv_gpio_configure()
574 mv_gpio_value_set(dev, pin, 0); in mv_gpio_configure()
576 mv_gpio_value_set(dev, pin, 1); in mv_gpio_configure()
577 mv_gpio_out_en(dev, pin, 1); in mv_gpio_configure()
581 mv_gpio_blink(dev, pin, flags & MV_GPIO_OUT_BLINK); in mv_gpio_configure()
583 mv_gpio_polarity(dev, pin, flags & MV_GPIO_IN_POL_LOW, 0); in mv_gpio_configure()
585 error = mv_gpio_debounce_setup(dev, pin); in mv_gpio_configure()
592 sc->gpio_setup[pin].gp_flags &= ~(mask); in mv_gpio_configure()
593 sc->gpio_setup[pin].gp_flags |= (flags & mask); in mv_gpio_configure()
601 mv_gpio_double_edge_init(device_t dev, int pin) in mv_gpio_double_edge_init() argument
609 raw_read = (mv_gpio_value_get(dev, pin, 1) ? 1 : 0); in mv_gpio_double_edge_init()
612 mv_gpio_polarity(dev, pin, 1, 0); in mv_gpio_double_edge_init()
614 mv_gpio_polarity(dev, pin, 0, 0); in mv_gpio_double_edge_init()
618 mv_gpio_debounce_setup(device_t dev, int pin) in mv_gpio_debounce_setup() argument
627 c = sc->debounce_callouts[pin]; in mv_gpio_debounce_setup()
640 mv_gpio_debounce_prepare(device_t dev, int pin) in mv_gpio_debounce_prepare() argument
647 c = sc->debounce_callouts[pin]; in mv_gpio_debounce_prepare()
651 sc->debounce_callouts[pin] = c; in mv_gpio_debounce_prepare()
661 mv_gpio_debounce_init(device_t dev, int pin) in mv_gpio_debounce_init() argument
671 cnt = &sc->debounce_counters[pin]; in mv_gpio_debounce_init()
672 raw_read = (mv_gpio_value_get(dev, pin, 1) ? 1 : 0); in mv_gpio_debounce_init()
674 mv_gpio_polarity(dev, pin, 1, 0); in mv_gpio_debounce_init()
677 mv_gpio_polarity(dev, pin, 0, 0); in mv_gpio_debounce_init()
681 mv_gpio_debounced_state_set(dev, pin, raw_read); in mv_gpio_debounce_init()
687 mv_gpio_debounce_start(device_t dev, int pin) in mv_gpio_debounce_start() argument
690 struct mv_gpio_pindev s = {dev, pin}; in mv_gpio_debounce_start()
697 c = sc->debounce_callouts[pin]; in mv_gpio_debounce_start()
714 sd->pin = pin; in mv_gpio_debounce_start()
724 int pin; in mv_gpio_debounce() local
732 pin = s->pin; in mv_gpio_debounce()
737 raw_read = (mv_gpio_value_get(dev, pin, 1) ? 1 : 0); in mv_gpio_debounce()
738 last_state = (mv_gpio_debounced_state_get(dev, pin) ? 1 : 0); in mv_gpio_debounce()
739 debounce_counter = &sc->debounce_counters[pin]; in mv_gpio_debounce()
749 callout_reset(sc->debounce_callouts[pin], in mv_gpio_debounce()
754 callout_reset(sc->debounce_callouts[pin], in mv_gpio_debounce()
757 mv_gpio_debounced_state_set(dev, pin, raw_read); in mv_gpio_debounce()
766 if (((sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_POL_LOW) && in mv_gpio_debounce()
768 (((sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_POL_LOW) == 0) && in mv_gpio_debounce()
770 (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_IRQ_DOUBLE_EDGE)) in mv_gpio_debounce()
771 mv_gpio_intr_handler(dev, pin); in mv_gpio_debounce()
774 mv_gpio_polarity(dev, pin, 0, 1); in mv_gpio_debounce()
777 callout_deactivate(sc->debounce_callouts[pin]); in mv_gpio_debounce()
785 mv_gpio_debounced_state_set(device_t dev, int pin, uint8_t new_state) in mv_gpio_debounced_state_set() argument
793 if (pin >= GPIO_PINS_PER_REG) { in mv_gpio_debounced_state_set()
795 pin -= GPIO_PINS_PER_REG; in mv_gpio_debounced_state_set()
800 *old_state |= (1 << pin); in mv_gpio_debounced_state_set()
802 *old_state &= ~(1 << pin); in mv_gpio_debounced_state_set()
806 mv_gpio_debounced_state_get(device_t dev, int pin) in mv_gpio_debounced_state_get() argument
814 if (pin >= GPIO_PINS_PER_REG) { in mv_gpio_debounced_state_get()
816 pin -= GPIO_PINS_PER_REG; in mv_gpio_debounced_state_get()
820 return (*state & (1 << pin)); in mv_gpio_debounced_state_get()
824 mv_gpio_out(device_t dev, uint32_t pin, uint8_t val, uint8_t enable) in mv_gpio_out() argument
831 mv_gpio_value_set(dev, pin, val); in mv_gpio_out()
832 mv_gpio_out_en(dev, pin, enable); in mv_gpio_out()
838 mv_gpio_in(device_t dev, uint32_t pin) in mv_gpio_in() argument
846 if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_DEBOUNCE) { in mv_gpio_in()
847 if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_POL_LOW) in mv_gpio_in()
848 state = (mv_gpio_debounced_state_get(dev, pin) ? 0 : 1); in mv_gpio_in()
850 state = (mv_gpio_debounced_state_get(dev, pin) ? 1 : 0); in mv_gpio_in()
851 } else if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_IRQ_DOUBLE_EDGE) { in mv_gpio_in()
852 if (sc->gpio_setup[pin].gp_flags & MV_GPIO_IN_POL_LOW) in mv_gpio_in()
853 state = (mv_gpio_value_get(dev, pin, 1) ? 0 : 1); in mv_gpio_in()
855 state = (mv_gpio_value_get(dev, pin, 1) ? 1 : 0); in mv_gpio_in()
857 state = (mv_gpio_value_get(dev, pin, 0) ? 1 : 0); in mv_gpio_in()
881 mv_gpio_reg_set(device_t dev, uint32_t reg, uint32_t pin) in mv_gpio_reg_set() argument
886 reg_val |= GPIO(pin); in mv_gpio_reg_set()
891 mv_gpio_reg_clear(device_t dev, uint32_t reg, uint32_t pin) in mv_gpio_reg_clear() argument
896 reg_val &= ~(GPIO(pin)); in mv_gpio_reg_clear()
901 mv_gpio_out_en(device_t dev, uint32_t pin, uint8_t enable) in mv_gpio_out_en() argument
907 if (pin >= sc->pin_num) in mv_gpio_out_en()
913 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_out_en()
915 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_out_en()
919 mv_gpio_blink(device_t dev, uint32_t pin, uint8_t enable) in mv_gpio_blink() argument
925 if (pin >= sc->pin_num) in mv_gpio_blink()
931 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_blink()
933 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_blink()
937 mv_gpio_polarity(device_t dev, uint32_t pin, uint8_t enable, uint8_t toggle) in mv_gpio_polarity() argument
943 if (pin >= sc->pin_num) in mv_gpio_polarity()
949 reg_val = mv_gpio_reg_read(dev, reg) & GPIO(pin); in mv_gpio_polarity()
951 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_polarity()
953 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_polarity()
955 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_polarity()
957 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_polarity()
961 mv_gpio_level(device_t dev, uint32_t pin, uint8_t enable) in mv_gpio_level() argument
967 if (pin >= sc->pin_num) in mv_gpio_level()
973 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_level()
975 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_level()
979 mv_gpio_edge(device_t dev, uint32_t pin, uint8_t enable) in mv_gpio_edge() argument
985 if (pin >= sc->pin_num) in mv_gpio_edge()
991 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_edge()
993 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_edge()
999 uint32_t reg, pin; in mv_gpio_int_ack() local
1002 pin = s->pin; in mv_gpio_int_ack()
1004 if (pin >= sc->pin_num) in mv_gpio_int_ack()
1009 mv_gpio_reg_clear(s->dev, reg, pin); in mv_gpio_int_ack()
1013 mv_gpio_value_get(device_t dev, uint32_t pin, uint8_t exclude_polar) in mv_gpio_value_get() argument
1019 if (pin >= sc->pin_num) in mv_gpio_value_get()
1029 return ((reg_val & GPIO(pin)) ^ (polar_reg_val & GPIO(pin))); in mv_gpio_value_get()
1031 return (reg_val & GPIO(pin)); in mv_gpio_value_get()
1035 mv_gpio_value_set(device_t dev, uint32_t pin, uint8_t val) in mv_gpio_value_set() argument
1043 if (pin >= sc->pin_num) in mv_gpio_value_set()
1049 mv_gpio_reg_set(dev, reg, pin); in mv_gpio_value_set()
1051 mv_gpio_reg_clear(dev, reg, pin); in mv_gpio_value_set()
1072 mv_gpio_pin_getcaps(device_t dev, uint32_t pin, uint32_t *caps) in mv_gpio_pin_getcaps() argument
1078 if (pin >= sc->pin_num) in mv_gpio_pin_getcaps()
1082 *caps = sc->gpio_setup[pin].gp_caps; in mv_gpio_pin_getcaps()
1089 mv_gpio_pin_getflags(device_t dev, uint32_t pin, uint32_t *flags) in mv_gpio_pin_getflags() argument
1095 if (pin >= sc->pin_num) in mv_gpio_pin_getflags()
1099 *flags = sc->gpio_setup[pin].gp_flags; in mv_gpio_pin_getflags()
1106 mv_gpio_pin_getname(device_t dev, uint32_t pin, char *name) in mv_gpio_pin_getname() argument
1112 if (pin >= sc->pin_num) in mv_gpio_pin_getname()
1116 memcpy(name, sc->gpio_setup[pin].gp_name, GPIOMAXNAME); in mv_gpio_pin_getname()
1123 mv_gpio_pin_setflags(device_t dev, uint32_t pin, uint32_t flags) in mv_gpio_pin_setflags() argument
1127 if (pin >= sc->pin_num) in mv_gpio_pin_setflags()
1131 if ((flags & sc->gpio_setup[pin].gp_caps) != flags) in mv_gpio_pin_setflags()
1134 ret = mv_gpio_configure(dev, pin, flags, ~0); in mv_gpio_pin_setflags()
1140 mv_gpio_pin_set(device_t dev, uint32_t pin, unsigned int value) in mv_gpio_pin_set() argument
1143 if (pin >= sc->pin_num) in mv_gpio_pin_set()
1147 mv_gpio_value_set(dev, pin, value); in mv_gpio_pin_set()
1154 mv_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *value) in mv_gpio_pin_get() argument
1160 if (pin >= sc->pin_num) in mv_gpio_pin_get()
1164 *value = mv_gpio_in(dev, pin); in mv_gpio_pin_get()
1171 mv_gpio_pin_toggle(device_t dev, uint32_t pin) in mv_gpio_pin_toggle() argument
1175 if (pin >= sc->pin_num) in mv_gpio_pin_toggle()
1179 value = mv_gpio_in(dev, pin); in mv_gpio_pin_toggle()
1181 mv_gpio_value_set(dev, pin, value); in mv_gpio_pin_toggle()
1197 pcell_t *gpios, uint32_t *pin, uint32_t *flags) in mv_gpio_map_gpios() argument
1204 *pin = gpios[0]; in mv_gpio_map_gpios()
1206 mv_gpio_configure(bus, *pin, *flags, ~0); in mv_gpio_map_gpios()