Commit b1a7d0dd authored by Patrik Jakobsson's avatar Patrik Jakobsson
Browse files

drm/gma500: Make use of the drm connector iterator

parent 3e712b3c
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -262,6 +262,7 @@ static int cdv_save_display_registers(struct drm_device *dev)
	struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
	struct pci_dev *pdev = to_pci_dev(dev->dev);
	struct psb_save_area *regs = &dev_priv->regs;
	struct drm_connector_list_iter conn_iter;
	struct drm_connector *connector;

	dev_dbg(dev->dev, "Saving GPU registers.\n");
@@ -298,8 +299,10 @@ static int cdv_save_display_registers(struct drm_device *dev)
	regs->cdv.saveIER = REG_READ(PSB_INT_ENABLE_R);
	regs->cdv.saveIMR = REG_READ(PSB_INT_MASK_R);

	list_for_each_entry(connector, &dev->mode_config.connector_list, head)
	drm_connector_list_iter_begin(dev, &conn_iter);
	drm_for_each_connector_iter(connector, &conn_iter)
		connector->funcs->dpms(connector, DRM_MODE_DPMS_OFF);
	drm_connector_list_iter_end(&conn_iter);

	return 0;
}
@@ -317,6 +320,7 @@ static int cdv_restore_display_registers(struct drm_device *dev)
	struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
	struct pci_dev *pdev = to_pci_dev(dev->dev);
	struct psb_save_area *regs = &dev_priv->regs;
	struct drm_connector_list_iter conn_iter;
	struct drm_connector *connector;
	u32 temp;

@@ -373,8 +377,10 @@ static int cdv_restore_display_registers(struct drm_device *dev)

	drm_mode_config_reset(dev);

	list_for_each_entry(connector, &dev->mode_config.connector_list, head)
	drm_connector_list_iter_begin(dev, &conn_iter);
	drm_for_each_connector_iter(connector, &conn_iter)
		connector->funcs->dpms(connector, DRM_MODE_DPMS_ON);
	drm_connector_list_iter_end(&conn_iter);

	/* Resume the modeset for every activated CRTC */
	drm_helper_resume_force_mode(dev);
+7 −2
Original line number Diff line number Diff line
@@ -584,13 +584,14 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
	bool ok;
	bool is_lvds = false;
	bool is_dp = false;
	struct drm_mode_config *mode_config = &dev->mode_config;
	struct drm_connector_list_iter conn_iter;
	struct drm_connector *connector;
	const struct gma_limit_t *limit;
	u32 ddi_select = 0;
	bool is_edp = false;

	list_for_each_entry(connector, &mode_config->connector_list, head) {
	drm_connector_list_iter_begin(dev, &conn_iter);
	drm_for_each_connector_iter(connector, &conn_iter) {
		struct gma_encoder *gma_encoder =
					gma_attached_encoder(connector);

@@ -613,10 +614,14 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
			is_edp = true;
			break;
		default:
			drm_connector_list_iter_end(&conn_iter);
			DRM_ERROR("invalid output type.\n");
			return 0;
		}

		break;
	}
	drm_connector_list_iter_end(&conn_iter);

	if (dev_priv->dplla_96mhz)
		/* low-end sku, 96/100 mhz */
+4 −2
Original line number Diff line number Diff line
@@ -451,6 +451,7 @@ static const struct drm_mode_config_funcs psb_mode_funcs = {
static void psb_setup_outputs(struct drm_device *dev)
{
	struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
	struct drm_connector_list_iter conn_iter;
	struct drm_connector *connector;

	drm_mode_create_scaling_mode_property(dev);
@@ -461,8 +462,8 @@ static void psb_setup_outputs(struct drm_device *dev)
							"backlight", 0, 100);
	dev_priv->ops->output_init(dev);

	list_for_each_entry(connector, &dev->mode_config.connector_list,
			    head) {
	drm_connector_list_iter_begin(dev, &conn_iter);
	drm_for_each_connector_iter(connector, &conn_iter) {
		struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
		struct drm_encoder *encoder = &gma_encoder->base;
		int crtc_mask = 0, clone_mask = 0;
@@ -505,6 +506,7 @@ static void psb_setup_outputs(struct drm_device *dev)
		encoder->possible_clones =
		    gma_connector_clones(dev, clone_mask);
	}
	drm_connector_list_iter_end(&conn_iter);
}

void psb_modeset_init(struct drm_device *dev)
+10 −6
Original line number Diff line number Diff line
@@ -27,17 +27,21 @@
bool gma_pipe_has_type(struct drm_crtc *crtc, int type)
{
	struct drm_device *dev = crtc->dev;
	struct drm_mode_config *mode_config = &dev->mode_config;
	struct drm_connector *l_entry;
	struct drm_connector_list_iter conn_iter;
	struct drm_connector *connector;

	list_for_each_entry(l_entry, &mode_config->connector_list, head) {
		if (l_entry->encoder && l_entry->encoder->crtc == crtc) {
	drm_connector_list_iter_begin(dev, &conn_iter);
	drm_for_each_connector_iter(connector, &conn_iter) {
		if (connector->encoder && connector->encoder->crtc == crtc) {
			struct gma_encoder *gma_encoder =
						gma_attached_encoder(l_entry);
			if (gma_encoder->type == type)
						gma_attached_encoder(connector);
			if (gma_encoder->type == type) {
				drm_connector_list_iter_end(&conn_iter);
				return true;
			}
		}
	}
	drm_connector_list_iter_end(&conn_iter);

	return false;
}
+11 −6
Original line number Diff line number Diff line
@@ -372,9 +372,9 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
	bool ok, is_sdvo = false;
	bool is_lvds = false;
	bool is_mipi = false;
	struct drm_mode_config *mode_config = &dev->mode_config;
	struct gma_encoder *gma_encoder = NULL;
	uint64_t scalingType = DRM_MODE_SCALE_FULLSCREEN;
	struct drm_connector_list_iter conn_iter;
	struct drm_connector *connector;
	int i;
	int need_aux = gma_pipe_has_type(crtc, INTEL_OUTPUT_SDVO) ? 1 : 0;
@@ -388,7 +388,8 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
	drm_mode_copy(&gma_crtc->saved_mode, mode);
	drm_mode_copy(&gma_crtc->saved_adjusted_mode, adjusted_mode);

	list_for_each_entry(connector, &mode_config->connector_list, head) {
	drm_connector_list_iter_begin(dev, &conn_iter);
	drm_for_each_connector_iter(connector, &conn_iter) {
		if (!connector->encoder || connector->encoder->crtc != crtc)
			continue;

@@ -405,8 +406,16 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
			is_mipi = true;
			break;
		}

		break;
	}

	if (gma_encoder)
		drm_object_property_get_value(&connector->base,
			dev->mode_config.scaling_mode_property, &scalingType);

	drm_connector_list_iter_end(&conn_iter);

	/* Disable the VGA plane that we never use */
	for (i = 0; i <= need_aux; i++)
		REG_WRITE_WITH_AUX(VGACNTRL, VGA_DISP_DISABLE, i);
@@ -420,10 +429,6 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
					     (mode->crtc_vdisplay - 1), i);
	}

	if (gma_encoder)
		drm_object_property_get_value(&connector->base,
			dev->mode_config.scaling_mode_property, &scalingType);

	if (scalingType == DRM_MODE_SCALE_NO_SCALE) {
		/* Moorestown doesn't have register support for centering so
		 * we need to mess with the h/vblank and h/vsync start and
Loading