/* common data structures */
 struct ti_thermal_data {
        struct thermal_zone_device *ti_thermal;
+       struct thermal_zone_device *pcb_tz;
        struct thermal_cooling_device *cool_dev;
        struct ti_bandgap *bgp;
        enum thermal_device_mode mode;
 static inline int ti_thermal_get_temp(struct thermal_zone_device *thermal,
                                      unsigned long *temp)
 {
+       struct thermal_zone_device *pcb_tz = NULL;
        struct ti_thermal_data *data = thermal->devdata;
        struct ti_bandgap *bgp;
        const struct ti_temp_sensor *s;
-       int ret, tmp, pcb_temp, slope, constant;
+       int ret, tmp, slope, constant;
+       unsigned long pcb_temp;
 
        if (!data)
                return 0;
        if (ret)
                return ret;
 
-       pcb_temp = 0;
-       /* TODO: Introduce pcb temperature lookup */
+       /* Default constants */
+       slope = s->slope;
+       constant = s->constant;
+
+       pcb_tz = data->pcb_tz;
        /* In case pcb zone is available, use the extrapolation rule with it */
-       if (pcb_temp) {
-               tmp -= pcb_temp;
-               slope = s->slope_pcb;
-               constant = s->constant_pcb;
-       } else {
-               slope = s->slope;
-               constant = s->constant;
+       if (!IS_ERR_OR_NULL(pcb_tz)) {
+               ret = thermal_zone_get_temp(pcb_tz, &pcb_temp);
+               if (!ret) {
+                       tmp -= pcb_temp; /* got a valid PCB temp */
+                       slope = s->slope_pcb;
+                       constant = s->constant_pcb;
+               } else {
+                       dev_err(bgp->dev,
+                               "Failed to read PCB state. Using defaults\n");
+               }
        }
        *temp = ti_thermal_hotspot_temperature(tmp, slope, constant);
 
        data->sensor_id = id;
        data->bgp = bgp;
        data->mode = THERMAL_DEVICE_ENABLED;
+       data->pcb_tz = thermal_zone_get_zone_by_name("pcb");
        INIT_WORK(&data->thermal_wq, ti_thermal_work);
 
        return data;