Re: [PATCH/RFC v10 08/19] leds: Add support for max77693 mfd flash cell
From: Jacek Anaszewski <hidden>
Date: 2015-01-12 13:47:07
Also in:
linux-leds, linux-media, lkml
From: Jacek Anaszewski <hidden>
Date: 2015-01-12 13:47:07
Also in:
linux-leds, linux-media, lkml
On 01/12/2015 02:25 PM, Pavel Machek wrote:
Hi!quoted
quoted
quoted
+struct max77693_sub_led { + /* related FLED output identifier */->flash LED, about 4x.quoted
+/* split composite current @i into two @iout according to @imax weights */ +static void __max77693_calc_iout(u32 iout[2], u32 i, u32 imax[2]) +{ + u64 t = i; + + t *= imax[1]; + do_div(t, imax[0] + imax[1]); + + iout[1] = (u32)t / FLASH_IOUT_STEP * FLASH_IOUT_STEP; + iout[0] = i - iout[1]; +}Is 64-bit arithmetics neccessary here? Could we do the FLASH_IOUT_STEP divisons before t *=, so that 64-bit division is not neccessary?It is required. All these operations allow for splitting the composite current into both outputs according to weights given in the imax array.I know. What about this? static void __max77693_calc_iout(u32 iout[2], u32 i, u32 imax[2]) { u32 t = i; t *= imax[1] / FLASH_IOUT_STEP;
Let's consider following case: t = 1000000 imax[1] = 1000000 multiplication of the above will give 10^12 - much more than it is possible to encode on 32 bits.
t = t / (imax[0] + imax[1]); t /= FLASH_IOUT_STEP iout[1] = (u32)t; iout[0] = i - iout[1]; } Does it lack precision? Thanks, Pavel
-- Best Regards, Jacek Anaszewski