Messages in this thread |  | | Date | Thu, 12 Dec 2013 11:01:36 -0700 | From | Stephen Warren <> | Subject | Re: [PATCH 1/2] of: add support for reading s32 property value |
| |
On 12/12/2013 06:24 AM, Laxman Dewangan wrote: > Add of_property_read_s32() to read the signed 32bit number > from dt property value. This supports to pass the -ve numbers > from dt. Use 2's complement method for represnting negative number > and passed as u32 from dts. When reading back the value, again > converted to 2's complement if msb shows as 1.
> diff --git a/include/linux/of.h b/include/linux/of.h
> +static inline int of_property_read_s32(const struct device_node *np, > + const char *propname, > + s32 *out_value) > +{ > + u32 val; > + int ret; > + > + ret = of_property_read_u32(np, propname, &val); > + if (ret < 0) > + return ret; > + > + /* 2's complement if MSB is 1 */ > + *out_value = (val & 0x80000000U) ? -((val ^ 0xFFFFFFFFU) + 1) : val;
I may not be thinking straight today since I have a cold, but doesn't patch 2/2 encode negative values as 2's complement, and an s32 variable in the kernel is also encoded as 2's complement, so all you need here is a cast:
*out_value = (s32)val;
... since the cast doesn't change the binary representation?
|  |