summaryrefslogtreecommitdiffstats
path: root/exynos4412_gpios_data.c
diff options
context:
space:
mode:
Diffstat (limited to 'exynos4412_gpios_data.c')
-rw-r--r--exynos4412_gpios_data.c41
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, &register_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;
}