Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8932255e authored by Troy Kisky's avatar Troy Kisky Committed by Greg Kroah-Hartman
Browse files

rtc: m41t80: fix m41t80_sqw_round_rate return value



commit c8384bb04261b9d32fe7402a6068ddaf38913b23 upstream.

Previously it was returning the best of
32768, 8192, 1024, 64, 2, 0

Now, best of
32768, 8192, 4096, 2048, 1024, 512, 256, 128,
64, 32, 16, 8, 4, 2, 1, 0

Signed-off-by: default avatarTroy Kisky <troy.kisky@boundarydevices.com>
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
Cc: Christoph Fritz <chf.fritz@googlemail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 56073ba4
Loading
Loading
Loading
Loading
+7 −12
Original line number Diff line number Diff line
@@ -468,18 +468,13 @@ static unsigned long m41t80_sqw_recalc_rate(struct clk_hw *hw,
static long m41t80_sqw_round_rate(struct clk_hw *hw, unsigned long rate,
				  unsigned long *prate)
{
	int i, freq = M41T80_SQW_MAX_FREQ;

	if (freq <= rate)
		return freq;

	for (i = 2; i <= ilog2(M41T80_SQW_MAX_FREQ); i++) {
		freq /= 1 << i;
		if (freq <= rate)
			return freq;
	}

	if (rate >= M41T80_SQW_MAX_FREQ)
		return M41T80_SQW_MAX_FREQ;
	if (rate >= M41T80_SQW_MAX_FREQ / 4)
		return M41T80_SQW_MAX_FREQ / 4;
	if (!rate)
		return 0;
	return 1 << ilog2(rate);
}

static int m41t80_sqw_set_rate(struct clk_hw *hw, unsigned long rate,