diff options
Diffstat (limited to 'drivers/gpu/drm/gma500')
| -rw-r--r-- | drivers/gpu/drm/gma500/cdv_device.c | 35 | ||||
| -rw-r--r-- | drivers/gpu/drm/gma500/opregion.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/gma500/opregion.h | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/gma500/psb_device.c | 12 | ||||
| -rw-r--r-- | drivers/gpu/drm/gma500/psb_drv.c | 1 | 
5 files changed, 32 insertions, 29 deletions
diff --git a/drivers/gpu/drm/gma500/cdv_device.c b/drivers/gpu/drm/gma500/cdv_device.c index 9764045428c..b7e7b49d8f6 100644 --- a/drivers/gpu/drm/gma500/cdv_device.c +++ b/drivers/gpu/drm/gma500/cdv_device.c @@ -78,21 +78,6 @@ static int cdv_backlight_combination_mode(struct drm_device *dev)  	return REG_READ(BLC_PWM_CTL2) & PWM_LEGACY_MODE;  } -static int cdv_get_brightness(struct backlight_device *bd) -{ -	struct drm_device *dev = bl_get_data(bd); -	u32 val = REG_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK; - -	if (cdv_backlight_combination_mode(dev)) { -		u8 lbpc; - -		val &= ~1; -		pci_read_config_byte(dev->pdev, 0xF4, &lbpc); -		val *= lbpc; -	} -	return val; -} -  static u32 cdv_get_max_backlight(struct drm_device *dev)  {  	u32 max = REG_READ(BLC_PWM_CTL); @@ -110,6 +95,22 @@ static u32 cdv_get_max_backlight(struct drm_device *dev)  	return max;  } +static int cdv_get_brightness(struct backlight_device *bd) +{ +	struct drm_device *dev = bl_get_data(bd); +	u32 val = REG_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK; + +	if (cdv_backlight_combination_mode(dev)) { +		u8 lbpc; + +		val &= ~1; +		pci_read_config_byte(dev->pdev, 0xF4, &lbpc); +		val *= lbpc; +	} +	return (val * 100)/cdv_get_max_backlight(dev); + +} +  static int cdv_set_brightness(struct backlight_device *bd)  {  	struct drm_device *dev = bl_get_data(bd); @@ -120,6 +121,9 @@ static int cdv_set_brightness(struct backlight_device *bd)  	if (level < 1)  		level = 1; +	level *= cdv_get_max_backlight(dev); +	level /= 100; +  	if (cdv_backlight_combination_mode(dev)) {  		u32 max = cdv_get_max_backlight(dev);  		u8 lbpc; @@ -157,7 +161,6 @@ static int cdv_backlight_init(struct drm_device *dev)  	cdv_backlight_device->props.brightness =  			cdv_get_brightness(cdv_backlight_device); -	cdv_backlight_device->props.max_brightness = cdv_get_max_backlight(dev);  	backlight_update_status(cdv_backlight_device);  	dev_priv->backlight_device = cdv_backlight_device;  	return 0; diff --git a/drivers/gpu/drm/gma500/opregion.c b/drivers/gpu/drm/gma500/opregion.c index 4f186eca3a3..c430bd42468 100644 --- a/drivers/gpu/drm/gma500/opregion.c +++ b/drivers/gpu/drm/gma500/opregion.c @@ -144,6 +144,8 @@ struct opregion_asle {  #define ASLE_CBLV_VALID         (1<<31) +static struct psb_intel_opregion *system_opregion; +  static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)  {  	struct drm_psb_private *dev_priv = dev->dev_private; @@ -205,7 +207,7 @@ void psb_intel_opregion_enable_asle(struct drm_device *dev)  	struct drm_psb_private *dev_priv = dev->dev_private;  	struct opregion_asle *asle = dev_priv->opregion.asle; -	if (asle) { +	if (asle && system_opregion ) {  		/* Don't do this on Medfield or other non PC like devices, they  		   use the bit for something different altogether */  		psb_enable_pipestat(dev_priv, 0, PIPE_LEGACY_BLC_EVENT_ENABLE); @@ -221,7 +223,6 @@ void psb_intel_opregion_enable_asle(struct drm_device *dev)  #define ACPI_EV_LID            (1<<1)  #define ACPI_EV_DOCK           (1<<2) -static struct psb_intel_opregion *system_opregion;  static int psb_intel_opregion_video_event(struct notifier_block *nb,  					  unsigned long val, void *data) @@ -266,9 +267,6 @@ void psb_intel_opregion_init(struct drm_device *dev)  		system_opregion = opregion;  		register_acpi_notifier(&psb_intel_opregion_notifier);  	} - -	if (opregion->asle) -		psb_intel_opregion_enable_asle(dev);  }  void psb_intel_opregion_fini(struct drm_device *dev) diff --git a/drivers/gpu/drm/gma500/opregion.h b/drivers/gpu/drm/gma500/opregion.h index 72dc6b92126..4a90f8b0e16 100644 --- a/drivers/gpu/drm/gma500/opregion.h +++ b/drivers/gpu/drm/gma500/opregion.h @@ -27,6 +27,7 @@ extern void psb_intel_opregion_asle_intr(struct drm_device *dev);  extern void psb_intel_opregion_init(struct drm_device *dev);  extern void psb_intel_opregion_fini(struct drm_device *dev);  extern int psb_intel_opregion_setup(struct drm_device *dev); +extern void psb_intel_opregion_enable_asle(struct drm_device *dev);  #else @@ -46,4 +47,8 @@ extern inline int psb_intel_opregion_setup(struct drm_device *dev)  {  	return 0;  } + +extern inline void psb_intel_opregion_enable_asle(struct drm_device *dev) +{ +}  #endif diff --git a/drivers/gpu/drm/gma500/psb_device.c b/drivers/gpu/drm/gma500/psb_device.c index eff039bf92d..5971bc82b76 100644 --- a/drivers/gpu/drm/gma500/psb_device.c +++ b/drivers/gpu/drm/gma500/psb_device.c @@ -144,6 +144,10 @@ static int psb_backlight_init(struct drm_device *dev)  	psb_backlight_device->props.max_brightness = 100;  	backlight_update_status(psb_backlight_device);  	dev_priv->backlight_device = psb_backlight_device; + +	/* This must occur after the backlight is properly initialised */ +	psb_lid_timer_init(dev_priv); +  	return 0;  } @@ -354,13 +358,6 @@ static int psb_chip_setup(struct drm_device *dev)  	return 0;  } -/* Not exactly an erratum more an irritation */ -static void psb_chip_errata(struct drm_device *dev) -{ -	struct drm_psb_private *dev_priv = dev->dev_private; -	psb_lid_timer_init(dev_priv); -} -  static void psb_chip_teardown(struct drm_device *dev)  {  	struct drm_psb_private *dev_priv = dev->dev_private; @@ -379,7 +376,6 @@ const struct psb_ops psb_chip_ops = {  	.sgx_offset = PSB_SGX_OFFSET,  	.chip_setup = psb_chip_setup,  	.chip_teardown = psb_chip_teardown, -	.errata = psb_chip_errata,  	.crtc_helper = &psb_intel_helper_funcs,  	.crtc_funcs = &psb_intel_crtc_funcs, diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c index caba6e08693..a8858a907f4 100644 --- a/drivers/gpu/drm/gma500/psb_drv.c +++ b/drivers/gpu/drm/gma500/psb_drv.c @@ -374,6 +374,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)  	if (ret)  		return ret; +	psb_intel_opregion_enable_asle(dev);  #if 0  	/*enable runtime pm at last*/  	pm_runtime_enable(&dev->pdev->dev);  |