Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1178 → Rev 1179

/drivers/video/drm/drm_crtc.c
29,7 → 29,7
* Dave Airlie <airlied@linux.ie>
* Jesse Barnes <jesse.barnes@intel.com>
*/
#include <list.h>
#include <linux/list.h>
#include "drm.h"
#include "drmP.h"
#include "drm_crtc.h"
68,10 → 68,10
*/
static struct drm_prop_enum_list drm_scaling_mode_enum_list[] =
{
{ DRM_MODE_SCALE_NON_GPU, "Non-GPU" },
{ DRM_MODE_SCALE_FULLSCREEN, "Fullscreen" },
{ DRM_MODE_SCALE_NO_SCALE, "No scale" },
{ DRM_MODE_SCALE_ASPECT, "Aspect" },
{ DRM_MODE_SCALE_NONE, "None" },
{ DRM_MODE_SCALE_FULLSCREEN, "Full" },
{ DRM_MODE_SCALE_CENTER, "Center" },
{ DRM_MODE_SCALE_ASPECT, "Full aspect" },
};
 
static struct drm_prop_enum_list drm_dithering_mode_enum_list[] =
108,6 → 108,7
{ DRM_MODE_SUBCONNECTOR_Composite, "Composite" }, /* TV-out */
{ DRM_MODE_SUBCONNECTOR_SVIDEO, "SVIDEO" }, /* TV-out */
{ DRM_MODE_SUBCONNECTOR_Component, "Component" }, /* TV-out */
{ DRM_MODE_SUBCONNECTOR_SCART, "SCART" }, /* TV-out */
};
 
DRM_ENUM_NAME_FN(drm_get_tv_select_name, drm_tv_select_enum_list)
118,6 → 119,7
{ DRM_MODE_SUBCONNECTOR_Composite, "Composite" }, /* TV-out */
{ DRM_MODE_SUBCONNECTOR_SVIDEO, "SVIDEO" }, /* TV-out */
{ DRM_MODE_SUBCONNECTOR_Component, "Component" }, /* TV-out */
{ DRM_MODE_SUBCONNECTOR_SCART, "SCART" }, /* TV-out */
};
 
DRM_ENUM_NAME_FN(drm_get_tv_subconnector_name,
146,6 → 148,7
{ DRM_MODE_CONNECTOR_DisplayPort, "DisplayPort", 0 },
{ DRM_MODE_CONNECTOR_HDMIA, "HDMI Type A", 0 },
{ DRM_MODE_CONNECTOR_HDMIB, "HDMI Type B", 0 },
{ DRM_MODE_CONNECTOR_TV, "TV", 0 },
};
 
static struct drm_prop_enum_list drm_encoder_enum_list[] =
165,6 → 168,7
encoder->base.id);
return buf;
}
EXPORT_SYMBOL(drm_get_encoder_name);
 
char *drm_get_connector_name(struct drm_connector *connector)
{
214,15 → 218,14
return -EINVAL;
}
 
// mutex_lock(&dev->mode_config.idr_mutex);
mutex_lock(&dev->mode_config.idr_mutex);
ret = idr_get_new_above(&dev->mode_config.crtc_idr, obj, 1, &new_id);
// mutex_unlock(&dev->mode_config.idr_mutex);
mutex_unlock(&dev->mode_config.idr_mutex);
if (ret == -EAGAIN)
goto again;
 
obj->id = new_id;
obj->type = obj_type;
 
return 0;
}
 
239,9 → 242,9
static void drm_mode_object_put(struct drm_device *dev,
struct drm_mode_object *object)
{
// mutex_lock(&dev->mode_config.idr_mutex);
mutex_lock(&dev->mode_config.idr_mutex);
idr_remove(&dev->mode_config.crtc_idr, object->id);
// mutex_unlock(&dev->mode_config.idr_mutex);
mutex_unlock(&dev->mode_config.idr_mutex);
}
 
