soc/tegra: pmc: Factor out DPD register bit calculation

Factor out the the code to calculate the correct DPD register and bit
number for a given pad. This logic will be needed to query the status
register.

Signed-off-by: Aapo Vienamo <avienamo@nvidia.com>
Acked-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
Aapo Vienamo 2018-08-10 21:08:08 +03:00 committed by Thierry Reding
parent 13136a47a0
commit 00ead3c913
1 changed files with 17 additions and 3 deletions

View File

@ -922,11 +922,12 @@ tegra_io_pad_find(struct tegra_pmc *pmc, enum tegra_io_pad id)
return NULL;
}
static int tegra_io_pad_prepare(enum tegra_io_pad id, unsigned long *request,
unsigned long *status, u32 *mask)
static int tegra_io_pad_get_dpd_register_bit(enum tegra_io_pad id,
unsigned long *request,
unsigned long *status,
u32 *mask)
{
const struct tegra_io_pad_soc *pad;
unsigned long rate, value;
pad = tegra_io_pad_find(pmc, id);
if (!pad) {
@ -947,6 +948,19 @@ static int tegra_io_pad_prepare(enum tegra_io_pad id, unsigned long *request,
*request = pmc->soc->regs->dpd2_req;
}
return 0;
}
static int tegra_io_pad_prepare(enum tegra_io_pad id, unsigned long *request,
unsigned long *status, u32 *mask)
{
unsigned long rate, value;
int err;
err = tegra_io_pad_get_dpd_register_bit(id, request, status, mask);
if (err)
return err;
if (pmc->clk) {
rate = clk_get_rate(pmc->clk);
if (!rate) {