davinci: tnetv107x: fix register indexing for GPIOs numbers > 31
authorHirosh Dabui <hirosh.dabui@snom.com>
Tue, 25 Jan 2011 22:05:26 +0000 (23:05 +0100)
committerKevin Hilman <khilman@ti.com>
Mon, 28 Feb 2011 22:53:19 +0000 (14:53 -0800)
commitc284d9fa48e1ad17bda142cfbb683c29a3b005a6
treecb5c859edc302e99a2fef7aa7b634eb9c8039d4d
parentb3d1ffb2a5294c74fcf1579499115e1e33b8f487
davinci: tnetv107x: fix register indexing for GPIOs numbers > 31

This patch fix a bug in the register indexing for GPIOs numbers >  31
to get the relevant hardware registers of tnetv107x to control the GPIOs.

In the structure tnetv107x_gpio_regs:

struct tnetv107x_gpio_regs {
            u32     idver;
            u32     data_in[3];
            u32     data_out[3];
            u32     direction[3];
            u32     enable[3];
};

The GPIO hardware register addresses of tnetv107x are stored.
The chip implements 3 registers of each entity to serve 96 GPIOs,
each register provides a subset of 32 GPIOs.
The driver provides these macros: gpio_reg_set_bit, gpio_reg_get_bit
and gpio_reg_clear_bit.

The bug implied the use of macros to access the relevant hardware
register e.g. the driver code used the macro like this:
'gpio_reg_clear_bit(&reg->data_out, gpio)'

But it has to be used like this:
'gpio_reg_clear_bit(reg->data_out, gpio)'.

The different results are shown here:
- &reg->data_out + 1 (it will add the full array size of data_out i.e. 12 bytes)
- reg->data_out + 1 (it will increment only the size of data_out i.e. only 4 bytes)

Acked-by: Cyril Chemparathy <cyril@ti.com>
Signed-off-by: Hirosh Dabui <hirosh.dabui@snom.com>
Signed-off-by: Kevin Hilman <khilman@ti.com>
arch/arm/mach-davinci/gpio-tnetv107x.c