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

Commit c8384bb0 authored by Troy Kisky's avatar Troy Kisky Committed by Alexandre Belloni
Browse files

rtc: m41t80: fix m41t80_sqw_round_rate return value



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>
parent de6042d2
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,