void *drm_mode_object_find(struct drm_device *dev, uint32_t id, uint32_t type)
248,43 → 251,17
{
struct drm_mode_object *obj = NULL;
 
// mutex_lock(&dev->mode_config.idr_mutex);
mutex_lock(&dev->mode_config.idr_mutex);
obj = idr_find(&dev->mode_config.crtc_idr, id);
if (!obj || (obj->type != type) || (obj->id != id))
obj = NULL;
// mutex_unlock(&dev->mode_config.idr_mutex);
mutex_unlock(&dev->mode_config.idr_mutex);
 
return obj;
}
EXPORT_SYMBOL(drm_mode_object_find);
 
 
/**
* drm_crtc_from_fb - find the CRTC structure associated with an fb
* @dev: DRM device
* @fb: framebuffer in question
*
* LOCKING:
* Caller must hold mode_config lock.
*
* Find CRTC in the mode_config structure that matches @fb.
*
* RETURNS:
* Pointer to the CRTC or NULL if it wasn't found.
*/
struct drm_crtc *drm_crtc_from_fb(struct drm_device *dev,
struct drm_framebuffer *fb)
{
struct drm_crtc *crtc;
 
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
if (crtc->fb == fb)
return crtc;
}
return NULL;
}
 
/**
* drm_framebuffer_init - initialize a framebuffer
* @dev: DRM device
*
330,12 → 307,21
{
struct drm_device *dev = fb->dev;
struct drm_crtc *crtc;
struct drm_mode_set set;
int ret;
 
/* remove from any CRTC */
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
if (crtc->fb == fb)
crtc->fb = NULL;
if (crtc->fb == fb) {
/* should turn off the crtc */
memset(&set, 0, sizeof(struct drm_mode_set));
set.crtc = crtc;
set.fb = NULL;
ret = crtc->funcs->set_config(&set);
if (ret)
DRM_ERROR("failed to reset crtc %p when fb was deleted\n", crtc);
}
}
 
drm_mode_object_put(dev, &fb->base);
list_del(&fb->head);
343,7 → 329,6
}
EXPORT_SYMBOL(drm_framebuffer_cleanup);
 
 
/**
* drm_crtc_init - Initialise a new CRTC object
* @dev: DRM device
358,20 → 343,15
void drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
const struct drm_crtc_funcs *funcs)
{
ENTRY();
 
crtc->dev = dev;
crtc->funcs = funcs;
 
// mutex_lock(&dev->mode_config.mutex);
mutex_lock(&dev->mode_config.mutex);
drm_mode_object_get(dev, &crtc->base, DRM_MODE_OBJECT_CRTC);
 
list_add_tail(&crtc->head, &dev->mode_config.crtc_list);
dev->mode_config.num_crtc++;
 
// mutex_unlock(&dev->mode_config.mutex);
 
LEAVE();
mutex_unlock(&dev->mode_config.mutex);
}
EXPORT_SYMBOL(drm_crtc_init);
 
453,7 → 433,7
const struct drm_connector_funcs *funcs,
int connector_type)
{
// mutex_lock(&dev->mode_config.mutex);
mutex_lock(&dev->mode_config.mutex);
 
connector->dev = dev;
connector->funcs = funcs;
475,7 → 455,7
drm_connector_attach_property(connector,
dev->mode_config.dpms_property, 0);
 
// mutex_unlock(&dev->mode_config.mutex);
mutex_unlock(&dev->mode_config.mutex);
}
EXPORT_SYMBOL(drm_connector_init);
 
502,10 → 482,10
list_for_each_entry_safe(mode, t, &connector->user_modes, head)
drm_mode_remove(connector, mode);
 
// mutex_lock(&dev->mode_config.mutex);
mutex_lock(&dev->mode_config.mutex);
drm_mode_object_put(dev, &connector->base);
list_del(&connector->head);
// mutex_unlock(&dev->mode_config.mutex);
mutex_unlock(&dev->mode_config.mutex);
}
EXPORT_SYMBOL(drm_connector_cleanup);
 
514,7 → 494,7
const struct drm_encoder_funcs *funcs,
int encoder_type)
{
// mutex_lock(&dev->mode_config.mutex);
mutex_lock(&dev->mode_config.mutex);
 
encoder->dev = dev;
 
525,7 → 505,7
list_add_tail(&encoder->head, &dev->mode_config.encoder_list);
dev->mode_config.num_encoder++;
 
// mutex_unlock(&dev->mode_config.mutex);
mutex_unlock(&dev->mode_config.mutex);
}
EXPORT_SYMBOL(drm_encoder_init);
 
532,10 → 512,10
void drm_encoder_cleanup(struct drm_encoder *encoder)
{
struct drm_device *dev = encoder->dev;
// mutex_lock(&dev->mode_config.mutex);
mutex_lock(&dev->mode_config.mutex);
drm_mode_object_put(dev, &encoder->base);
list_del(&encoder->head);
// mutex_unlock(&dev->mode_config.mutex);
mutex_unlock(&dev->mode_config.mutex);
}
EXPORT_SYMBOL(drm_encoder_cleanup);
 
588,7 → 568,6
struct drm_property *dpms;
int i;
 
ENTRY();
/*
* Standard properties (apply to all connectors)
*/
604,7 → 583,6
drm_dpms_enum_list[i].name);
dev->mode_config.dpms_property = dpms;
 
