diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_combios.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_combios.c | 27 | 
1 files changed, 18 insertions, 9 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c index e9ea38ece37..37db8adb274 100644 --- a/drivers/gpu/drm/radeon/radeon_combios.c +++ b/drivers/gpu/drm/radeon/radeon_combios.c @@ -531,10 +531,7 @@ static struct radeon_i2c_bus_rec combios_setup_i2c_bus(struct radeon_device *rde  	case CHIP_RS300:  		switch (ddc_line) {  		case RADEON_GPIO_DVI_DDC: -			/* in theory this should be hw capable, -			 * but it doesn't seem to work -			 */ -			i2c.hw_capable = false; +			i2c.hw_capable = true;  			break;  		default:  			i2c.hw_capable = false; @@ -633,6 +630,8 @@ bool radeon_combios_get_clock_info(struct drm_device *dev)  		p1pll->reference_div = RBIOS16(pll_info + 0x10);  		p1pll->pll_out_min = RBIOS32(pll_info + 0x12);  		p1pll->pll_out_max = RBIOS32(pll_info + 0x16); +		p1pll->lcd_pll_out_min = p1pll->pll_out_min; +		p1pll->lcd_pll_out_max = p1pll->pll_out_max;  		if (rev > 9) {  			p1pll->pll_in_min = RBIOS32(pll_info + 0x36); @@ -761,7 +760,9 @@ struct radeon_encoder_primary_dac *radeon_combios_get_primary_dac_info(struct  			dac = RBIOS8(dac_info + 0x3) & 0xf;  			p_dac->ps2_pdac_adj = (bg << 8) | (dac);  		} -		found = 1; +		/* if the values are all zeros, use the table */ +		if (p_dac->ps2_pdac_adj) +			found = 1;  	}  	if (!found) /* fallback to defaults */ @@ -896,7 +897,9 @@ struct radeon_encoder_tv_dac *radeon_combios_get_tv_dac_info(struct  			bg = RBIOS8(dac_info + 0x10) & 0xf;  			dac = RBIOS8(dac_info + 0x11) & 0xf;  			tv_dac->ntsc_tvdac_adj = (bg << 16) | (dac << 20); -			found = 1; +			/* if the values are all zeros, use the table */ +			if (tv_dac->ps2_tvdac_adj) +				found = 1;  		} else if (rev > 1) {  			bg = RBIOS8(dac_info + 0xc) & 0xf;  			dac = (RBIOS8(dac_info + 0xc) >> 4) & 0xf; @@ -909,7 +912,9 @@ struct radeon_encoder_tv_dac *radeon_combios_get_tv_dac_info(struct  			bg = RBIOS8(dac_info + 0xe) & 0xf;  			dac = (RBIOS8(dac_info + 0xe) >> 4) & 0xf;  			tv_dac->ntsc_tvdac_adj = (bg << 16) | (dac << 20); -			found = 1; +			/* if the values are all zeros, use the table */ +			if (tv_dac->ps2_tvdac_adj) +				found = 1;  		}  		tv_dac->tv_std = radeon_combios_get_tv_info(rdev);  	} @@ -926,7 +931,9 @@ struct radeon_encoder_tv_dac *radeon_combios_get_tv_dac_info(struct  				    (bg << 16) | (dac << 20);  				tv_dac->pal_tvdac_adj = tv_dac->ps2_tvdac_adj;  				tv_dac->ntsc_tvdac_adj = tv_dac->ps2_tvdac_adj; -				found = 1; +				/* if the values are all zeros, use the table */ +				if (tv_dac->ps2_tvdac_adj) +					found = 1;  			} else {  				bg = RBIOS8(dac_info + 0x4) & 0xf;  				dac = RBIOS8(dac_info + 0x5) & 0xf; @@ -934,7 +941,9 @@ struct radeon_encoder_tv_dac *radeon_combios_get_tv_dac_info(struct  				    (bg << 16) | (dac << 20);  				tv_dac->pal_tvdac_adj = tv_dac->ps2_tvdac_adj;  				tv_dac->ntsc_tvdac_adj = tv_dac->ps2_tvdac_adj; -				found = 1; +				/* if the values are all zeros, use the table */ +				if (tv_dac->ps2_tvdac_adj) +					found = 1;  			}  		} else {  			DRM_INFO("No TV DAC info found in BIOS\n");  |