Merge branch 'gma500' (Alan's GMA patches)
Merge gma500 patches from Alan Cox. * Merge emailed patches from Alan Cox <alan@lxorguk.ukuu.org.uk>: (3 commits) gma500,cdv: Fix the brightness base gma500: move the ASLE enable gma500: Fix lid related crash
This commit is contained in:
commit
e5254a625d
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user