int __mcfgpio_direction_output(unsigned gpio, int value) { unsigned long flags; MCFGPIO_PORTTYPE data; local_irq_save(flags); data = mcfgpio_read(__mcfgpio_pddr(gpio)); data |= mcfgpio_bit(gpio); mcfgpio_write(data, __mcfgpio_pddr(gpio)); /* now set the data to output */ if (gpio < MCFGPIO_SCR_START) { data = mcfgpio_read(__mcfgpio_podr(gpio)); if (value) data |= mcfgpio_bit(gpio); else data &= ~mcfgpio_bit(gpio); mcfgpio_write(data, __mcfgpio_podr(gpio)); } else { if (value) mcfgpio_write(mcfgpio_bit(gpio), MCFGPIO_SETR_PORT(gpio)); else mcfgpio_write(~mcfgpio_bit(gpio), MCFGPIO_CLRR_PORT(gpio)); } local_irq_restore(flags); return 0; }
void mcf_gpio_set_value_fast(struct gpio_chip *chip, unsigned offset, int value) { struct mcf_gpio_chip *mcf_chip = MCF_CHIP(chip); if (value) mcfgpio_write(mcfgpio_bit(chip->base + offset), mcf_chip->setr); else mcfgpio_write(~mcfgpio_bit(chip->base + offset), mcf_chip->clrr); }
int __mcfgpio_direction_input(unsigned gpio) { unsigned long flags; MCFGPIO_PORTTYPE dir; local_irq_save(flags); dir = mcfgpio_read(__mcfgpio_pddr(gpio)); dir &= ~mcfgpio_bit(gpio); mcfgpio_write(dir, __mcfgpio_pddr(gpio)); local_irq_restore(flags); return 0; }
void __mcfgpio_set_value(unsigned gpio, int value) { if (gpio < MCFGPIO_SCR_START) { unsigned long flags; MCFGPIO_PORTTYPE data; local_irq_save(flags); data = mcfgpio_read(__mcfgpio_podr(gpio)); if (value) data |= mcfgpio_bit(gpio); else data &= ~mcfgpio_bit(gpio); mcfgpio_write(data, __mcfgpio_podr(gpio)); local_irq_restore(flags); } else { if (value) mcfgpio_write(mcfgpio_bit(gpio), MCFGPIO_SETR_PORT(gpio)); else mcfgpio_write(~mcfgpio_bit(gpio), MCFGPIO_CLRR_PORT(gpio)); } }
int mcf_gpio_direction_input(struct gpio_chip *chip, unsigned offset) { unsigned long flags; MCFGPIO_PORTTYPE dir; struct mcf_gpio_chip *mcf_chip = MCF_CHIP(chip); local_irq_save(flags); dir = mcfgpio_read(mcf_chip->pddr); dir &= ~mcfgpio_bit(chip->base + offset); mcfgpio_write(dir, mcf_chip->pddr); local_irq_restore(flags); return 0; }
int mcf_gpio_direction_output(struct gpio_chip *chip, unsigned offset, int value) { unsigned long flags; MCFGPIO_PORTTYPE data; struct mcf_gpio_chip *mcf_chip = MCF_CHIP(chip); local_irq_save(flags); /* write the value to the output latch */ data = mcfgpio_read(mcf_chip->podr); if (value) data |= mcfgpio_bit(chip->base + offset); else data &= ~mcfgpio_bit(chip->base + offset); mcfgpio_write(data, mcf_chip->podr); /* now set the direction to output */ data = mcfgpio_read(mcf_chip->pddr); data |= mcfgpio_bit(chip->base + offset); mcfgpio_write(data, mcf_chip->pddr); local_irq_restore(flags); return 0; }
void mcf_gpio_set_value(struct gpio_chip *chip, unsigned offset, int value) { struct mcf_gpio_chip *mcf_chip = MCF_CHIP(chip); unsigned long flags; MCFGPIO_PORTTYPE data; local_irq_save(flags); data = mcfgpio_read(mcf_chip->podr); if (value) data |= mcfgpio_bit(chip->base + offset); else data &= ~mcfgpio_bit(chip->base + offset); mcfgpio_write(data, mcf_chip->podr); local_irq_restore(flags); }