Skip to content

Commit

Permalink
Merge branch 'gma500' (Alan's GMA patches)
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Linus Torvalds committed Jul 16, 2012
2 parents fce667c + 6469195 commit e5254a6
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 29 deletions.
35 changes: 19 additions & 16 deletions drivers/gpu/drm/gma500/cdv_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
8 changes: 3 additions & 5 deletions drivers/gpu/drm/gma500/opregion.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
5 changes: 5 additions & 0 deletions drivers/gpu/drm/gma500/opregion.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
12 changes: 4 additions & 8 deletions drivers/gpu/drm/gma500/psb_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
Expand All @@ -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,
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/gma500/psb_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit e5254a6

Please sign in to comment.