forked from Minki/linux
ARM: tegra: pinmux: Add missing drive pingroups and fix suspend
Adds missing drive pingroups, saves all drive pingroups in suspend, and restores the pinmux registers in the proper order. Signed-off-by: Gary King <gking@nvidia.com> Signed-off-by: Colin Cross <ccross@android.com>
This commit is contained in:
parent
cea62c878d
commit
3c3895b4bf
@ -167,6 +167,16 @@ enum tegra_drive_pingroup {
|
||||
TEGRA_DRIVE_PINGROUP_XM2D,
|
||||
TEGRA_DRIVE_PINGROUP_XM2CLK,
|
||||
TEGRA_DRIVE_PINGROUP_MEMCOMP,
|
||||
TEGRA_DRIVE_PINGROUP_SDIO1,
|
||||
TEGRA_DRIVE_PINGROUP_CRT,
|
||||
TEGRA_DRIVE_PINGROUP_DDC,
|
||||
TEGRA_DRIVE_PINGROUP_GMA,
|
||||
TEGRA_DRIVE_PINGROUP_GMB,
|
||||
TEGRA_DRIVE_PINGROUP_GMC,
|
||||
TEGRA_DRIVE_PINGROUP_GMD,
|
||||
TEGRA_DRIVE_PINGROUP_GME,
|
||||
TEGRA_DRIVE_PINGROUP_OWR,
|
||||
TEGRA_DRIVE_PINGROUP_UAD,
|
||||
TEGRA_MAX_DRIVE_PINGROUP,
|
||||
};
|
||||
|
||||
|
@ -66,6 +66,16 @@ const struct tegra_drive_pingroup_desc tegra_soc_drive_pingroups[TEGRA_MAX_DRIVE
|
||||
DRIVE_PINGROUP(XM2D, 0x8cc),
|
||||
DRIVE_PINGROUP(XM2CLK, 0x8d0),
|
||||
DRIVE_PINGROUP(MEMCOMP, 0x8d4),
|
||||
DRIVE_PINGROUP(SDIO1, 0x8e0),
|
||||
DRIVE_PINGROUP(CRT, 0x8ec),
|
||||
DRIVE_PINGROUP(DDC, 0x8f0),
|
||||
DRIVE_PINGROUP(GMA, 0x8f4),
|
||||
DRIVE_PINGROUP(GMB, 0x8f8),
|
||||
DRIVE_PINGROUP(GMC, 0x8fc),
|
||||
DRIVE_PINGROUP(GMD, 0x900),
|
||||
DRIVE_PINGROUP(GME, 0x904),
|
||||
DRIVE_PINGROUP(OWR, 0x908),
|
||||
DRIVE_PINGROUP(UAD, 0x90c),
|
||||
};
|
||||
|
||||
#define PINGROUP(pg_name, vdd, f0, f1, f2, f3, f_safe, \
|
||||
@ -217,7 +227,8 @@ const struct tegra_pingroup_desc tegra_soc_pingroups[TEGRA_MAX_PINGROUP] = {
|
||||
#define PULLUPDOWN_REG_NUM 5
|
||||
|
||||
static u32 pinmux_reg[TRISTATE_REG_NUM + PIN_MUX_CTL_REG_NUM +
|
||||
PULLUPDOWN_REG_NUM];
|
||||
PULLUPDOWN_REG_NUM +
|
||||
ARRAY_SIZE(tegra_soc_drive_pingroups)];
|
||||
|
||||
static inline unsigned long pg_readl(unsigned long offset)
|
||||
{
|
||||
@ -234,14 +245,17 @@ void tegra_pinmux_suspend(void)
|
||||
unsigned int i;
|
||||
u32 *ctx = pinmux_reg;
|
||||
|
||||
for (i = 0; i < TRISTATE_REG_NUM; i++)
|
||||
*ctx++ = pg_readl(TRISTATE_REG_A + i*4);
|
||||
|
||||
for (i = 0; i < PIN_MUX_CTL_REG_NUM; i++)
|
||||
*ctx++ = pg_readl(PIN_MUX_CTL_REG_A + i*4);
|
||||
|
||||
for (i = 0; i < PULLUPDOWN_REG_NUM; i++)
|
||||
*ctx++ = pg_readl(PULLUPDOWN_REG_A + i*4);
|
||||
|
||||
for (i = 0; i < TRISTATE_REG_NUM; i++)
|
||||
*ctx++ = pg_readl(TRISTATE_REG_A + i*4);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(tegra_soc_drive_pingroups); i++)
|
||||
*ctx++ = pg_readl(tegra_soc_drive_pingroups[i].reg);
|
||||
}
|
||||
|
||||
void tegra_pinmux_resume(void)
|
||||
@ -257,5 +271,8 @@ void tegra_pinmux_resume(void)
|
||||
|
||||
for (i = 0; i < TRISTATE_REG_NUM; i++)
|
||||
pg_writel(*ctx++, TRISTATE_REG_A + i*4);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(tegra_soc_drive_pingroups); i++)
|
||||
pg_writel(*ctx++, tegra_soc_drive_pingroups[i].reg);
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user