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

Commit ab1e9ea0 authored by Alex Deucher's avatar Alex Deucher Committed by Dave Airlie
Browse files

drm/radeon/kms: dont't pass a radeon_connector to radeon_i2c_do_lock()



We need this for supporting things other than ddc on i2c.

Signed-off-by: default avatarAlex Deucher <alexdeucher@gmail.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 21278163
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -445,10 +445,10 @@ static enum drm_connector_status radeon_lvds_detect(struct drm_connector *connec
		ret = connector_status_connected;
	else {
		if (radeon_connector->ddc_bus) {
			radeon_i2c_do_lock(radeon_connector, 1);
			radeon_i2c_do_lock(radeon_connector->ddc_bus, 1);
			radeon_connector->edid = drm_get_edid(&radeon_connector->base,
							      &radeon_connector->ddc_bus->adapter);
			radeon_i2c_do_lock(radeon_connector, 0);
			radeon_i2c_do_lock(radeon_connector->ddc_bus, 0);
			if (radeon_connector->edid)
				ret = connector_status_connected;
		}
@@ -553,17 +553,17 @@ static enum drm_connector_status radeon_vga_detect(struct drm_connector *connect
	if (!encoder)
		ret = connector_status_disconnected;

	radeon_i2c_do_lock(radeon_connector, 1);
	radeon_i2c_do_lock(radeon_connector->ddc_bus, 1);
	dret = radeon_ddc_probe(radeon_connector);
	radeon_i2c_do_lock(radeon_connector, 0);
	radeon_i2c_do_lock(radeon_connector->ddc_bus, 0);
	if (dret) {
		if (radeon_connector->edid) {
			kfree(radeon_connector->edid);
			radeon_connector->edid = NULL;
		}
		radeon_i2c_do_lock(radeon_connector, 1);
		radeon_i2c_do_lock(radeon_connector->ddc_bus, 1);
		radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
		radeon_i2c_do_lock(radeon_connector, 0);
		radeon_i2c_do_lock(radeon_connector->ddc_bus, 0);

		if (!radeon_connector->edid) {
			DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
@@ -708,17 +708,17 @@ static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connect
	enum drm_connector_status ret = connector_status_disconnected;
	bool dret;

	radeon_i2c_do_lock(radeon_connector, 1);
	radeon_i2c_do_lock(radeon_connector->ddc_bus, 1);
	dret = radeon_ddc_probe(radeon_connector);
	radeon_i2c_do_lock(radeon_connector, 0);
	radeon_i2c_do_lock(radeon_connector->ddc_bus, 0);
	if (dret) {
		if (radeon_connector->edid) {
			kfree(radeon_connector->edid);
			radeon_connector->edid = NULL;
		}
		radeon_i2c_do_lock(radeon_connector, 1);
		radeon_i2c_do_lock(radeon_connector->ddc_bus, 1);
		radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
		radeon_i2c_do_lock(radeon_connector, 0);
		radeon_i2c_do_lock(radeon_connector->ddc_bus, 0);

		if (!radeon_connector->edid) {
			DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
+4 −4
Original line number Diff line number Diff line
@@ -339,9 +339,9 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
	if (!radeon_connector->ddc_bus)
		return -1;
	if (!radeon_connector->edid) {
		radeon_i2c_do_lock(radeon_connector, 1);
		radeon_i2c_do_lock(radeon_connector->ddc_bus, 1);
		radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
		radeon_i2c_do_lock(radeon_connector, 0);
		radeon_i2c_do_lock(radeon_connector->ddc_bus, 0);
	}

	if (radeon_connector->edid) {
@@ -361,9 +361,9 @@ static int radeon_ddc_dump(struct drm_connector *connector)

	if (!radeon_connector->ddc_bus)
		return -1;
	radeon_i2c_do_lock(radeon_connector, 1);
	radeon_i2c_do_lock(radeon_connector->ddc_bus, 1);
	edid = drm_get_edid(connector, &radeon_connector->ddc_bus->adapter);
	radeon_i2c_do_lock(radeon_connector, 0);
	radeon_i2c_do_lock(radeon_connector->ddc_bus, 0);
	if (edid) {
		kfree(edid);
	}
+5 −5
Original line number Diff line number Diff line
@@ -59,11 +59,11 @@ bool radeon_ddc_probe(struct radeon_connector *radeon_connector)
}


void radeon_i2c_do_lock(struct radeon_connector *radeon_connector, int lock_state)
void radeon_i2c_do_lock(struct radeon_i2c_chan *i2c, int lock_state)
{
	struct radeon_device *rdev = radeon_connector->base.dev->dev_private;
	struct radeon_device *rdev = i2c->dev->dev_private;
	struct radeon_i2c_bus_rec *rec = &i2c->rec;
	uint32_t temp;
	struct radeon_i2c_bus_rec *rec = &radeon_connector->ddc_bus->rec;

	/* RV410 appears to have a bug where the hw i2c in reset
	 * holds the i2c port in a bad state - switch hw i2c away before
+1 −1
Original line number Diff line number Diff line
@@ -426,7 +426,7 @@ void radeon_atombios_init_crtc(struct drm_device *dev,
			       struct radeon_crtc *radeon_crtc);
void radeon_legacy_init_crtc(struct drm_device *dev,
			     struct radeon_crtc *radeon_crtc);
void radeon_i2c_do_lock(struct radeon_connector *radeon_connector, int lock_state);
extern void radeon_i2c_do_lock(struct radeon_i2c_chan *i2c, int lock_state);

void radeon_get_clock_info(struct drm_device *dev);