Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 703a8c2d authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge branch 'drm-nouveau-next' of git://git.freedesktop.org/git/nouveau/linux-2.6 into drm-fixes

Single regression fix for nouveau

* 'drm-nouveau-next' of git://git.freedesktop.org/git/nouveau/linux-2.6:
  drm/nouveau: fix null ptr dereferences on some boards
parents abce1ec9 fdd239ac
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ struct nouveau_i2c {
	int (*identify)(struct nouveau_i2c *, int index,
			const char *what, struct nouveau_i2c_board_info *,
			bool (*match)(struct nouveau_i2c_port *,
				      struct i2c_board_info *));
				      struct i2c_board_info *, void *), void *);
	struct list_head ports;
};

+7 −0
Original line number Diff line number Diff line
@@ -50,6 +50,13 @@ struct nouveau_instmem {
static inline struct nouveau_instmem *
nouveau_instmem(void *obj)
{
	/* nv04/nv40 impls need to create objects in their constructor,
	 * which is before the subdev pointer is valid
	 */
	if (nv_iclass(obj, NV_SUBDEV_CLASS) &&
	    nv_subidx(obj) == NVDEV_SUBDEV_INSTMEM)
		return obj;

	return (void *)nv_device(obj)->subdev[NVDEV_SUBDEV_INSTMEM];
}

+2 −2
Original line number Diff line number Diff line
@@ -197,7 +197,7 @@ static int
nouveau_i2c_identify(struct nouveau_i2c *i2c, int index, const char *what,
		     struct nouveau_i2c_board_info *info,
		     bool (*match)(struct nouveau_i2c_port *,
				   struct i2c_board_info *))
				   struct i2c_board_info *, void *), void *data)
{
	struct nouveau_i2c_port *port = nouveau_i2c_find(i2c, index);
	int i;
@@ -221,7 +221,7 @@ nouveau_i2c_identify(struct nouveau_i2c *i2c, int index, const char *what,
		}

		if (nv_probe_i2c(port, info[i].dev.addr) &&
		    (!match || match(port, &info[i].dev))) {
		    (!match || match(port, &info[i].dev, data))) {
			nv_info(i2c, "detected %s: %s\n", what,
				info[i].dev.type);
			return i;
+5 −5
Original line number Diff line number Diff line
@@ -29,9 +29,9 @@

static bool
probe_monitoring_device(struct nouveau_i2c_port *i2c,
			struct i2c_board_info *info)
			struct i2c_board_info *info, void *data)
{
	struct nouveau_therm_priv *priv = (void *)nouveau_therm(i2c);
	struct nouveau_therm_priv *priv = data;
	struct nvbios_therm_sensor *sensor = &priv->bios_sensor;
	struct i2c_client *client;

@@ -96,7 +96,7 @@ nouveau_therm_ic_ctor(struct nouveau_therm *therm)
		};

		i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device",
				  board, probe_monitoring_device);
			      board, probe_monitoring_device, therm);
		if (priv->ic)
			return;
	}
@@ -108,7 +108,7 @@ nouveau_therm_ic_ctor(struct nouveau_therm *therm)
		};

		i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device",
				  board, probe_monitoring_device);
			      board, probe_monitoring_device, therm);
		if (priv->ic)
			return;
	}
@@ -117,5 +117,5 @@ nouveau_therm_ic_ctor(struct nouveau_therm *therm)
	   device. Let's try our static list.
	 */
	i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device",
		      nv_board_infos, probe_monitoring_device);
		      nv_board_infos, probe_monitoring_device, therm);
}
+1 −1
Original line number Diff line number Diff line
@@ -643,7 +643,7 @@ static void nv04_tmds_slave_init(struct drm_encoder *encoder)
	    get_tmds_slave(encoder))
		return;

	type = i2c->identify(i2c, 2, "TMDS transmitter", info, NULL);
	type = i2c->identify(i2c, 2, "TMDS transmitter", info, NULL, NULL);
	if (type < 0)
		return;

Loading