diff options
Diffstat (limited to 'drivers/gpu/drm/cirrus/cirrus_mode.c')
| -rw-r--r-- | drivers/gpu/drm/cirrus/cirrus_mode.c | 44 | 
1 files changed, 19 insertions, 25 deletions
diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c b/drivers/gpu/drm/cirrus/cirrus_mode.c index 60685b21cc3..49332c5fe35 100644 --- a/drivers/gpu/drm/cirrus/cirrus_mode.c +++ b/drivers/gpu/drm/cirrus/cirrus_mode.c @@ -102,7 +102,7 @@ static bool cirrus_crtc_mode_fixup(struct drm_crtc *crtc,  	return true;  } -void cirrus_set_start_address(struct drm_crtc *crtc, unsigned offset) +static void cirrus_set_start_address(struct drm_crtc *crtc, unsigned offset)  {  	struct cirrus_device *cdev = crtc->dev->dev_private;  	u32 addr; @@ -149,7 +149,7 @@ static int cirrus_crtc_do_set_base(struct drm_crtc *crtc,  		cirrus_bo_unreserve(bo);  	} -	cirrus_fb = to_cirrus_framebuffer(crtc->fb); +	cirrus_fb = to_cirrus_framebuffer(crtc->primary->fb);  	obj = cirrus_fb->obj;  	bo = gem_to_cirrus_bo(obj); @@ -268,13 +268,13 @@ static int cirrus_crtc_mode_set(struct drm_crtc *crtc,  	sr07 = RREG8(SEQ_DATA);  	sr07 &= 0xe0;  	hdr = 0; -	switch (crtc->fb->bits_per_pixel) { +	switch (crtc->primary->fb->bits_per_pixel) {  	case 8:  		sr07 |= 0x11;  		break;  	case 16: -		sr07 |= 0xc1; -		hdr = 0xc0; +		sr07 |= 0x17; +		hdr = 0xc1;  		break;  	case 24:  		sr07 |= 0x15; @@ -291,13 +291,13 @@ static int cirrus_crtc_mode_set(struct drm_crtc *crtc,  	WREG_SEQ(0x7, sr07);  	/* Program the pitch */ -	tmp = crtc->fb->pitches[0] / 8; +	tmp = crtc->primary->fb->pitches[0] / 8;  	WREG_CRT(VGA_CRTC_OFFSET, tmp);  	/* Enable extended blanking and pitch bits, and enable full memory */  	tmp = 0x22; -	tmp |= (crtc->fb->pitches[0] >> 7) & 0x10; -	tmp |= (crtc->fb->pitches[0] >> 6) & 0x40; +	tmp |= (crtc->primary->fb->pitches[0] >> 7) & 0x10; +	tmp |= (crtc->primary->fb->pitches[0] >> 6) & 0x40;  	WREG_CRT(0x1b, tmp);  	/* Enable high-colour modes */ @@ -308,6 +308,9 @@ static int cirrus_crtc_mode_set(struct drm_crtc *crtc,  	WREG_HDR(hdr);  	cirrus_crtc_do_set_base(crtc, old_fb, x, y, 0); + +	/* Unblank (needed on S3 resume, vgabios doesn't do it then) */ +	outb(0x20, 0x3c0);  	return 0;  } @@ -453,7 +456,7 @@ static void cirrus_encoder_commit(struct drm_encoder *encoder)  {  } -void cirrus_encoder_destroy(struct drm_encoder *encoder) +static void cirrus_encoder_destroy(struct drm_encoder *encoder)  {  	struct cirrus_encoder *cirrus_encoder = to_cirrus_encoder(encoder);  	drm_encoder_cleanup(encoder); @@ -492,25 +495,17 @@ static struct drm_encoder *cirrus_encoder_init(struct drm_device *dev)  } -int cirrus_vga_get_modes(struct drm_connector *connector) +static int cirrus_vga_get_modes(struct drm_connector *connector)  { -	/* Just add a static list of modes */ -	drm_add_modes_noedid(connector, 640, 480); -	drm_add_modes_noedid(connector, 800, 600); -	drm_add_modes_noedid(connector, 1024, 768); -	drm_add_modes_noedid(connector, 1280, 1024); - -	return 4; -} +	int count; -static int cirrus_vga_mode_valid(struct drm_connector *connector, -				 struct drm_display_mode *mode) -{ -	/* Any mode we've added is valid */ -	return MODE_OK; +	/* Just add a static list of modes */ +	count = drm_add_modes_noedid(connector, 1280, 1024); +	drm_set_preferred_mode(connector, 1024, 768); +	return count;  } -struct drm_encoder *cirrus_connector_best_encoder(struct drm_connector +static struct drm_encoder *cirrus_connector_best_encoder(struct drm_connector  						  *connector)  {  	int enc_id = connector->encoder_ids[0]; @@ -544,7 +539,6 @@ static void cirrus_connector_destroy(struct drm_connector *connector)  struct drm_connector_helper_funcs cirrus_vga_connector_helper_funcs = {  	.get_modes = cirrus_vga_get_modes, -	.mode_valid = cirrus_vga_mode_valid,  	.best_encoder = cirrus_connector_best_encoder,  };  | 
