diff options
Diffstat (limited to 'exynos4412_gpios_data.c')
| -rw-r--r-- | exynos4412_gpios_data.c | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/exynos4412_gpios_data.c b/exynos4412_gpios_data.c index ac2f77d..deed252 100644 --- a/exynos4412_gpios_data.c +++ b/exynos4412_gpios_data.c @@ -379,13 +379,14 @@ void print_gpio_banks_data(void) } int decode_gpio_data(int debug, char *bank, uint32_t gpio_offset, - char* gpio_register_name, uint32_t *virt_addr) + char* gpio_register_name, + struct memory_mapping *memory_mapping) { struct gpio_bank_data *gpio_bank_data; struct gpio_register_data *gpio_register_data; - - uint32_t *addr; - uint32_t register_value; + unsigned int addr; + unsigned int register_value; + int rc; gpio_bank_data = get_gpio_bank_data(bank); if (gpio_bank_data == NULL) { @@ -399,12 +400,28 @@ int decode_gpio_data(int debug, char *bank, uint32_t gpio_offset, return -1; } - addr = virt_addr + gpio_bank_data->offset + gpio_register_data->offset; - register_value = *virt_addr; + addr = get_gpio_register_offset(debug, bank, gpio_register_name); + if (addr == -1) { + printf("%s: get_gpio_register_offset failed with error %d\n", + __func__, addr); + return -1; + } + + if (debug) + printf("%s: register address: 0x%llx\n", + __func__, (long long int)addr); + + rc = read_word(debug, memory_mapping, addr, ®ister_value); + if (rc == -1) { + rc = errno; + printf("%s: read_word failed with error %d: %s\n", + __func__, rc, strerror(rc)); + return -1; + } if (debug) - printf("%s: %s: offset 0x%x value: 0x%x\n", __func__, bank, - addr - virt_addr, register_value); + printf("%s: %s @ 0x%x = 0x%x\n", __func__, bank, + addr, register_value); return gpio_register_data->get_value(register_value, gpio_offset); } @@ -427,7 +444,6 @@ off_t get_gpio_register_offset(int debug, char *gpio_bank_name, { struct gpio_bank_data *gpio_bank_data; struct gpio_register_data *gpio_register_data; - off_t gpio_hardware_block_offset = 0; off_t offset = 0; gpio_bank_data = get_gpio_bank_data(gpio_bank_name); @@ -448,10 +464,9 @@ off_t get_gpio_register_offset(int debug, char *gpio_bank_name, return -1; } - if (gpio_bank_data->base == 0x11400000) - gpio_hardware_block_offset = 0x400000; - - offset = gpio_hardware_block_offset + gpio_bank_data->offset + gpio_register_data->offset; + offset = gpio_bank_data->base + \ + gpio_bank_data->offset + \ + gpio_register_data->offset; return offset; } |
