mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-29 16:10:24 +09:00
gpio: rcar_gen3: Fix GPIO read support
This patch fixes to read the GPIO status after confirming the INOUT setting. Signed-off-by: Kouei Abe <kouei.abe.cp@renesas.com> Signed-off-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> Cc: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org> Cc: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
a375ff8e14
commit
1815c29738
@ -66,17 +66,18 @@ static void gpio_write_raw_reg(void *mapped_reg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int gpio_read_bit(struct pinmux_data_reg *dr,
|
static int gpio_read_bit(struct pinmux_data_reg *dr,
|
||||||
|
unsigned long offset,
|
||||||
unsigned long in_pos)
|
unsigned long in_pos)
|
||||||
{
|
{
|
||||||
unsigned long pos;
|
unsigned long pos;
|
||||||
|
|
||||||
pos = dr->reg_width - (in_pos + 1);
|
pos = dr->reg_width - (in_pos + 1);
|
||||||
|
|
||||||
debug("read_bit: addr = %lx, pos = %ld, "
|
debug("read_bit: addr = %lx, pos = %ld, r_width = %ld\n",
|
||||||
"r_width = %ld\n", dr->reg, pos, dr->reg_width);
|
dr->reg + offset, pos, dr->reg_width);
|
||||||
|
|
||||||
return
|
return (gpio_read_raw_reg(dr->mapped_reg + offset,
|
||||||
(gpio_read_raw_reg(dr->mapped_reg + 0x4, dr->reg_width) >> pos) & 1;
|
dr->reg_width) >> pos) & 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gpio_write_bit(struct pinmux_data_reg *dr,
|
static void gpio_write_bit(struct pinmux_data_reg *dr,
|
||||||
@ -559,12 +560,16 @@ static int sh_gpio_direction_output(unsigned offset, int value)
|
|||||||
static int sh_gpio_get_value(struct pinmux_info *gpioc, unsigned gpio)
|
static int sh_gpio_get_value(struct pinmux_info *gpioc, unsigned gpio)
|
||||||
{
|
{
|
||||||
struct pinmux_data_reg *dr = NULL;
|
struct pinmux_data_reg *dr = NULL;
|
||||||
int bit = 0;
|
int bit = 0, offset = 0;
|
||||||
|
|
||||||
if (!gpioc || get_data_reg(gpioc, gpio, &dr, &bit) != 0)
|
if (!gpioc || get_data_reg(gpioc, gpio, &dr, &bit) != 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
#if defined(CONFIG_RCAR_GEN3)
|
||||||
|
if ((gpioc->gpios[gpio].flags & PINMUX_FLAG_TYPE) == PINMUX_TYPE_INPUT)
|
||||||
|
offset += 4;
|
||||||
|
#endif
|
||||||
|
|
||||||
return gpio_read_bit(dr, bit);
|
return gpio_read_bit(dr, offset, bit);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sh_gpio_get(unsigned offset)
|
static int sh_gpio_get(unsigned offset)
|
||||||
|
Loading…
Reference in New Issue
Block a user