From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43341) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUf3A-0007uC-Qa for qemu-devel@nongnu.org; Mon, 31 Mar 2014 12:27:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WUf31-0003ZK-Gw for qemu-devel@nongnu.org; Mon, 31 Mar 2014 12:27:04 -0400 Received: from mail-qa0-x236.google.com ([2607:f8b0:400d:c00::236]:34692) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUf31-0003Z4-Cm for qemu-devel@nongnu.org; Mon, 31 Mar 2014 12:26:55 -0400 Received: by mail-qa0-f54.google.com with SMTP id w8so8368771qac.13 for ; Mon, 31 Mar 2014 09:26:54 -0700 (PDT) Sender: Paolo Bonzini From: Paolo Bonzini Date: Mon, 31 Mar 2014 18:26:32 +0200 Message-Id: <1396283195-6819-5-git-send-email-pbonzini@redhat.com> In-Reply-To: <1396283195-6819-1-git-send-email-pbonzini@redhat.com> References: <1396283195-6819-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH for-2.0 4/7] tmp105: read temperature in milli-celsius List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, afaerber@suse.de Right now, the temperature property must be written in milli-celsius, but it reads back the value in 8.8 fixed point. Fix this by letting the property read back the original value (possibly rounded). Also simplify the code that does the conversion. Before: (QEMU) qom-set path=/machine/peripheral/sensor property=temperature value=20000 {u'return': {}} (QEMU) qom-get path=sensor property=temperature {u'return': 5120} After: (QEMU) qom-set path=/machine/peripheral/sensor property=temperature value=20000 {u'return': {}} (QEMU) qom-get path=sensor property=temperature {u'return': 20000} Signed-off-by: Paolo Bonzini --- hw/misc/tmp105.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hw/misc/tmp105.c b/hw/misc/tmp105.c index caec4a5..244c1ef 100644 --- a/hw/misc/tmp105.c +++ b/hw/misc/tmp105.c @@ -56,12 +56,14 @@ static void tmp105_get_temperature(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { TMP105State *s = TMP105(obj); - int64_t value = s->temperature; + int64_t value = s->temperature * 1000 / 256; visit_type_int(v, &value, name, errp); } -/* Units are 0.001 centigrades relative to 0 C. */ +/* Units are 0.001 centigrades relative to 0 C. s->temperature is 8.8 + * fixed point, so units are 1/256 centigrades. A simple ratio will do. + */ static void tmp105_set_temperature(Object *obj, Visitor *v, void *opaque, const char *name, Error **errp) { @@ -80,7 +82,7 @@ static void tmp105_set_temperature(Object *obj, Visitor *v, void *opaque, return; } - s->temperature = ((int16_t) (temp * 0x800 / 128000)) << 4; + s->temperature = (int16_t) (temp * 256 / 1000); tmp105_alarm_update(s); } -- 1.9.0