tmp105: Read temperature in milli-celsius
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 <pbonzini@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
			
			
This commit is contained in:
		
							parent
							
								
									e683eb9ecc
								
							
						
					
					
						commit
						efdf6a56a7
					
				| 
						 | 
				
			
			@ -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)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +80,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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue