/* * rational fractions * * Copyright (C) 2009 emlix GmbH, Oskar Schirmer * * helper functions when coping with rational numbers */ #include #include #include /* * calculate best rational approximation for a given fraction * taking into account restricted register size, e.g. to find * appropriate values for a pll with 5 bit denominator and * 8 bit numerator register fields, trying to set up with a * frequency ratio of 3.1415, one would say: * * rational_best_approximation(31415, 10000, * (1 << 8) - 1, (1 << 5) - 1, &n, &d); * * you may look at given_numerator as a fixed point number, * with the fractional part size described in given_denominator. * * for theoretical background, see: * http://en.wikipedia.org/wiki/Continued_fraction */ void rational_best_approximation( unsigned long given_numerator, unsigned long given_denominator, unsigned long max_numerator, unsigned long max_denominator, unsigned long *best_numerator, unsigned long *best_denominator) { unsigned long n, d, n0, d0, n1, d1; n = given_numerator; d = given_denominator; n0 = d1 = 0; n1 = d0 = 1; for (;;) { unsigned long t, a; if ((n1 > max_numerator) || (d1 > max_denominator)) { n1 = n0; d1 = d0; break; } if (d == 0) break; t = d; a = n / d; d = n % d; n = t; t = n0 + a * n1; n0 = n1; n1 = t; t = d0 + a * d1; d0 = d1; d1 = t; } *best_numerator = n1; *best_denominator = d1; } EXPORT_SYMBOL(rational_best_approximation); > summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuuk Paulussen <luuk.paulussen@alliedtelesis.co.nz>2016-12-08 11:43:34 +1300
committerRalf Baechle <ralf@linux-mips.org>2016-12-11 11:19:04 +0100
commitedb6fa1a6452edf736c04d02e3f6de59043df69e (patch)
treef854dd896b1e5033a26f305ec9a50a87b1b13939 /include/target/iscsi
parent3e5de27e940d00d8d504dfb96625fb654f641509 (diff)
MIPS: Return -ENODEV from weak implementation of rtc_mips_set_time
The sync_cmos_clock function in kernel/time/ntp.c first tries to update the internal clock of the cpu by calling the "update_persistent_clock64" architecture specific function. If this returns -ENODEV, it then tries to update an external RTC using "rtc_set_ntp_time". On the mips architecture, the weak implementation of the underlying function would return 0 if it wasn't overridden. This meant that the sync_cmos_clock function would never try to update an external RTC (if both CONFIG_GENERIC_CMOS_UPDATE and CONFIG_RTC_SYSTOHC are configured) Returning -ENODEV instead, means that an external RTC will be tried. Signed-off-by: Luuk Paulussen <luuk.paulussen@alliedtelesis.co.nz> Reviewed-by: Richard Laing <richard.laing@alliedtelesis.co.nz> Reviewed-by: Scott Parlane <scott.parlane@alliedtelesis.co.nz> Reviewed-by: Chris Packham <chris.packham@alliedtelesis.co.nz> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/14649/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'include/target/iscsi')