How to define IN_TO_REG and IN_FROM_REG in w83627hf.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 8/10/07, Juerg Haefliger wrote:
> Hi Dave,,

Hi Juerg,

> > > Hi Dave,
> >
> > Hi Jeurg,
> >
> > > > Hello,
> > > >
> > > > I don't understand why the IN_TO_REG(val) is defined by
> > > > (SENSORS_LIMIT((((val) + 8)/16),0,255))
> > >
> > > (val+8)/16 is equal to val/16 with rounding, i.e. round(val/16), and
> > > then the result is clipped to stay within the range 0-255.
> >
> > Thanks. But I just don't understand why the variable val plus 8? How
> > do you know?
>
> The kernel can't do floating point arithmetic, it truncates the
> results. So we have to add (divisor/2) before doing the division to
> achieve rounding. For example if val=8, (8/16) would result in 0 (in
> the kernel). But round(8/16) is actually 1, which is what we want. We
> achieve this by adding 8 (which is 16/2) before dividing by 16.
>
> Bottom line, you have to add (divisor/2) before dividing to get
> correct rounding of the result.
>
>
> > Another example I see is IN_TO_REG(val) defined:
> >
> >  (SENSORS_LIMIT((((val)  + 4 / 8),0,255)), why is val plus 4? why not 8? Thanks.
>
> Same here 4 is divisor/2 (8/2).

Thank you for your clear explanation. Now I completely understand,
thank you very much!
I'd really appreciate!
>
> ...juerg
>
>
> > >
> > > Hope this helps
> > > ...juerg
> > >
> > >
> > > > and IN_FROM_REG(val) is
> > > > defined by ((val) * 16)
> > > >
> > > > Would you teach me? Thank you.
> > > >
> > > > BR,
> > > > Dave.
> > > >
> >
> > BR,Dave.
> >
>




[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux