[solved] nonsense values from sensor

GY-283 I2C compass sensor module
IC: Honeywell HMC5983 temperature compensated three-axis integrated circuit magnetometer
datasheet

My resulting temperature values makes no sense (ex 608). Should be around 20 (deg C). I can’t figure out what I’m doing wrong.

My code:

#include <Wire.h>
#define addr 0x1E //HMC5983 I2C Address

void setup(){
Serial.begin(9600);
Wire.begin();

Wire.beginTransmission(addr); //open buffer
Wire.write(0x00);             // Set pointer to 'Config Register' (0x00)
Wire.write(0x90);             // set Config Register to 0b10010000 (temperature enabled)
Wire.endTransmission();       //write buffer

Wire.beginTransmission(addr); 
Wire.write(0x02); // Set pointer to 'Mode Register' (0x02)
Wire.write(0x00); // set Mode Register to 0x00 (Continuous Measurement)
Wire.endTransmission(); 
}


void loop()
{
  uint8_t t_hi, t_lo;
  int16_t temp;

  Wire.beginTransmission(addr);
  Wire.write(0x31); // go to register 49 (temp)
  Wire.endTransmission();

  Wire.requestFrom(addr, 2); //read two bytes
  if(2 <= Wire.available() ){
    t_hi = Wire.read(); //MSB temperature
    t_lo = Wire.read(); //LSB temperature
  }
    // Shift values to create properly formed integer (low byte first)
  temp = (int16_t)(t_lo | ((int16_t)t_hi << 8));
  
  //Print Temperature
  Serial.print("Temperature: "); Serial.println(temp);
  
  delay(1000);
}

Doh! What a bonehead I am. I just forgot to do the math bit at the end.
It should be:

  temp = (((int16_t)(t_lo | ((int16_t)t_hi << 8))) / 128 ) + 15;

Serves me right for trying to code at 12am

Further optimisation:

 temp = (((int16_t)(t_lo | ((int16_t)t_hi << 8))) >> 7 ) + 15;