|
@@ -31,6 +31,7 @@
|
|
|
|
|
|
#include <subdev/i2c.h>
|
|
#include <subdev/i2c.h>
|
|
#include <subdev/bios/therm.h>
|
|
#include <subdev/bios/therm.h>
|
|
|
|
+#include <subdev/bios/extdev.h>
|
|
|
|
|
|
static int
|
|
static int
|
|
nv40_sensor_setup(struct drm_device *dev)
|
|
nv40_sensor_setup(struct drm_device *dev)
|
|
@@ -132,16 +133,58 @@ static void
|
|
nouveau_temp_probe_i2c(struct drm_device *dev)
|
|
nouveau_temp_probe_i2c(struct drm_device *dev)
|
|
{
|
|
{
|
|
struct nouveau_device *device = nouveau_dev(dev);
|
|
struct nouveau_device *device = nouveau_dev(dev);
|
|
|
|
+ struct nouveau_bios *bios = nouveau_bios(device);
|
|
struct nouveau_i2c *i2c = nouveau_i2c(device);
|
|
struct nouveau_i2c *i2c = nouveau_i2c(device);
|
|
|
|
+ struct nvbios_extdev_func extdev_entry;
|
|
struct i2c_board_info info[] = {
|
|
struct i2c_board_info info[] = {
|
|
{ I2C_BOARD_INFO("w83l785ts", 0x2d) },
|
|
{ I2C_BOARD_INFO("w83l785ts", 0x2d) },
|
|
{ I2C_BOARD_INFO("w83781d", 0x2d) },
|
|
{ I2C_BOARD_INFO("w83781d", 0x2d) },
|
|
{ I2C_BOARD_INFO("adt7473", 0x2e) },
|
|
{ I2C_BOARD_INFO("adt7473", 0x2e) },
|
|
|
|
+ { I2C_BOARD_INFO("adt7473", 0x2d) },
|
|
|
|
+ { I2C_BOARD_INFO("adt7473", 0x2c) },
|
|
{ I2C_BOARD_INFO("f75375", 0x2e) },
|
|
{ I2C_BOARD_INFO("f75375", 0x2e) },
|
|
{ I2C_BOARD_INFO("lm99", 0x4c) },
|
|
{ I2C_BOARD_INFO("lm99", 0x4c) },
|
|
|
|
+ { I2C_BOARD_INFO("lm90", 0x4c) },
|
|
|
|
+ { I2C_BOARD_INFO("lm90", 0x4d) },
|
|
|
|
+ { I2C_BOARD_INFO("adm1021", 0x18) },
|
|
|
|
+ { I2C_BOARD_INFO("adm1021", 0x19) },
|
|
|
|
+ { I2C_BOARD_INFO("adm1021", 0x1a) },
|
|
|
|
+ { I2C_BOARD_INFO("adm1021", 0x29) },
|
|
|
|
+ { I2C_BOARD_INFO("adm1021", 0x2a) },
|
|
|
|
+ { I2C_BOARD_INFO("adm1021", 0x2b) },
|
|
|
|
+ { I2C_BOARD_INFO("adm1021", 0x4c) },
|
|
|
|
+ { I2C_BOARD_INFO("adm1021", 0x4d) },
|
|
|
|
+ { I2C_BOARD_INFO("adm1021", 0x4e) },
|
|
|
|
+ { I2C_BOARD_INFO("lm63", 0x18) },
|
|
|
|
+ { I2C_BOARD_INFO("lm63", 0x4e) },
|
|
{ }
|
|
{ }
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ if (!nvbios_extdev_find(bios, NVBIOS_EXTDEV_LM89, &extdev_entry)) {
|
|
|
|
+ struct i2c_board_info board[] = {
|
|
|
|
+ { I2C_BOARD_INFO("lm90", extdev_entry.addr >> 1) },
|
|
|
|
+ { }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ if (i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device",
|
|
|
|
+ board, probe_monitoring_device))
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!nvbios_extdev_find(bios, NVBIOS_EXTDEV_ADT7473, &extdev_entry)) {
|
|
|
|
+ struct i2c_board_info board[] = {
|
|
|
|
+ { I2C_BOARD_INFO("adt7473", extdev_entry.addr >> 1) },
|
|
|
|
+ { }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ if (i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device",
|
|
|
|
+ board, probe_monitoring_device))
|
|
|
|
+ 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", info,
|
|
i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device", info,
|
|
probe_monitoring_device);
|
|
probe_monitoring_device);
|
|
}
|
|
}
|