LEAVE();
return 0;
}
 
725,6 → 703,42
drm_property_add_enum(dev->mode_config.tv_mode_property, i,
i, modes[i]);
 
dev->mode_config.tv_brightness_property =
drm_property_create(dev, DRM_MODE_PROP_RANGE,
"brightness", 2);
dev->mode_config.tv_brightness_property->values[0] = 0;
dev->mode_config.tv_brightness_property->values[1] = 100;
 
dev->mode_config.tv_contrast_property =
drm_property_create(dev, DRM_MODE_PROP_RANGE,
"contrast", 2);
dev->mode_config.tv_contrast_property->values[0] = 0;
dev->mode_config.tv_contrast_property->values[1] = 100;
 
dev->mode_config.tv_flicker_reduction_property =
drm_property_create(dev, DRM_MODE_PROP_RANGE,
"flicker reduction", 2);
dev->mode_config.tv_flicker_reduction_property->values[0] = 0;
dev->mode_config.tv_flicker_reduction_property->values[1] = 100;
 
dev->mode_config.tv_overscan_property =
drm_property_create(dev, DRM_MODE_PROP_RANGE,
"overscan", 2);
dev->mode_config.tv_overscan_property->values[0] = 0;
dev->mode_config.tv_overscan_property->values[1] = 100;
 
dev->mode_config.tv_saturation_property =
drm_property_create(dev, DRM_MODE_PROP_RANGE,
"saturation", 2);
dev->mode_config.tv_saturation_property->values[0] = 0;
dev->mode_config.tv_saturation_property->values[1] = 100;
 
dev->mode_config.tv_hue_property =
drm_property_create(dev, DRM_MODE_PROP_RANGE,
"hue", 2);
dev->mode_config.tv_hue_property->values[0] = 0;
dev->mode_config.tv_hue_property->values[1] = 100;
 
return 0;
}
EXPORT_SYMBOL(drm_mode_create_tv_properties);
798,8 → 812,6
*/
void drm_mode_config_init(struct drm_device *dev)
{
ENTRY();
 
// mutex_init(&dev->mode_config.mutex);
// mutex_init(&dev->mode_config.idr_mutex);
INIT_LIST_HEAD(&dev->mode_config.fb_list);
809,12 → 821,11
INIT_LIST_HEAD(&dev->mode_config.encoder_list);
INIT_LIST_HEAD(&dev->mode_config.property_list);
INIT_LIST_HEAD(&dev->mode_config.property_blob_list);
 
idr_init(&dev->mode_config.crtc_idr);
 
// mutex_lock(&dev->mode_config.mutex);
mutex_lock(&dev->mode_config.mutex);
drm_mode_create_standard_connector_properties(dev);
// mutex_unlock(&dev->mode_config.mutex);
mutex_unlock(&dev->mode_config.mutex);
 
/* Just to be sure */
dev->mode_config.num_fb = 0;
821,9 → 832,6
dev->mode_config.num_connector = 0;
dev->mode_config.num_crtc = 0;
dev->mode_config.num_encoder = 0;
 
LEAVE();
 
}
EXPORT_SYMBOL(drm_mode_config_init);
 
