summaryrefslogtreecommitdiff
path: root/linux-core/drm_edid.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@linux.ie>2007-04-05 13:34:50 +1000
committerDave Airlie <airlied@linux.ie>2007-04-05 13:34:50 +1000
commit5bffbd6e275efffbb649c20c528a11412ccf99cd (patch)
treef13ee4a2a6027d463ea2d11573b8de693cedffc1 /linux-core/drm_edid.c
parent52f9028c84baea81230dc673b756552e8e90aecd (diff)
initial userspace interface to get modes
Diffstat (limited to 'linux-core/drm_edid.c')
-rw-r--r--linux-core/drm_edid.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/linux-core/drm_edid.c b/linux-core/drm_edid.c
index 3c123751..bf1ea94c 100644
--- a/linux-core/drm_edid.c
+++ b/linux-core/drm_edid.c
@@ -212,7 +212,8 @@ bad:
*
* Punts for now.
*/
-struct drm_display_mode *drm_mode_std(struct std_timing *t)
+struct drm_display_mode *drm_mode_std(struct drm_device *dev,
+ struct std_timing *t)
{
// struct fb_videomode mode;
@@ -221,7 +222,7 @@ struct drm_display_mode *drm_mode_std(struct std_timing *t)
struct drm_display_mode *mode;
int hsize = t->hsize * 8 + 248, vsize;
- mode = kzalloc(sizeof(struct drm_display_mode), GFP_KERNEL);
+ mode = drm_crtc_mode_create(dev);
if (!mode)
return NULL;
@@ -239,7 +240,8 @@ struct drm_display_mode *drm_mode_std(struct std_timing *t)
return mode;
}
-struct drm_display_mode *drm_mode_detailed(struct detailed_timing *timing,
+struct drm_display_mode *drm_mode_detailed(drm_device_t *dev,
+ struct detailed_timing *timing,
bool preferred)
{
struct drm_display_mode *mode;
@@ -254,7 +256,7 @@ struct drm_display_mode *drm_mode_detailed(struct detailed_timing *timing,
return NULL;
}
- mode = kzalloc(sizeof(struct drm_display_mode), GFP_KERNEL);
+ mode = drm_crtc_mode_create(dev);
if (!mode)
return NULL;
@@ -357,6 +359,7 @@ static struct drm_display_mode established_modes[] = {
*/
static int add_established_modes(struct drm_output *output, struct edid *edid)
{
+ struct drm_device *dev = output->dev;
unsigned long est_bits = edid->established_timings.t1 |
(edid->established_timings.t2 << 8) |
((edid->established_timings.mfg_rsvd & 0x80) << 9);
@@ -365,7 +368,7 @@ static int add_established_modes(struct drm_output *output, struct edid *edid)
for (i = 0; i <= EDID_EST_TIMINGS; i++)
if (est_bits & (1<<i)) {
drm_mode_probed_add(output,
- drm_mode_duplicate(&established_modes[i]));
+ drm_mode_duplicate(dev, &established_modes[i]));
modes++;
}
@@ -382,6 +385,7 @@ static int add_established_modes(struct drm_output *output, struct edid *edid)
static int add_standard_modes(struct drm_output *output, struct edid *edid)
{
int i, modes = 0;
+ struct drm_device *dev = output->dev;
for (i = 0; i < EDID_STD_TIMINGS; i++) {
struct std_timing *t = &edid->standard_timings[i];
@@ -391,7 +395,7 @@ static int add_standard_modes(struct drm_output *output, struct edid *edid)
continue;
drm_mode_probed_add(output,
- drm_mode_std(&edid->standard_timings[i]));
+ drm_mode_std(dev, &edid->standard_timings[i]));
modes++;
}
@@ -409,6 +413,7 @@ static int add_detailed_info(struct drm_output *output, struct edid *edid)
{
int i, j, modes = 0;
bool preferred = 0;
+ struct drm_device *dev = output->dev;
for (i = 0; i < EDID_DETAILED_TIMINGS; i++) {
struct detailed_timing *timing = &edid->detailed_timings[i];
@@ -423,7 +428,7 @@ static int add_detailed_info(struct drm_output *output, struct edid *edid)
if (i == 0 && edid->preferred_timing)
preferred = 1;
drm_mode_probed_add(output,
- drm_mode_detailed(timing, preferred));
+ drm_mode_detailed(dev, timing, preferred));
modes++;
continue;
}
@@ -446,7 +451,7 @@ static int add_detailed_info(struct drm_output *output, struct edid *edid)
struct std_timing *std;
std = &data->data.timings[j];
- drm_mode_probed_add(output, drm_mode_std(std));
+ drm_mode_probed_add(output, drm_mode_std(dev, std));
modes++;
}
break;