]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
vmwgfx: Add support for depth 8
authorMichel Dänzer <daenzer@vmware.com>
Wed, 31 Aug 2011 07:42:47 +0000 (07:42 +0000)
committerDave Airlie <airlied@redhat.com>
Thu, 1 Sep 2011 08:37:27 +0000 (09:37 +0100)
Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c

index dfe32e62bd90cc083a6667a3090b02c694984e92..7539b569207ace74cd5e28f3c29606aff4001440 100644 (file)
@@ -567,6 +567,9 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv,
        case 15:
                format = SVGA3D_A1R5G5B5;
                break;
+       case 8:
+               format = SVGA3D_LUMINANCE8;
+               break;
        default:
                DRM_ERROR("Invalid color depth: %d\n", mode_cmd->depth);
                return -EINVAL;
index 7b8115aab54d75a58419cef3f0b6746346a4e66f..c6d09a618353bad12feaef12f161bca59068ca2a 100644 (file)
@@ -83,6 +83,15 @@ static void vmw_ldu_crtc_gamma_set(struct drm_crtc *crtc,
                                   u16 *r, u16 *g, u16 *b,
                                   uint32_t start, uint32_t size)
 {
+       struct vmw_private *dev_priv = vmw_priv(crtc->dev);
+       int i;
+
+       for (i = 0; i < size; i++) {
+               DRM_DEBUG("%d r/g/b = 0x%04x / 0x%04x / 0x%04x\n", i, r[i], g[i], b[i]);
+               vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 0, r[i] >> 8);
+               vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 1, g[i] >> 8);
+               vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 2, b[i] >> 8);
+       }
 }
 
 static void vmw_ldu_crtc_destroy(struct drm_crtc *crtc)
@@ -547,6 +556,8 @@ static int vmw_ldu_init(struct vmw_private *dev_priv, unsigned unit)
 
        drm_crtc_init(dev, crtc, &vmw_legacy_crtc_funcs);
 
+       drm_mode_crtc_set_gamma_size(crtc, 256);
+
        drm_connector_attach_property(connector,
                                      dev->mode_config.dirty_info_property,
                                      1);