1078,7 → 1086,7
if (file_priv->master->minor->type == DRM_MINOR_CONTROL) {
list_for_each_entry(crtc, &dev->mode_config.crtc_list,
head) {
DRM_DEBUG("CRTC ID is %d\n", crtc->base.id);
DRM_DEBUG_KMS("CRTC ID is %d\n", crtc->base.id);
if (put_user(crtc->base.id, crtc_id + copied)) {
ret = -EFAULT;
goto out;
1106,7 → 1114,7
list_for_each_entry(encoder,
&dev->mode_config.encoder_list,
head) {
DRM_DEBUG("ENCODER ID is %d\n",
DRM_DEBUG_KMS("ENCODER ID is %d\n",
encoder->base.id);
if (put_user(encoder->base.id, encoder_id +
copied)) {
1137,7 → 1145,7
list_for_each_entry(connector,
&dev->mode_config.connector_list,
head) {
DRM_DEBUG("CONNECTOR ID is %d\n",
DRM_DEBUG_KMS("CONNECTOR ID is %d\n",
connector->base.id);
if (put_user(connector->base.id,
connector_id + copied)) {
1161,7 → 1169,7
}
card_res->count_connectors = connector_count;
 
DRM_DEBUG("Counted %d %d %d\n", card_res->count_crtcs,
DRM_DEBUG_KMS("Counted %d %d %d\n", card_res->count_crtcs,
card_res->count_connectors, card_res->count_encoders);
 
out:
1265,7 → 1273,7
 
memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo));
 
DRM_DEBUG("connector id %d:\n", out_resp->connector_id);
DRM_DEBUG_KMS("connector id %d:\n", out_resp->connector_id);
 
mutex_lock(&dev->mode_config.mutex);
 
1441,7 → 1449,7
obj = drm_mode_object_find(dev, crtc_req->crtc_id,
DRM_MODE_OBJECT_CRTC);
if (!obj) {
DRM_DEBUG("Unknown CRTC ID %d\n", crtc_req->crtc_id);
DRM_DEBUG_KMS("Unknown CRTC ID %d\n", crtc_req->crtc_id);
ret = -EINVAL;
goto out;
}
1454,7 → 1462,8
list_for_each_entry(crtcfb,
&dev->mode_config.crtc_list, head) {
if (crtcfb == crtc) {
DRM_DEBUG("Using current fb for setmode\n");
DRM_DEBUG_KMS("Using current fb for "
"setmode\n");
fb = crtc->fb;
}
}
1462,7 → 1471,8
obj = drm_mode_object_find(dev, crtc_req->fb_id,
DRM_MODE_OBJECT_FB);
if (!obj) {
DRM_DEBUG("Unknown FB ID%d\n", crtc_req->fb_id);
DRM_DEBUG_KMS("Unknown FB ID%d\n",
crtc_req->fb_id);
ret = -EINVAL;
goto out;
}
1475,13 → 1485,13
}
 
if (crtc_req->count_connectors == 0 && mode) {
DRM_DEBUG("Count connectors is 0 but mode set\n");
DRM_DEBUG_KMS("Count connectors is 0 but mode set\n");
ret = -EINVAL;
goto out;
}
 
if (crtc_req->count_connectors > 0 && !mode && !fb) {
DRM_DEBUG("Count connectors is %d but no mode or fb set\n",
if (crtc_req->count_connectors > 0 && (!mode || !fb)) {
DRM_DEBUG_KMS("Count connectors is %d but no mode or fb set\n",
crtc_req->count_connectors);
ret = -EINVAL;
goto out;
1514,7 → 1524,8
obj = drm_mode_object_find(dev, out_id,
DRM_MODE_OBJECT_CONNECTOR);
if (!obj) {
DRM_DEBUG("Connector id %d unknown\n", out_id);
DRM_DEBUG_KMS("Connector id %d unknown\n",
out_id);
ret = -EINVAL;
goto out;
}
1547,7 → 1558,7
struct drm_crtc *crtc;
int ret = 0;
 
DRM_DEBUG("\n");
DRM_DEBUG_KMS("\n");
 
if (!req->flags) {
DRM_ERROR("no operation set\n");
1557,7 → 1568,7
mutex_lock(&dev->mode_config.mutex);
obj = drm_mode_object_find(dev, req->crtc_id, DRM_MODE_OBJECT_CRTC);
if (!obj) {
DRM_DEBUG("Unknown CRTC ID %d\n", req->crtc_id);
DRM_DEBUG_KMS("Unknown CRTC ID %d\n", req->crtc_id);
ret = -EINVAL;
goto out;
}
1774,7 → 1785,6
}
#endif
 
 
/**
* drm_mode_attachmode - add a mode to the user mode list
* @dev: DRM device
1956,7 → 1966,6
}
 
drm_mode_object_get(dev, &property->base, DRM_MODE_OBJECT_PROPERTY);
 
property->flags = flags;
property->num_values = num_values;
INIT_LIST_HEAD(&property->enum_blob_list);
1964,7 → 1973,6
if (name)
strncpy(property->name, name, DRM_PROP_NAME_LEN);
 
 
list_add_tail(&property->head, &dev->mode_config.property_list);
 
dbgprintf("%s %x name %s\n", __FUNCTION__, property, name);
2099,7 → 2107,7
uint64_t __user *values_ptr;
uint32_t __user *blob_length_ptr;
 
// mutex_lock(&dev->mode_config.mutex);
mutex_lock(&dev->mode_config.mutex);
obj = drm_mode_object_find(dev, out_resp->prop_id, DRM_MODE_OBJECT_PROPERTY);
if (!obj) {
ret = -EINVAL;
2177,7 → 2185,7
out_resp->count_enum_blobs = blob_count;
}
done:
// mutex_unlock(&dev->mode_config.mutex);
mutex_unlock(&dev->mode_config.mutex);
return ret;
}
#endif
2283,7 → 2291,7
int ret = -EINVAL;
int i;
 
// mutex_lock(&dev->mode_config.mutex);
mutex_lock(&dev->mode_config.mutex);
 
obj = drm_mode_object_find(dev, out_resp->connector_id, DRM_MODE_OBJECT_CONNECTOR);
if (!obj) {
2340,7 → 2348,7
if (!ret)
drm_connector_property_set_value(connector, property, out_resp->value);
out:
// mutex_unlock(&dev->mode_config.mutex);
mutex_unlock(&dev->mode_config.mutex);
return ret;
}
#endif
2401,7 → 2409,7
int size;
int ret = 0;
 
// mutex_lock(&dev->mode_config.mutex);
mutex_lock(&dev->mode_config.mutex);
obj = drm_mode_object_find(dev, crtc_lut->crtc_id, DRM_MODE_OBJECT_CRTC);
if (!obj) {
ret = -EINVAL;
2437,7 → 2445,7
crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc->gamma_size);
 
out:
// mutex_unlock(&dev->mode_config.mutex);
mutex_unlock(&dev->mode_config.mutex);
return ret;
 
}
2452,7 → 2460,7
int size;
int ret = 0;
 
// mutex_lock(&dev->mode_config.mutex);
mutex_lock(&dev->mode_config.mutex);
obj = drm_mode_object_find(dev, crtc_lut->crtc_id, DRM_MODE_OBJECT_CRTC);
if (!obj) {
ret = -EINVAL;
2485,8 → 2493,10
goto out;
}
out:
// mutex_unlock(&dev->mode_config.mutex);
mutex_unlock(&dev->mode_config.mutex);
return ret;
}
 
#endif