Skip to content

Commit

Permalink
soc/tegra: pmc: Simplify IO rail bit handling
Browse files Browse the repository at this point in the history
The function tegra_io_rail_prepare() converts the IO rail ID into a
bit position that is used to check the status and control the IO rail
in the PMC registers. However, rather than converting to a bit position
it is more useful to convert to a bit-mask because this is what is
actually used. By doing so the BIT() marco only needs to be used once
and we can use the IO_DPD_REQ_CODE_MASK when checking for erroneous rail
IDs.

Signed-off-by: Jon Hunter <[email protected]>
[[email protected]: rebase and rename bit -> mask]
Signed-off-by: Thierry Reding <[email protected]>
  • Loading branch information
jonhunter authored and thierryreding committed Nov 15, 2016
1 parent f4392d6 commit 27b12b4
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions drivers/soc/tegra/pmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -934,7 +934,7 @@ tegra_io_pad_find(struct tegra_pmc *pmc, enum tegra_io_pad id)
}

static int tegra_io_pad_prepare(enum tegra_io_pad id, unsigned long *request,
unsigned long *status, unsigned int *bit)
unsigned long *status, u32 *mask)
{
const struct tegra_io_pad_soc *pad;
unsigned long rate, value;
Expand All @@ -946,7 +946,7 @@ static int tegra_io_pad_prepare(enum tegra_io_pad id, unsigned long *request,
if (pad->dpd == UINT_MAX)
return -ENOTSUPP;

*bit = pad->dpd % 32;
*mask = BIT(pad->dpd % 32);

if (pad->dpd < 32) {
*status = IO_DPD_STATUS;
Expand Down Expand Up @@ -1002,20 +1002,20 @@ static void tegra_io_pad_unprepare(void)
int tegra_io_pad_power_enable(enum tegra_io_pad id)
{
unsigned long request, status;
unsigned int bit;
u32 mask;
int err;

mutex_lock(&pmc->powergates_lock);

err = tegra_io_pad_prepare(id, &request, &status, &bit);
err = tegra_io_pad_prepare(id, &request, &status, &mask);
if (err < 0) {
dev_err(pmc->dev, "tegra_io_pad_prepare() failed: %d\n", err);
goto unlock;
}

tegra_pmc_writel(IO_DPD_REQ_CODE_OFF | BIT(bit), request);
tegra_pmc_writel(IO_DPD_REQ_CODE_OFF | mask, request);

err = tegra_io_pad_poll(status, BIT(bit), 0, 250);
err = tegra_io_pad_poll(status, mask, 0, 250);
if (err < 0) {
dev_err(pmc->dev, "tegra_io_pad_poll() failed: %d\n", err);
goto unlock;
Expand All @@ -1038,20 +1038,20 @@ EXPORT_SYMBOL(tegra_io_pad_power_enable);
int tegra_io_pad_power_disable(enum tegra_io_pad id)
{
unsigned long request, status;
unsigned int bit;
u32 mask;
int err;

mutex_lock(&pmc->powergates_lock);

err = tegra_io_pad_prepare(id, &request, &status, &bit);
err = tegra_io_pad_prepare(id, &request, &status, &mask);
if (err < 0) {
dev_err(pmc->dev, "tegra_io_pad_prepare() failed: %d\n", err);
goto unlock;
}

tegra_pmc_writel(IO_DPD_REQ_CODE_ON | BIT(bit), request);
tegra_pmc_writel(IO_DPD_REQ_CODE_ON | mask, request);

err = tegra_io_pad_poll(status, BIT(bit), BIT(bit), 250);
err = tegra_io_pad_poll(status, mask, mask, 250);
if (err < 0) {
dev_err(pmc->dev, "tegra_io_pad_poll() failed: %d\n", err);
goto unlock;
Expand Down

0 comments on commit 27b12b4

Please sign in to comment.