diff options
-rw-r--r-- | drivers/gpu/drm/drm_fb_helper.c | 95 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_fb.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_display.c | 39 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_fb.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_mode.h | 2 | ||||
-rw-r--r-- | include/drm/drm_fb_helper.h | 3 |
8 files changed, 110 insertions, 56 deletions
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index 3746bd2f0f08..23dc9c115fd9 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c | |||
@@ -454,6 +454,54 @@ out_free: | |||
454 | } | 454 | } |
455 | EXPORT_SYMBOL(drm_fb_helper_init_crtc_count); | 455 | EXPORT_SYMBOL(drm_fb_helper_init_crtc_count); |
456 | 456 | ||
457 | static void setcolreg(struct drm_crtc *crtc, u16 red, u16 green, | ||
458 | u16 blue, u16 regno, struct fb_info *info) | ||
459 | { | ||
460 | struct drm_fb_helper *fb_helper = info->par; | ||
461 | struct drm_framebuffer *fb = fb_helper->fb; | ||
462 | int pindex; | ||
463 | |||
464 | pindex = regno; | ||
465 | |||
466 | if (fb->bits_per_pixel == 16) { | ||
467 | pindex = regno << 3; | ||
468 | |||
469 | if (fb->depth == 16 && regno > 63) | ||
470 | return; | ||
471 | if (fb->depth == 15 && regno > 31) | ||
472 | return; | ||
473 | |||
474 | if (fb->depth == 16) { | ||
475 | u16 r, g, b; | ||
476 | int i; | ||
477 | if (regno < 32) { | ||
478 | for (i = 0; i < 8; i++) | ||
479 | fb_helper->funcs->gamma_set(crtc, red, | ||
480 | green, blue, pindex + i); | ||
481 | } | ||
482 | |||
483 | fb_helper->funcs->gamma_get(crtc, &r, | ||
484 | &g, &b, | ||
485 | pindex >> 1); | ||
486 | |||
487 | for (i = 0; i < 4; i++) | ||
488 | fb_helper->funcs->gamma_set(crtc, r, | ||
489 | green, b, | ||
490 | (pindex >> 1) + i); | ||
491 | } | ||
492 | } | ||
493 | |||
494 | if (fb->depth != 16) | ||
495 | fb_helper->funcs->gamma_set(crtc, red, green, blue, pindex); | ||
496 | |||
497 | if (regno < 16 && info->fix.visual == FB_VISUAL_DIRECTCOLOR) { | ||
498 | ((u32 *) fb->pseudo_palette)[regno] = | ||
499 | (regno << info->var.red.offset) | | ||
500 | (regno << info->var.green.offset) | | ||
501 | (regno << info->var.blue.offset); | ||
502 | } | ||
503 | } | ||
504 | |||
457 | int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info) | 505 | int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info) |
458 | { | 506 | { |
459 | struct drm_fb_helper *fb_helper = info->par; | 507 | struct drm_fb_helper *fb_helper = info->par; |
@@ -488,7 +536,7 @@ int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info) | |||
488 | if (transp) | 536 | if (transp) |
489 | htransp = *transp++; | 537 | htransp = *transp++; |
490 | 538 | ||
491 | fb_helper->funcs->gamma_set(crtc, hred, hgreen, hblue, start++); | 539 | setcolreg(crtc, hred, hgreen, hblue, start++, info); |
492 | } | 540 | } |
493 | crtc_funcs->load_lut(crtc); | 541 | crtc_funcs->load_lut(crtc); |
494 | } | 542 | } |
@@ -508,9 +556,11 @@ int drm_fb_helper_setcolreg(unsigned regno, | |||
508 | struct drm_crtc *crtc; | 556 | struct drm_crtc *crtc; |
509 | int i; | 557 | int i; |
510 | 558 | ||
511 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { | 559 | if (regno > 255) |
512 | struct drm_framebuffer *fb = fb_helper->fb; | 560 | return 1; |
513 | 561 | ||
562 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { | ||
563 | struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; | ||
514 | for (i = 0; i < fb_helper->crtc_count; i++) { | 564 | for (i = 0; i < fb_helper->crtc_count; i++) { |
515 | if (crtc->base.id == fb_helper->crtc_info[i].crtc_id) | 565 | if (crtc->base.id == fb_helper->crtc_info[i].crtc_id) |
516 | break; | 566 | break; |
@@ -518,36 +568,9 @@ int drm_fb_helper_setcolreg(unsigned regno, | |||
518 | if (i == fb_helper->crtc_count) | 568 | if (i == fb_helper->crtc_count) |
519 | continue; | 569 | continue; |
520 | 570 | ||
521 | if (regno > 255) | ||
522 | return 1; | ||
523 | |||
524 | if (fb->depth == 8) { | ||
525 | fb_helper->funcs->gamma_set(crtc, red, green, blue, regno); | ||
526 | return 0; | ||
527 | } | ||
528 | 571 | ||
529 | if (regno < 16) { | 572 | setcolreg(crtc, red, green, blue, regno, info); |
530 | u32 *pal = fb->pseudo_palette; | 573 | crtc_funcs->load_lut(crtc); |
531 | switch (fb->depth) { | ||
532 | case 15: | ||
533 | pal[regno] = ((red & 0xf800) >> 1) | | ||
534 | ((green & 0xf800) >> 6) | | ||
535 | ((blue & 0xf800) >> 11); | ||
536 | break; | ||
537 | case 16: | ||
538 | pal[regno] = (red & 0xf800) | | ||
539 | ((green & 0xfc00) >> 5) | | ||
540 | ((blue & 0xf800) >> 11); | ||
541 | break; | ||
542 | case 24: | ||
543 | case 32: | ||
544 | pal[regno] = | ||
545 | (((red >> 8) & 0xff) << info->var.red.offset) | | ||
546 | (((green >> 8) & 0xff) << info->var.green.offset) | | ||
547 | (((blue >> 8) & 0xff) << info->var.blue.offset); | ||
548 | break; | ||
549 | } | ||
550 | } | ||
551 | } | 574 | } |
552 | return 0; | 575 | return 0; |
553 | } | 576 | } |
@@ -717,6 +740,7 @@ int drm_fb_helper_pan_display(struct fb_var_screeninfo *var, | |||
717 | EXPORT_SYMBOL(drm_fb_helper_pan_display); | 740 | EXPORT_SYMBOL(drm_fb_helper_pan_display); |
718 | 741 | ||
719 | int drm_fb_helper_single_fb_probe(struct drm_device *dev, | 742 | int drm_fb_helper_single_fb_probe(struct drm_device *dev, |
743 | int preferred_bpp, | ||
720 | int (*fb_create)(struct drm_device *dev, | 744 | int (*fb_create)(struct drm_device *dev, |
721 | uint32_t fb_width, | 745 | uint32_t fb_width, |
722 | uint32_t fb_height, | 746 | uint32_t fb_height, |
@@ -739,6 +763,11 @@ int drm_fb_helper_single_fb_probe(struct drm_device *dev, | |||
739 | struct drm_fb_helper *fb_helper; | 763 | struct drm_fb_helper *fb_helper; |
740 | uint32_t surface_depth = 24, surface_bpp = 32; | 764 | uint32_t surface_depth = 24, surface_bpp = 32; |
741 | 765 | ||
766 | /* if driver picks 8 or 16 by default use that | ||
767 | for both depth/bpp */ | ||
768 | if (preferred_bpp != surface_bpp) { | ||
769 | surface_depth = surface_bpp = preferred_bpp; | ||
770 | } | ||
742 | /* first up get a count of crtcs now in use and new min/maxes width/heights */ | 771 | /* first up get a count of crtcs now in use and new min/maxes width/heights */ |
743 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | 772 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
744 | struct drm_fb_helper_connector *fb_help_conn = connector->fb_helper_private; | 773 | struct drm_fb_helper_connector *fb_help_conn = connector->fb_helper_private; |
@@ -899,7 +928,7 @@ void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch, | |||
899 | { | 928 | { |
900 | info->fix.type = FB_TYPE_PACKED_PIXELS; | 929 | info->fix.type = FB_TYPE_PACKED_PIXELS; |
901 | info->fix.visual = depth == 8 ? FB_VISUAL_PSEUDOCOLOR : | 930 | info->fix.visual = depth == 8 ? FB_VISUAL_PSEUDOCOLOR : |
902 | FB_VISUAL_TRUECOLOR; | 931 | FB_VISUAL_DIRECTCOLOR; |
903 | info->fix.type_aux = 0; | 932 | info->fix.type_aux = 0; |
904 | info->fix.xpanstep = 1; /* doing it in hw */ | 933 | info->fix.xpanstep = 1; /* doing it in hw */ |
905 | info->fix.ypanstep = 1; /* doing it in hw */ | 934 | info->fix.ypanstep = 1; /* doing it in hw */ |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index a840cb1bd36a..893903962e54 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -2922,6 +2922,16 @@ void intel_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green, | |||
2922 | intel_crtc->lut_b[regno] = blue >> 8; | 2922 | intel_crtc->lut_b[regno] = blue >> 8; |
2923 | } | 2923 | } |
2924 | 2924 | ||
2925 | void intel_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green, | ||
2926 | u16 *blue, int regno) | ||
2927 | { | ||
2928 | struct intel_crtc *intel_crtc = to_intel_crtc(crtc); | ||
2929 | |||
2930 | *red = intel_crtc->lut_r[regno] << 8; | ||
2931 | *green = intel_crtc->lut_g[regno] << 8; | ||
2932 | *blue = intel_crtc->lut_b[regno] << 8; | ||
2933 | } | ||
2934 | |||
2925 | static void intel_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, | 2935 | static void intel_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, |
2926 | u16 *blue, uint32_t size) | 2936 | u16 *blue, uint32_t size) |
2927 | { | 2937 | { |
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index b9e47f1e1cc0..aa96b5221358 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -173,6 +173,8 @@ extern int intelfb_resize(struct drm_device *dev, struct drm_crtc *crtc); | |||
173 | extern void intelfb_restore(void); | 173 | extern void intelfb_restore(void); |
174 | extern void intel_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green, | 174 | extern void intel_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green, |
175 | u16 blue, int regno); | 175 | u16 blue, int regno); |
176 | extern void intel_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green, | ||
177 | u16 *blue, int regno); | ||
176 | 178 | ||
177 | extern int intel_framebuffer_create(struct drm_device *dev, | 179 | extern int intel_framebuffer_create(struct drm_device *dev, |
178 | struct drm_mode_fb_cmd *mode_cmd, | 180 | struct drm_mode_fb_cmd *mode_cmd, |
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c index 3ee8db1fbcd0..2b0fe54cd92c 100644 --- a/drivers/gpu/drm/i915/intel_fb.c +++ b/drivers/gpu/drm/i915/intel_fb.c | |||
@@ -65,6 +65,7 @@ static struct fb_ops intelfb_ops = { | |||
65 | 65 | ||
66 | static struct drm_fb_helper_funcs intel_fb_helper_funcs = { | 66 | static struct drm_fb_helper_funcs intel_fb_helper_funcs = { |
67 | .gamma_set = intel_crtc_fb_gamma_set, | 67 | .gamma_set = intel_crtc_fb_gamma_set, |
68 | .gamma_get = intel_crtc_fb_gamma_get, | ||
68 | }; | 69 | }; |
69 | 70 | ||
70 | 71 | ||
@@ -124,6 +125,10 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width, | |||
124 | struct device *device = &dev->pdev->dev; | 125 | struct device *device = &dev->pdev->dev; |
125 | int size, ret, mmio_bar = IS_I9XX(dev) ? 0 : 1; | 126 | int size, ret, mmio_bar = IS_I9XX(dev) ? 0 : 1; |
126 | 127 | ||
128 | /* we don't do packed 24bpp */ | ||
129 | if (surface_bpp == 24) | ||
130 | surface_bpp = 32; | ||
131 | |||
127 | mode_cmd.width = surface_width; | 132 | mode_cmd.width = surface_width; |
128 | mode_cmd.height = surface_height; | 133 | mode_cmd.height = surface_height; |
129 | 134 | ||
@@ -245,7 +250,7 @@ int intelfb_probe(struct drm_device *dev) | |||
245 | int ret; | 250 | int ret; |
246 | 251 | ||
247 | DRM_DEBUG("\n"); | 252 | DRM_DEBUG("\n"); |
248 | ret = drm_fb_helper_single_fb_probe(dev, intelfb_create); | 253 | ret = drm_fb_helper_single_fb_probe(dev, 32, intelfb_create); |
249 | return ret; | 254 | return ret; |
250 | } | 255 | } |
251 | EXPORT_SYMBOL(intelfb_probe); | 256 | EXPORT_SYMBOL(intelfb_probe); |
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index 44cfcfdf1352..3655d91993a6 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c | |||
@@ -106,24 +106,33 @@ void radeon_crtc_load_lut(struct drm_crtc *crtc) | |||
106 | legacy_crtc_load_lut(crtc); | 106 | legacy_crtc_load_lut(crtc); |
107 | } | 107 | } |
108 | 108 | ||
109 | /** Sets the color ramps on behalf of RandR */ | 109 | /** Sets the color ramps on behalf of fbcon */ |
110 | void radeon_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green, | 110 | void radeon_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green, |
111 | u16 blue, int regno) | 111 | u16 blue, int regno) |
112 | { | 112 | { |
113 | struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); | 113 | struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); |
114 | 114 | ||
115 | if (regno == 0) | ||
116 | DRM_DEBUG("gamma set %d\n", radeon_crtc->crtc_id); | ||
117 | radeon_crtc->lut_r[regno] = red >> 6; | 115 | radeon_crtc->lut_r[regno] = red >> 6; |
118 | radeon_crtc->lut_g[regno] = green >> 6; | 116 | radeon_crtc->lut_g[regno] = green >> 6; |
119 | radeon_crtc->lut_b[regno] = blue >> 6; | 117 | radeon_crtc->lut_b[regno] = blue >> 6; |
120 | } | 118 | } |
121 | 119 | ||
120 | /** Gets the color ramps on behalf of fbcon */ | ||
121 | void radeon_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green, | ||
122 | u16 *blue, int regno) | ||
123 | { | ||
124 | struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); | ||
125 | |||
126 | *red = radeon_crtc->lut_r[regno] << 6; | ||
127 | *green = radeon_crtc->lut_g[regno] << 6; | ||
128 | *blue = radeon_crtc->lut_b[regno] << 6; | ||
129 | } | ||
130 | |||
122 | static void radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, | 131 | static void radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, |
123 | u16 *blue, uint32_t size) | 132 | u16 *blue, uint32_t size) |
124 | { | 133 | { |
125 | struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); | 134 | struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); |
126 | int i, j; | 135 | int i; |
127 | 136 | ||
128 | if (size != 256) { | 137 | if (size != 256) { |
129 | return; | 138 | return; |
@@ -132,23 +141,11 @@ static void radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, | |||
132 | return; | 141 | return; |
133 | } | 142 | } |
134 | 143 | ||
135 | if (crtc->fb->depth == 16) { | 144 | /* userspace palettes are always correct as is */ |
136 | for (i = 0; i < 64; i++) { | 145 | for (i = 0; i < 256; i++) { |
137 | if (i <= 31) { | 146 | radeon_crtc->lut_r[i] = red[i] >> 6; |
138 | for (j = 0; j < 8; j++) { | 147 | radeon_crtc->lut_g[i] = green[i] >> 6; |
139 | radeon_crtc->lut_r[i * 8 + j] = red[i] >> 6; | 148 | radeon_crtc->lut_b[i] = blue[i] >> 6; |
140 | radeon_crtc->lut_b[i * 8 + j] = blue[i] >> 6; | ||
141 | } | ||
142 | } | ||
143 | for (j = 0; j < 4; j++) | ||
144 | radeon_crtc->lut_g[i * 4 + j] = green[i] >> 6; | ||
145 | } | ||
146 | } else { | ||
147 | for (i = 0; i < 256; i++) { | ||
148 | radeon_crtc->lut_r[i] = red[i] >> 6; | ||
149 | radeon_crtc->lut_g[i] = green[i] >> 6; | ||
150 | radeon_crtc->lut_b[i] = blue[i] >> 6; | ||
151 | } | ||
152 | } | 149 | } |
153 | 150 | ||
154 | radeon_crtc_load_lut(crtc); | 151 | radeon_crtc_load_lut(crtc); |
diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c index c32f44096fec..b38c4c8e2c61 100644 --- a/drivers/gpu/drm/radeon/radeon_fb.c +++ b/drivers/gpu/drm/radeon/radeon_fb.c | |||
@@ -124,6 +124,7 @@ static int radeon_align_pitch(struct radeon_device *rdev, int width, int bpp, bo | |||
124 | 124 | ||
125 | static struct drm_fb_helper_funcs radeon_fb_helper_funcs = { | 125 | static struct drm_fb_helper_funcs radeon_fb_helper_funcs = { |
126 | .gamma_set = radeon_crtc_fb_gamma_set, | 126 | .gamma_set = radeon_crtc_fb_gamma_set, |
127 | .gamma_get = radeon_crtc_fb_gamma_get, | ||
127 | }; | 128 | }; |
128 | 129 | ||
129 | int radeonfb_create(struct drm_device *dev, | 130 | int radeonfb_create(struct drm_device *dev, |
@@ -151,6 +152,11 @@ int radeonfb_create(struct drm_device *dev, | |||
151 | 152 | ||
152 | mode_cmd.width = surface_width; | 153 | mode_cmd.width = surface_width; |
153 | mode_cmd.height = surface_height; | 154 | mode_cmd.height = surface_height; |
155 | |||
156 | /* avivo can't scanout real 24bpp */ | ||
157 | if ((surface_bpp == 24) && ASIC_IS_AVIVO(rdev)) | ||
158 | surface_bpp = 32; | ||
159 | |||
154 | mode_cmd.bpp = surface_bpp; | 160 | mode_cmd.bpp = surface_bpp; |
155 | /* need to align pitch with crtc limits */ | 161 | /* need to align pitch with crtc limits */ |
156 | mode_cmd.pitch = radeon_align_pitch(rdev, mode_cmd.width, mode_cmd.bpp, fb_tiled) * ((mode_cmd.bpp + 1) / 8); | 162 | mode_cmd.pitch = radeon_align_pitch(rdev, mode_cmd.width, mode_cmd.bpp, fb_tiled) * ((mode_cmd.bpp + 1) / 8); |
@@ -315,7 +321,7 @@ int radeon_parse_options(char *options) | |||
315 | 321 | ||
316 | int radeonfb_probe(struct drm_device *dev) | 322 | int radeonfb_probe(struct drm_device *dev) |
317 | { | 323 | { |
318 | return drm_fb_helper_single_fb_probe(dev, &radeonfb_create); | 324 | return drm_fb_helper_single_fb_probe(dev, 32, &radeonfb_create); |
319 | } | 325 | } |
320 | 326 | ||
321 | int radeonfb_remove(struct drm_device *dev, struct drm_framebuffer *fb) | 327 | int radeonfb_remove(struct drm_device *dev, struct drm_framebuffer *fb) |
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h index 570a58729daf..e61226817ccf 100644 --- a/drivers/gpu/drm/radeon/radeon_mode.h +++ b/drivers/gpu/drm/radeon/radeon_mode.h | |||
@@ -407,6 +407,8 @@ extern void | |||
407 | radeon_combios_encoder_dpms_scratch_regs(struct drm_encoder *encoder, bool on); | 407 | radeon_combios_encoder_dpms_scratch_regs(struct drm_encoder *encoder, bool on); |
408 | extern void radeon_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green, | 408 | extern void radeon_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green, |
409 | u16 blue, int regno); | 409 | u16 blue, int regno); |
410 | extern void radeon_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green, | ||
411 | u16 *blue, int regno); | ||
410 | struct drm_framebuffer *radeon_framebuffer_create(struct drm_device *dev, | 412 | struct drm_framebuffer *radeon_framebuffer_create(struct drm_device *dev, |
411 | struct drm_mode_fb_cmd *mode_cmd, | 413 | struct drm_mode_fb_cmd *mode_cmd, |
412 | struct drm_gem_object *obj); | 414 | struct drm_gem_object *obj); |
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h index f1ed08559fc7..58c892a2cbfa 100644 --- a/include/drm/drm_fb_helper.h +++ b/include/drm/drm_fb_helper.h | |||
@@ -39,6 +39,8 @@ struct drm_fb_helper_crtc { | |||
39 | struct drm_fb_helper_funcs { | 39 | struct drm_fb_helper_funcs { |
40 | void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green, | 40 | void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green, |
41 | u16 blue, int regno); | 41 | u16 blue, int regno); |
42 | void (*gamma_get)(struct drm_crtc *crtc, u16 *red, u16 *green, | ||
43 | u16 *blue, int regno); | ||
42 | }; | 44 | }; |
43 | 45 | ||
44 | /* mode specified on the command line */ | 46 | /* mode specified on the command line */ |
@@ -71,6 +73,7 @@ struct drm_fb_helper { | |||
71 | }; | 73 | }; |
72 | 74 | ||
73 | int drm_fb_helper_single_fb_probe(struct drm_device *dev, | 75 | int drm_fb_helper_single_fb_probe(struct drm_device *dev, |
76 | int preferred_bpp, | ||
74 | int (*fb_create)(struct drm_device *dev, | 77 | int (*fb_create)(struct drm_device *dev, |
75 | uint32_t fb_width, | 78 | uint32_t fb_width, |
76 | uint32_t fb_height, | 79 | uint32_t fb_height, |