示例#1
0
static int rcar_du_hdmi_connector_get_modes(struct drm_connector *connector)
{
	struct rcar_du_connector *con = to_rcar_connector(connector);
	struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder);
	struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);

	if (sfuncs->get_modes == NULL)
		return 0;

	return sfuncs->get_modes(encoder, connector);
}
示例#2
0
static enum drm_connector_status
rcar_du_hdmi_connector_detect(struct drm_connector *connector, bool force)
{
	struct rcar_du_connector *con = to_rcar_connector(connector);
	struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder);
	struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);

	if (sfuncs->detect == NULL)
		return connector_status_unknown;

	return sfuncs->detect(encoder, connector);
}
示例#3
0
static int rcar_du_hdmi_connector_mode_valid(struct drm_connector *connector,
					     struct drm_display_mode *mode)
{
	struct rcar_du_connector *con = to_rcar_connector(connector);
	struct drm_encoder *encoder = rcar_encoder_to_drm_encoder(con->encoder);
	struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder);

	if (sfuncs->mode_valid == NULL)
		return MODE_OK;

	return sfuncs->mode_valid(encoder, mode);
}
示例#4
0
static int rcar_du_hdmi_connector_mode_valid(struct drm_connector *connector,
					    struct drm_display_mode *mode)
{
	struct rcar_du_connector *rcon = to_rcar_connector(connector);
	unsigned int max_width, max_height;
	bool laced;

	max_width = rcon->encoder->dev->info->max_xres;
	max_height = rcon->encoder->dev->info->max_yres;
	laced = rcon->encoder->dev->info->interlace;

	if (mode->clock > 165000)
		return MODE_CLOCK_HIGH;

	if ((mode->hdisplay * mode->vdisplay) > (max_width * max_height))
		return MODE_BAD_WIDTH;

	if (((mode->hdisplay * mode->vdisplay) == (max_width * max_height))
		&& (laced) && (!(mode->flags & DRM_MODE_FLAG_INTERLACE)))
		return MODE_BAD;

	return MODE_OK;
}