예제 #1
1
static int create_writeback_properties(struct drm_device *dev)
{
	struct drm_property *prop;

	if (!dev->mode_config.writeback_fb_id_property) {
		prop = drm_property_create_object(dev, DRM_MODE_PROP_ATOMIC,
						  "WRITEBACK_FB_ID",
						  DRM_MODE_OBJECT_FB);
		if (!prop)
			return -ENOMEM;
		dev->mode_config.writeback_fb_id_property = prop;
	}

	if (!dev->mode_config.writeback_pixel_formats_property) {
		prop = drm_property_create(dev, DRM_MODE_PROP_BLOB |
					   DRM_MODE_PROP_ATOMIC |
					   DRM_MODE_PROP_IMMUTABLE,
					   "WRITEBACK_PIXEL_FORMATS", 0);
		if (!prop)
			return -ENOMEM;
		dev->mode_config.writeback_pixel_formats_property = prop;
	}

	if (!dev->mode_config.writeback_out_fence_ptr_property) {
		prop = drm_property_create_range(dev, DRM_MODE_PROP_ATOMIC,
						 "WRITEBACK_OUT_FENCE_PTR", 0,
						 U64_MAX);
		if (!prop)
			return -ENOMEM;
		dev->mode_config.writeback_out_fence_ptr_property = prop;
	}

	return 0;
}
예제 #2
0
/* attach crtc properties */
static void xilinx_drm_crtc_attach_property(struct drm_crtc *base_crtc)
{
	struct xilinx_drm_crtc *crtc = to_xilinx_crtc(base_crtc);
	int num_planes;

	num_planes = xilinx_drm_plane_get_num_planes(crtc->plane_manager);
	if (num_planes <= 1)
		return;

	crtc->zpos_prop = drm_property_create_range(base_crtc->dev, 0, "zpos",
						    0, num_planes - 1);
	if (crtc->zpos_prop) {
		crtc->default_zpos =
			xilinx_drm_plane_get_default_zpos(crtc->priv_plane);
		drm_object_attach_property(&base_crtc->base, crtc->zpos_prop,
					   crtc->default_zpos);
		xilinx_drm_plane_set_zpos(crtc->priv_plane, crtc->default_zpos);
	}

	crtc->default_alpha = xilinx_drm_plane_get_max_alpha(crtc->priv_plane);
	crtc->alpha_prop = drm_property_create_range(base_crtc->dev, 0,
						      "alpha", 0,
						      crtc->default_alpha);
	if (crtc->alpha_prop) {
		drm_object_attach_property(&base_crtc->base, crtc->alpha_prop,
					   crtc->default_alpha);
		xilinx_drm_plane_set_alpha(crtc->priv_plane,
					   crtc->default_alpha);
	}
}
예제 #3
0
/* create plane properties */
static void
xilinx_drm_plane_create_property(struct xilinx_drm_plane_manager *manager)
{
	if (!manager->osd)
		return;

	manager->zpos_prop = drm_property_create_range(manager->drm, 0,
						       "zpos", 0,
						       manager->num_planes - 1);

	manager->alpha_prop = drm_property_create_range(manager->drm, 0,
							"alpha", 0,
							manager->default_alpha);
}
예제 #4
0
/* create plane properties */
static void
xilinx_drm_plane_create_property(struct xilinx_drm_plane_manager *manager)
{
	if (manager->osd)
		manager->zpos_prop = drm_property_create_range(manager->drm, 0,
				"zpos", 0, manager->num_planes - 1);

	if (manager->osd || manager->dp_sub) {
		manager->alpha_prop = drm_property_create_range(manager->drm, 0,
				"alpha", 0, manager->default_alpha);
		manager->alpha_enable_prop =
			drm_property_create_bool(manager->drm, 0,
						 "global alpha enable");
	}
}
static int ch7006_encoder_create_resources(struct drm_encoder *encoder,
					   struct drm_connector *connector)
{
	struct ch7006_priv *priv = to_ch7006_priv(encoder);
	struct drm_device *dev = encoder->dev;
	struct drm_mode_config *conf = &dev->mode_config;

