These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / gpu / drm / nouveau / nvkm / subdev / therm / ic.c
index 09fc460..6e0ddc1 100644 (file)
 #include <subdev/i2c.h>
 
 static bool
-probe_monitoring_device(struct nvkm_i2c_port *i2c,
+probe_monitoring_device(struct nvkm_i2c_bus *bus,
                        struct i2c_board_info *info, void *data)
 {
-       struct nvkm_therm_priv *priv = data;
-       struct nvbios_therm_sensor *sensor = &priv->bios_sensor;
+       struct nvkm_therm *therm = data;
+       struct nvbios_therm_sensor *sensor = &therm->bios_sensor;
        struct i2c_client *client;
 
        request_module("%s%s", I2C_MODULE_PREFIX, info->type);
 
-       client = i2c_new_device(&i2c->adapter, info);
+       client = i2c_new_device(&bus->i2c, info);
        if (!client)
                return false;
 
@@ -46,15 +46,15 @@ probe_monitoring_device(struct nvkm_i2c_port *i2c,
                return false;
        }
 
-       nv_info(priv,
-               "Found an %s at address 0x%x (controlled by lm_sensors, "
-               "temp offset %+i C)\n",
-               info->type, info->addr, sensor->offset_constant);
-       priv->ic = client;
+       nvkm_debug(&therm->subdev,
+                  "Found an %s at address 0x%x (controlled by lm_sensors, "
+                  "temp offset %+i C)\n",
+                  info->type, info->addr, sensor->offset_constant);
+       therm->ic = client;
        return true;
 }
 
-static struct nvkm_i2c_board_info
+static struct nvkm_i2c_bus_probe
 nv_board_infos[] = {
        { { I2C_BOARD_INFO("w83l785ts", 0x2d) }, 0 },
        { { I2C_BOARD_INFO("w83781d", 0x2d) }, 0  },
@@ -82,38 +82,43 @@ nv_board_infos[] = {
 void
 nvkm_therm_ic_ctor(struct nvkm_therm *therm)
 {
-       struct nvkm_therm_priv *priv = (void *)therm;
-       struct nvkm_bios *bios = nvkm_bios(therm);
-       struct nvkm_i2c *i2c = nvkm_i2c(therm);
+       struct nvkm_device *device = therm->subdev.device;
+       struct nvkm_bios *bios = device->bios;
+       struct nvkm_i2c *i2c = device->i2c;
+       struct nvkm_i2c_bus *bus;
        struct nvbios_extdev_func extdev_entry;
 
+       bus = nvkm_i2c_bus_find(i2c, NVKM_I2C_BUS_PRI);
+       if (!bus)
+               return;
+
        if (!nvbios_extdev_find(bios, NVBIOS_EXTDEV_LM89, &extdev_entry)) {
-               struct nvkm_i2c_board_info board[] = {
+               struct nvkm_i2c_bus_probe board[] = {
                  { { I2C_BOARD_INFO("lm90", extdev_entry.addr >> 1) }, 0},
                  { }
                };
 
-               i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device",
-                             board, probe_monitoring_device, therm);
-               if (priv->ic)
+               nvkm_i2c_bus_probe(bus, "monitoring device", board,
+                                  probe_monitoring_device, therm);
+               if (therm->ic)
                        return;
        }
 
        if (!nvbios_extdev_find(bios, NVBIOS_EXTDEV_ADT7473, &extdev_entry)) {
-               struct nvkm_i2c_board_info board[] = {
+               struct nvkm_i2c_bus_probe board[] = {
                  { { I2C_BOARD_INFO("adt7473", extdev_entry.addr >> 1) }, 20 },
                  { }
                };
 
-               i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device",
-                             board, probe_monitoring_device, therm);
-               if (priv->ic)
+               nvkm_i2c_bus_probe(bus, "monitoring device", board,
+                                  probe_monitoring_device, therm);
+               if (therm->ic)
                        return;
        }
 
        /* The vbios doesn't provide the address of an exisiting monitoring
           device. Let's try our static list.
         */
-       i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device",
-                     nv_board_infos, probe_monitoring_device, therm);
+       nvkm_i2c_bus_probe(bus, "monitoring device", nv_board_infos,
+                          probe_monitoring_device, therm);
 }