Commit e5ff4440 authored by Kevin Hilman's avatar Kevin Hilman

gpio/omap: cleanup show revision, remove cpu_is checks, display only once

Remove cpu_is_* checks from gpio_show_revision() by passing in the
revision address offset from platform data.  SoCs with no revision
register (15xx, 7xx, and all MPUIOs) use -1 (actually, USHRT_MAX) to
signify no register.

While here, all GPIO banks are assumed to be the same revision, so fix
show_revision() to only show the revision for the first bank it finds.
This removes duplicate GPIO revision prints during boot.

Thanks to Charulatha V <charu@ti.com> for finding/fixing a few -1s
that were missed in the original patch.
Signed-off-by: default avatarKevin Hilman <khilman@ti.com>
parent 9942da0e
...@@ -35,6 +35,7 @@ static struct __initdata resource omap15xx_mpu_gpio_resources[] = { ...@@ -35,6 +35,7 @@ static struct __initdata resource omap15xx_mpu_gpio_resources[] = {
}; };
static struct omap_gpio_reg_offs omap15xx_mpuio_regs = { static struct omap_gpio_reg_offs omap15xx_mpuio_regs = {
.revision = USHRT_MAX,
.direction = OMAP_MPUIO_IO_CNTL, .direction = OMAP_MPUIO_IO_CNTL,
.datain = OMAP_MPUIO_INPUT_LATCH, .datain = OMAP_MPUIO_INPUT_LATCH,
.dataout = OMAP_MPUIO_OUTPUT, .dataout = OMAP_MPUIO_OUTPUT,
...@@ -75,6 +76,7 @@ static struct __initdata resource omap15xx_gpio_resources[] = { ...@@ -75,6 +76,7 @@ static struct __initdata resource omap15xx_gpio_resources[] = {
}; };
static struct omap_gpio_reg_offs omap15xx_gpio_regs = { static struct omap_gpio_reg_offs omap15xx_gpio_regs = {
.revision = USHRT_MAX,
.direction = OMAP1510_GPIO_DIR_CONTROL, .direction = OMAP1510_GPIO_DIR_CONTROL,
.datain = OMAP1510_GPIO_DATA_INPUT, .datain = OMAP1510_GPIO_DATA_INPUT,
.dataout = OMAP1510_GPIO_DATA_OUTPUT, .dataout = OMAP1510_GPIO_DATA_OUTPUT,
......
...@@ -38,6 +38,7 @@ static struct __initdata resource omap16xx_mpu_gpio_resources[] = { ...@@ -38,6 +38,7 @@ static struct __initdata resource omap16xx_mpu_gpio_resources[] = {
}; };
static struct omap_gpio_reg_offs omap16xx_mpuio_regs = { static struct omap_gpio_reg_offs omap16xx_mpuio_regs = {
.revision = USHRT_MAX,
.direction = OMAP_MPUIO_IO_CNTL, .direction = OMAP_MPUIO_IO_CNTL,
.datain = OMAP_MPUIO_INPUT_LATCH, .datain = OMAP_MPUIO_INPUT_LATCH,
.dataout = OMAP_MPUIO_OUTPUT, .dataout = OMAP_MPUIO_OUTPUT,
...@@ -78,6 +79,7 @@ static struct __initdata resource omap16xx_gpio1_resources[] = { ...@@ -78,6 +79,7 @@ static struct __initdata resource omap16xx_gpio1_resources[] = {
}; };
static struct omap_gpio_reg_offs omap16xx_gpio_regs = { static struct omap_gpio_reg_offs omap16xx_gpio_regs = {
.revision = OMAP1610_GPIO_REVISION,
.direction = OMAP1610_GPIO_DIRECTION, .direction = OMAP1610_GPIO_DIRECTION,
.set_dataout = OMAP1610_GPIO_SET_DATAOUT, .set_dataout = OMAP1610_GPIO_SET_DATAOUT,
.clr_dataout = OMAP1610_GPIO_CLEAR_DATAOUT, .clr_dataout = OMAP1610_GPIO_CLEAR_DATAOUT,
......
...@@ -40,6 +40,7 @@ static struct __initdata resource omap7xx_mpu_gpio_resources[] = { ...@@ -40,6 +40,7 @@ static struct __initdata resource omap7xx_mpu_gpio_resources[] = {
}; };
static struct omap_gpio_reg_offs omap7xx_mpuio_regs = { static struct omap_gpio_reg_offs omap7xx_mpuio_regs = {
.revision = USHRT_MAX,
.direction = OMAP_MPUIO_IO_CNTL / 2, .direction = OMAP_MPUIO_IO_CNTL / 2,
.datain = OMAP_MPUIO_INPUT_LATCH / 2, .datain = OMAP_MPUIO_INPUT_LATCH / 2,
.dataout = OMAP_MPUIO_OUTPUT / 2, .dataout = OMAP_MPUIO_OUTPUT / 2,
...@@ -80,6 +81,7 @@ static struct __initdata resource omap7xx_gpio1_resources[] = { ...@@ -80,6 +81,7 @@ static struct __initdata resource omap7xx_gpio1_resources[] = {
}; };
static struct omap_gpio_reg_offs omap7xx_gpio_regs = { static struct omap_gpio_reg_offs omap7xx_gpio_regs = {
.revision = USHRT_MAX,
.direction = OMAP7XX_GPIO_DIR_CONTROL, .direction = OMAP7XX_GPIO_DIR_CONTROL,
.datain = OMAP7XX_GPIO_DATA_INPUT, .datain = OMAP7XX_GPIO_DATA_INPUT,
.dataout = OMAP7XX_GPIO_DATA_OUTPUT, .dataout = OMAP7XX_GPIO_DATA_OUTPUT,
......
...@@ -71,6 +71,7 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) ...@@ -71,6 +71,7 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
case 0: case 0:
case 1: case 1:
pdata->bank_type = METHOD_GPIO_24XX; pdata->bank_type = METHOD_GPIO_24XX;
pdata->regs->revision = OMAP24XX_GPIO_REVISION;
pdata->regs->direction = OMAP24XX_GPIO_OE; pdata->regs->direction = OMAP24XX_GPIO_OE;
pdata->regs->datain = OMAP24XX_GPIO_DATAIN; pdata->regs->datain = OMAP24XX_GPIO_DATAIN;
pdata->regs->dataout = OMAP24XX_GPIO_DATAOUT; pdata->regs->dataout = OMAP24XX_GPIO_DATAOUT;
...@@ -86,6 +87,7 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) ...@@ -86,6 +87,7 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
break; break;
case 2: case 2:
pdata->bank_type = METHOD_GPIO_44XX; pdata->bank_type = METHOD_GPIO_44XX;
pdata->regs->revision = OMAP4_GPIO_REVISION;
pdata->regs->direction = OMAP4_GPIO_OE; pdata->regs->direction = OMAP4_GPIO_OE;
pdata->regs->datain = OMAP4_GPIO_DATAIN; pdata->regs->datain = OMAP4_GPIO_DATAIN;
pdata->regs->dataout = OMAP4_GPIO_DATAOUT; pdata->regs->dataout = OMAP4_GPIO_DATAOUT;
......
...@@ -175,6 +175,7 @@ struct omap_gpio_dev_attr { ...@@ -175,6 +175,7 @@ struct omap_gpio_dev_attr {
}; };
struct omap_gpio_reg_offs { struct omap_gpio_reg_offs {
u16 revision;
u16 direction; u16 direction;
u16 datain; u16 datain;
u16 dataout; u16 dataout;
......
...@@ -984,19 +984,17 @@ static int gpio_2irq(struct gpio_chip *chip, unsigned offset) ...@@ -984,19 +984,17 @@ static int gpio_2irq(struct gpio_chip *chip, unsigned offset)
static void __init omap_gpio_show_rev(struct gpio_bank *bank) static void __init omap_gpio_show_rev(struct gpio_bank *bank)
{ {
static bool called;
u32 rev; u32 rev;
if (cpu_is_omap16xx() && !(bank->method != METHOD_MPUIO)) if (called || bank->regs->revision == USHRT_MAX)
rev = __raw_readw(bank->base + OMAP1610_GPIO_REVISION);
else if (cpu_is_omap24xx() || cpu_is_omap34xx())
rev = __raw_readl(bank->base + OMAP24XX_GPIO_REVISION);
else if (cpu_is_omap44xx())
rev = __raw_readl(bank->base + OMAP4_GPIO_REVISION);
else
return; return;
printk(KERN_INFO "OMAP GPIO hardware version %d.%d\n", rev = __raw_readw(bank->base + bank->regs->revision);
pr_info("OMAP GPIO hardware version %d.%d\n",
(rev >> 4) & 0x0f, rev & 0x0f); (rev >> 4) & 0x0f, rev & 0x0f);
called = true;
} }
/* This lock class tells lockdep that GPIO irqs are in a different /* This lock class tells lockdep that GPIO irqs are in a different
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment