int gpio_setup() { uint8_t v[9]; if (!(GET_REG(POWERID) & 1)) { gpio_pin_use_as_input(0x107); gpio_pin_use_as_input(0x106); gpio_pin_use_as_input(0x105); gpio_pin_use_as_input(0x104); gpio_pin_use_as_input(0x103); gpio_pin_use_as_input(0x102); gpio_pin_use_as_input(0x101); gpio_pin_use_as_input(0x100); udelay(50); v[0] = CHIPID_GET_GPIO(chipid_get_gpio()); v[1] = gpio_pin_state(0x104); v[2] = gpio_pin_state(0x105); v[3] = gpio_pin_state(0x106); v[4] = gpio_pin_state(0x107); v[5] = gpio_pin_state(0x100); v[6] = gpio_pin_state(0x101); v[7] = gpio_pin_state(0x102); v[8] = gpio_pin_state(0x103); gpio_pin_reset(0x107); gpio_pin_reset(0x106); gpio_pin_reset(0x105); gpio_pin_reset(0x104); gpio_pin_reset(0x103); gpio_pin_reset(0x102); gpio_pin_reset(0x101); gpio_pin_reset(0x100); uint32_t new_status = ((v[0] << 3 | v[1] << 2 | v[2] << 1 | v[3]) << 16) | ((v[4] << 3 | v[5] << 2 | v[6] << 1 | v[7]) << 8) | 1; SET_REG(POWERID, (GET_REG(POWERID) & 0xFF000000) | (new_status & 0xFFFFFF)); } return 0; }
int gpio_setup() { #if !defined(CONFIG_IPHONE_4) && !defined(CONFIG_IPAD) int i; GPIORegs = (GPIORegisters*) GPIO; for(i = 0; i < GPIO_NUMINTGROUPS; i++) { // writes to all the interrupt status register to acknowledge and discard any pending SET_REG(GPIOIC + GPIO_INTSTAT + (i * 0x4), GPIO_INTSTAT_RESET); // disable all interrupts SET_REG(GPIOIC + GPIO_INTEN + (i * 0x4), GPIO_INTEN_RESET); } memset(InterruptGroups, 0, sizeof(InterruptGroups)); interrupt_install(0x21, gpio_handle_interrupt, 0); interrupt_install(0x20, gpio_handle_interrupt, 1); interrupt_install(0x1f, gpio_handle_interrupt, 2); interrupt_install(0x03, gpio_handle_interrupt, 3); interrupt_install(0x02, gpio_handle_interrupt, 4); interrupt_install(0x01, gpio_handle_interrupt, 5); interrupt_install(0x00, gpio_handle_interrupt, 6); interrupt_enable(0x21); interrupt_enable(0x20); interrupt_enable(0x1f); interrupt_enable(0x03); interrupt_enable(0x02); interrupt_enable(0x01); interrupt_enable(0x00); clock_gate_switch(GPIO_CLOCKGATE, ON); return 0; #else uint8_t v[8]; if (!(GET_REG(GPIO) & 1)) { gpio_set(0x502, 0); gpio_set(0x503, 0); gpio_set(0x504, 0); gpio_switch(0x502, 0xFFFFFFFF); gpio_switch(0x503, 0xFFFFFFFF); gpio_switch(0x504, 0xFFFFFFFF); gpio_set(0x202, 0); gpio_set(0x301, 0); gpio_set(0x304, 0); gpio_set(0x305, 0); gpio_switch(0x202, 0xFFFFFFFF); gpio_switch(0x301, 0xFFFFFFFF); gpio_switch(0x304, 0xFFFFFFFF); gpio_switch(0x305, 0xFFFFFFFF); udelay(100); v[0] = chipid_get_gpio(); v[1] = gpio_pin_state(0x504); v[2] = gpio_pin_state(0x503); v[3] = gpio_pin_state(0x502); v[4] = gpio_pin_state(0x305); v[5] = gpio_pin_state(0x304); v[6] = gpio_pin_state(0x301); v[7] = gpio_pin_state(0x202); gpio_set(0x502, 4); gpio_set(0x503, 4); gpio_set(0x504, 4); gpio_set(0x202, 4); gpio_set(0x301, 4); gpio_set(0x304, 4); gpio_set(0x305, 4); uint32_t new_status = ((v[0] << 3 | v[1] << 2 | v[2] << 1 | v[3]) << 16) | ((v[4] << 3 | v[5] << 2 | v[6] << 1 | v[7]) << 8) | 1; SET_REG(POWER + POWER_ID, (GET_BITS(GET_REG(POWER + POWER_ID), 24, 8)) | (new_status & 0xFFFFFF)); } return 0; #endif }