	drm_mode_create_tv_properties(dev, NUM_TV_NORMS, ch7006_tv_norm_names);

	priv->scale_property = drm_property_create_range(dev, 0, "scale", 0, 2);

	drm_connector_attach_property(connector, conf->tv_select_subconnector_property,
				      priv->select_subconnector);
	drm_connector_attach_property(connector, conf->tv_subconnector_property,
				      priv->subconnector);
	drm_connector_attach_property(connector, conf->tv_left_margin_property,
				      priv->hmargin);
	drm_connector_attach_property(connector, conf->tv_bottom_margin_property,
				      priv->vmargin);
	drm_connector_attach_property(connector, conf->tv_mode_property,
				      priv->norm);
	drm_connector_attach_property(connector, conf->tv_brightness_property,
				      priv->brightness);
	drm_connector_attach_property(connector, conf->tv_contrast_property,
				      priv->contrast);
	drm_connector_attach_property(connector, conf->tv_flicker_reduction_property,
				      priv->flicker);
	drm_connector_attach_property(connector, priv->scale_property,
				      priv->scale);

	return 0;
}
예제 #6
0
static int qxl_mode_create_hotplug_mode_update_property(struct qxl_device *qdev)
{
	if (qdev->hotplug_mode_update_property)
		return 0;

	qdev->hotplug_mode_update_property =
		drm_property_create_range(qdev->ddev, DRM_MODE_PROP_IMMUTABLE,
					  "hotplug_mode_update", 0, 1);

	return 0;
}
예제 #7
0
static int omap_modeset_init_properties(struct drm_device *dev)
{
	struct omap_drm_private *priv = dev->dev_private;
	unsigned int num_planes = priv->dispc_ops->get_num_ovls();

	priv->zorder_prop = drm_property_create_range(dev, 0, "zorder", 0,
						      num_planes - 1);
	if (!priv->zorder_prop)
		return -ENOMEM;

	return 0;
}
void
intel_attach_panel_gamma_property(struct drm_connector *connector)
{
	struct drm_device *dev = connector->dev;
	struct drm_i915_private *dev_priv = dev->dev_private;
	struct drm_property *prop;

	prop = dev_priv->panel_gamma_property;
	if (prop == NULL) {
		prop = drm_property_create_range(dev, 0,
					"Panel gamma",
					100,
					550);

		if (prop == NULL)
			return;

		dev_priv->panel_gamma_property = prop;
	}
	drm_object_attach_property(&connector->base, prop, 100);
}
예제 #9
0
/* helper to install properties which are common to planes and crtcs */
void omap_plane_install_properties(struct drm_plane *plane,
		struct drm_mode_object *obj)
{
	struct drm_device *dev = plane->dev;
	struct omap_drm_private *priv = dev->dev_private;
	struct drm_property *prop;

	if (priv->has_dmm) {
		prop = priv->rotation_prop;
		if (!prop) {
			const struct drm_prop_enum_list props[] = {
					{ DRM_ROTATE_0,   "rotate-0" },
					{ DRM_ROTATE_90,  "rotate-90" },
					{ DRM_ROTATE_180, "rotate-180" },
					{ DRM_ROTATE_270, "rotate-270" },
					{ DRM_REFLECT_X,  "reflect-x" },
					{ DRM_REFLECT_Y,  "reflect-y" },
			};
			prop = drm_property_create_bitmask(dev, 0, "rotation",
					props, ARRAY_SIZE(props));
			if (prop == NULL)
				return;
			priv->rotation_prop = prop;
		}
		drm_object_attach_property(obj, prop, 0);
	}

	prop = priv->zorder_prop;
	if (!prop) {
		prop = drm_property_create_range(dev, 0, "zorder", 0, 3);
		if (prop == NULL)
			return;
		priv->zorder_prop = prop;
	}
	drm_object_attach_property(obj, prop, 0);
}