Skip to content

Commit 7219709

Browse files
barsoknashif
authored andcommitted
drivers: i2s_nrfx: Fix division by 0 in divider calculation
Skip cases which would result in division by 0 in clock calculation Signed-off-by: Bartosz Sokolski <[email protected]>
1 parent afba616 commit 7219709

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

drivers/i2s/i2s_nrfx.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,16 @@ static void find_suitable_clock(const struct i2s_nrfx_drv_cfg *drv_cfg,
110110
* f_actual = f_source /
111111
* floor(1048576 * 4096 / MCKFREQ)
112112
*/
113+
enum { MCKCONST = 1048576 };
113114
uint32_t mck_factor =
114-
(uint32_t)((requested_mck * 1048576ULL) /
115+
(uint32_t)(((uint64_t)requested_mck * MCKCONST) /
115116
(src_freq + requested_mck / 2));
116-
uint32_t actual_mck = src_freq / (1048576 / mck_factor);
117+
118+
/* skip cases when mck_factor is too big for dividing */
119+
if (mck_factor > MCKCONST) {
120+
continue;
121+
}
122+
uint32_t actual_mck = src_freq / (MCKCONST / mck_factor);
117123

118124
uint32_t lrck_freq = actual_mck / ratios[r].ratio_val;
119125
uint32_t diff = lrck_freq >= i2s_cfg->frame_clk_freq

0 commit comments

Comments
 (0)