15 Apr
2019
15 Apr
'19
9:26 a.m.
On 12/04/2019 15:30, Andrzej Hajda wrote:
+static const unsigned int sii902x_mclk_div_table[] = {
- 128, 256, 384, 512, 768, 1024, 1152, 192 };
+static int sii902x_select_mclk_div(u8 *i2s_config_reg, unsigned int rate,
unsigned int mclk)
+{
- unsigned int div = mclk / rate;
- int distance = 100000;
- u8 i, nearest = 0;
- for (i = 0; i < ARRAY_SIZE(sii902x_mclk_div_table); i++) {
unsigned int d = abs(div - sii902x_mclk_div_table[i]);
Using unsigned types in this context seems to be asking for troubles.
Why? Isn't return value of abs() by definition unsigned? Using signed integers when comparing absolute distances would seem awkward to me.
(div - sii902x_mclk_div_table[i]) is unsigned, if div is lower, there is overflow, and the value is big int, I suppose this is not what you want.
Oh yes. I had my eyes fixed on wrong unsigned. The first operand of subtraction should indeed be signed for the result to be signed, I completely overlooked that.
Thanks, Jyri
--
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki