From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34086) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WFMzn-0004nP-9v for qemu-devel@nongnu.org; Mon, 17 Feb 2014 07:08:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WFMzg-00047Z-0M for qemu-devel@nongnu.org; Mon, 17 Feb 2014 07:08:23 -0500 Received: from cantor2.suse.de ([195.135.220.15]:57109 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WFMzf-00047U-Pe for qemu-devel@nongnu.org; Mon, 17 Feb 2014 07:08:15 -0500 Message-ID: <5301FBAB.6060705@suse.de> Date: Mon, 17 Feb 2014 13:08:11 +0100 From: =?ISO-8859-15?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1392634650-24282-1-git-send-email-pbonzini@redhat.com> In-Reply-To: <1392634650-24282-1-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH] tmp105: read temperature in milli-celsius List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini , qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, Alex Horn Am 17.02.2014 11:57, schrieb Paolo Bonzini: > Right now, the temperature property must be written in milli-celsius, b= ut it > reads back the value in 8.8 fixed point. Fix this by letting the prope= rty > read back the original value (possibly rounded). Also simplify the cod= e that > does the conversion. >=20 > Before: >=20 > (QEMU) qom-set path=3D/machine/peripheral/sensor property=3Dtempera= ture value=3D20000 > {u'return': {}} > (QEMU) qom-get path=3Dsensor property=3Dtemperature > {u'return': 5120} >=20 > After: >=20 > (QEMU) qom-set path=3D/machine/peripheral/sensor property=3Dtempera= ture value=3D20000 > {u'return': {}} > (QEMU) qom-get path=3Dsensor property=3Dtemperature > {u'return': 20000} >=20 > Signed-off-by: Paolo Bonzini > --- > hw/misc/tmp105.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) >=20 > diff --git a/hw/misc/tmp105.c b/hw/misc/tmp105.c > index 155e03d..63aa3d6 100644 > --- a/hw/misc/tmp105.c > +++ b/hw/misc/tmp105.c > @@ -56,12 +56,14 @@ static void tmp105_get_temperature(Object *obj, Vis= itor *v, void *opaque, > const char *name, Error **errp) > { > TMP105State *s =3D TMP105(obj); > - int64_t value =3D s->temperature; > + int64_t value =3D s->temperature * 1000 / 256; Hmm, I'll have to check history, but I guess the setter was there and I wrongly added the getter. That would be easier to ack of course if I didn't have to think about a complete new formula in both places... ;) > =20 > visit_type_int(v, &value, name, errp); > } > =20 > -/* 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 d= o. > + */ > static void tmp105_set_temperature(Object *obj, Visitor *v, void *opaq= ue, > const char *name, Error **errp) > { > @@ -78,7 +80,7 @@ static void tmp105_set_temperature(Object *obj, Visit= or *v, void *opaque, > return; > } > =20 > - s->temperature =3D ((int16_t) (temp * 0x800 / 128000)) << 4; > + s->temperature =3D (int16_t) (temp * 256 / 1000); Did you check whether those magic 4 bits shift were for some other purpose such as flags possibly? CC'ing Alex Horn. Since we do have a tmp105-test, we should also add a regression test for the getter bug. Regards, Andreas > =20 > tmp105_alarm_update(s); > } >=20 --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg