Commit e5254a62 authored by Linus Torvalds's avatar Linus Torvalds

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
parents fce667c5 64691959
...@@ -78,21 +78,6 @@ static int cdv_backlight_combination_mode(struct drm_device *dev) ...@@ -78,21 +78,6 @@ static int cdv_backlight_combination_mode(struct drm_device *dev)
return REG_READ(BLC_PWM_CTL2) & PWM_LEGACY_MODE; 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) static u32 cdv_get_max_backlight(struct drm_device *dev)
{ {
u32 max = REG_READ(BLC_PWM_CTL); u32 max = REG_READ(BLC_PWM_CTL);
...@@ -110,6 +95,22 @@ static u32 cdv_get_max_backlight(struct drm_device *dev) ...@@ -110,6 +95,22 @@ static u32 cdv_get_max_backlight(struct drm_device *dev)
return max; 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) static int cdv_set_brightness(struct backlight_device *bd)
{ {
struct drm_device *dev = bl_get_data(bd); struct drm_device *dev = bl_get_data(bd);
...@@ -120,6 +121,9 @@ static int cdv_set_brightness(struct backlight_device *bd) ...@@ -120,6 +121,9 @@ static int cdv_set_brightness(struct backlight_device *bd)
if (level < 1) if (level < 1)
level = 1; level = 1;
level *= cdv_get_max_backlight(dev);
level /= 100;
if (cdv_backlight_combination_mode(dev)) { if (cdv_backlight_combination_mode(dev)) {
u32 max = cdv_get_max_backlight(dev); u32 max = cdv_get_max_backlight(dev);
u8 lbpc; u8 lbpc;
...@@ -157,7 +161,6 @@ static int cdv_backlight_init(struct drm_device *dev) ...@@ -157,7 +161,6 @@ static int cdv_backlight_init(struct drm_device *dev)
cdv_backlight_device->props.brightness = cdv_backlight_device->props.brightness =
cdv_get_brightness(cdv_backlight_device); cdv_get_brightness(cdv_backlight_device);
cdv_backlight_device->props.max_brightness = cdv_get_max_backlight(dev);
backlight_update_status(cdv_backlight_device); backlight_update_status(cdv_backlight_device);
dev_priv->backlight_device = cdv_backlight_device; dev_priv->backlight_device = cdv_backlight_device;
return 0; return 0;
......
...@@ -144,6 +144,8 @@ struct opregion_asle { ...@@ -144,6 +144,8 @@ struct opregion_asle {
#define ASLE_CBLV_VALID (1<<31) #define ASLE_CBLV_VALID (1<<31)
static struct psb_intel_opregion *system_opregion;
static u32 asle_set_backlight(struct drm_device *dev, u32 bclp) static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
{ {
struct drm_psb_private *dev_priv = dev->dev_private; struct drm_psb_private *dev_priv = dev->dev_private;
...@@ -205,7 +207,7 @@ void psb_intel_opregion_enable_asle(struct drm_device *dev) ...@@ -205,7 +207,7 @@ void psb_intel_opregion_enable_asle(struct drm_device *dev)
struct drm_psb_private *dev_priv = dev->dev_private; struct drm_psb_private *dev_priv = dev->dev_private;
struct opregion_asle *asle = dev_priv->opregion.asle; 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 /* Don't do this on Medfield or other non PC like devices, they
use the bit for something different altogether */ use the bit for something different altogether */
psb_enable_pipestat(dev_priv, 0, PIPE_LEGACY_BLC_EVENT_ENABLE); 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) ...@@ -221,7 +223,6 @@ void psb_intel_opregion_enable_asle(struct drm_device *dev)
#define ACPI_EV_LID (1<<1) #define ACPI_EV_LID (1<<1)
#define ACPI_EV_DOCK (1<<2) #define ACPI_EV_DOCK (1<<2)
static struct psb_intel_opregion *system_opregion;
static int psb_intel_opregion_video_event(struct notifier_block *nb, static int psb_intel_opregion_video_event(struct notifier_block *nb,
unsigned long val, void *data) unsigned long val, void *data)
...@@ -266,9 +267,6 @@ void psb_intel_opregion_init(struct drm_device *dev) ...@@ -266,9 +267,6 @@ void psb_intel_opregion_init(struct drm_device *dev)
system_opregion = opregion; system_opregion = opregion;
register_acpi_notifier(&psb_intel_opregion_notifier); 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) void psb_intel_opregion_fini(struct drm_device *dev)
......
...@@ -27,6 +27,7 @@ extern void psb_intel_opregion_asle_intr(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_init(struct drm_device *dev);
extern void psb_intel_opregion_fini(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 int psb_intel_opregion_setup(struct drm_device *dev);
extern void psb_intel_opregion_enable_asle(struct drm_device *dev);
#else #else
...@@ -46,4 +47,8 @@ extern inline int psb_intel_opregion_setup(struct drm_device *dev) ...@@ -46,4 +47,8 @@ extern inline int psb_intel_opregion_setup(struct drm_device *dev)
{ {
return 0; return 0;
} }
extern inline void psb_intel_opregion_enable_asle(struct drm_device *dev)
{
}
#endif #endif
...@@ -144,6 +144,10 @@ static int psb_backlight_init(struct drm_device *dev) ...@@ -144,6 +144,10 @@ static int psb_backlight_init(struct drm_device *dev)
psb_backlight_device->props.max_brightness = 100; psb_backlight_device->props.max_brightness = 100;
backlight_update_status(psb_backlight_device); backlight_update_status(psb_backlight_device);
dev_priv->backlight_device = 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; return 0;
} }
...@@ -354,13 +358,6 @@ static int psb_chip_setup(struct drm_device *dev) ...@@ -354,13 +358,6 @@ static int psb_chip_setup(struct drm_device *dev)
return 0; 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) static void psb_chip_teardown(struct drm_device *dev)
{ {
struct drm_psb_private *dev_priv = dev->dev_private; struct drm_psb_private *dev_priv = dev->dev_private;
...@@ -379,7 +376,6 @@ const struct psb_ops psb_chip_ops = { ...@@ -379,7 +376,6 @@ const struct psb_ops psb_chip_ops = {
.sgx_offset = PSB_SGX_OFFSET, .sgx_offset = PSB_SGX_OFFSET,
.chip_setup = psb_chip_setup, .chip_setup = psb_chip_setup,
.chip_teardown = psb_chip_teardown, .chip_teardown = psb_chip_teardown,
.errata = psb_chip_errata,
.crtc_helper = &psb_intel_helper_funcs, .crtc_helper = &psb_intel_helper_funcs,
.crtc_funcs = &psb_intel_crtc_funcs, .crtc_funcs = &psb_intel_crtc_funcs,
......
...@@ -374,6 +374,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset) ...@@ -374,6 +374,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)
if (ret) if (ret)
return ret; return ret;
psb_intel_opregion_enable_asle(dev);
#if 0 #if 0
/*enable runtime pm at last*/ /*enable runtime pm at last*/
pm_runtime_enable(&dev->pdev->dev); pm_runtime_enable(&dev->pdev->dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment