/* Value = 0 : Set pin as GPIO */ int pnx4008_gpio_set_pin_mux(unsigned short pin, int output) { int gpio = GPIO_BIT_MASK(pin); int ret = -EFAULT; gpio_lock(); if (GPIO_ISBID(pin)) { ret = gpio_set_bit(output ? PIO_MUX_SET : PIO_MUX_CLR, gpio_to_mux_map[gpio]); } else if (GPIO_ISOUT(pin)) { ret = gpio_set_bit(output ? PIO_MUX_SET : PIO_MUX_CLR, outp_to_mux_map[gpio]); } else if (GPIO_ISMUX(pin)) { ret = gpio_set_bit(output ? PIO_MUX_SET : PIO_MUX_CLR, gpio); } gpio_unlock(); return ret; }
/* Value = 0 : Set GPIO pin as input */ int pnx4008_gpio_set_pin_direction(unsigned short pin, int output) { int gpio = GPIO_BIT_MASK(pin); int ret = -EFAULT; gpio_lock(); if (GPIO_ISBID(pin) || GPIO_ISRAM(pin)) { ret = gpio_set_bit(output ? PIO_DRV_SET : PIO_DRV_CLR, gpio); } gpio_unlock(); return ret; }
/* Write Value to output */ int pnx4008_gpio_write_pin(unsigned short pin, int output) { int gpio = GPIO_BIT_MASK(pin); int ret = -EFAULT; gpio_lock(); if (GPIO_ISOUT(pin)) { printk( "writing '%x' to '%x'\n", gpio, output ? PIO_OUTP_SET : PIO_OUTP_CLR ); ret = gpio_set_bit(output ? PIO_OUTP_SET : PIO_OUTP_CLR, gpio); } else if (GPIO_ISRAM(pin)) { if (gpio_read_bit(PIO_DRV_STATE, gpio) > 0) ret = gpio_set_bit(output ? PIO_SDOUTP_SET : PIO_SDOUTP_CLR, gpio); } else if (GPIO_ISBID(pin)) { if (gpio_read_bit(PIO_DRV_STATE, gpio) > 0) ret = gpio_set_bit(output ? PIO_OUTP_SET : PIO_OUTP_CLR, gpio); } gpio_unlock(); return ret; }
void cycle11 (void) { if (do_cycle11 == 1) { // Set Halt set_halt_until_mbus_tx(); gpio_init(0xFFFF); // All Output gpio_write_data(0xF0F0); // 1111 0000 1111 0000 gpio_kill_bit(15); // 0111 0000 1111 0000 gpio_set_bit(1); // 0111 0000 1111 0010 gpio_set_2bits(11, 8); // 0111 1001 1111 0010 gpio_kill_bit(12); // 0110 1001 1111 0010 if (gpio_get_data() == 0xF2) {pass (0xC, gpio_get_data());} else {fail (0xC, gpio_get_data());} gpio_close(); } }