gma500: tidy up the CDV files
We are close to having PSB and CDV ready for moving from staging so it's time to get the polish out. Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
2b9428e203
commit
0cf0db5e3d
@ -129,7 +129,6 @@ static int cdv_backlight_setup(struct drm_device *dev)
|
||||
|
||||
static int cdv_set_brightness(struct backlight_device *bd)
|
||||
{
|
||||
struct drm_device *dev = bl_get_data(cdv_backlight_device);
|
||||
int level = bd->props.brightness;
|
||||
|
||||
/* Percentage 1-100% being valid */
|
||||
@ -218,8 +217,10 @@ static void cdv_init_pm(struct drm_device *dev)
|
||||
u32 pwr_cnt;
|
||||
int i;
|
||||
|
||||
dev_priv->apm_base = CDV_MSG_READ32(PSB_PUNIT_PORT, PSB_APMBA) & 0xFFFF;
|
||||
dev_priv->ospm_base = CDV_MSG_READ32(PSB_PUNIT_PORT, PSB_OSPMBA) & 0xFFFF;
|
||||
dev_priv->apm_base = CDV_MSG_READ32(PSB_PUNIT_PORT,
|
||||
PSB_APMBA) & 0xFFFF;
|
||||
dev_priv->ospm_base = CDV_MSG_READ32(PSB_PUNIT_PORT,
|
||||
PSB_OSPMBA) & 0xFFFF;
|
||||
|
||||
/* Force power on for now */
|
||||
pwr_cnt = inl(dev_priv->apm_base + PSB_APM_CMD);
|
||||
|
@ -128,11 +128,10 @@ static void cdv_intel_crt_mode_set(struct drm_encoder *encoder,
|
||||
if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
|
||||
adpa |= ADPA_VSYNC_ACTIVE_HIGH;
|
||||
|
||||
if (psb_intel_crtc->pipe == 0) {
|
||||
if (psb_intel_crtc->pipe == 0)
|
||||
adpa |= ADPA_PIPE_A_SELECT;
|
||||
} else {
|
||||
else
|
||||
adpa |= ADPA_PIPE_B_SELECT;
|
||||
}
|
||||
|
||||
REG_WRITE(adpa_reg, adpa);
|
||||
}
|
||||
@ -144,7 +143,8 @@ static void cdv_intel_crt_mode_set(struct drm_encoder *encoder,
|
||||
* \return true if CRT is connected.
|
||||
* \return false if CRT is disconnected.
|
||||
*/
|
||||
static bool cdv_intel_crt_detect_hotplug(struct drm_connector *connector, bool force)
|
||||
static bool cdv_intel_crt_detect_hotplug(struct drm_connector *connector,
|
||||
bool force)
|
||||
{
|
||||
struct drm_device *dev = connector->dev;
|
||||
u32 hotplug_en;
|
||||
@ -193,7 +193,8 @@ static bool cdv_intel_crt_detect_hotplug(struct drm_connector *connector, bool f
|
||||
return ret;
|
||||
}
|
||||
|
||||
static enum drm_connector_status cdv_intel_crt_detect(struct drm_connector *connector, bool force)
|
||||
static enum drm_connector_status cdv_intel_crt_detect(
|
||||
struct drm_connector *connector, bool force)
|
||||
{
|
||||
if (cdv_intel_crt_detect_hotplug(connector, force))
|
||||
return connector_status_connected;
|
||||
@ -245,7 +246,8 @@ static const struct drm_connector_funcs cdv_intel_crt_connector_funcs = {
|
||||
.set_property = cdv_intel_crt_set_property,
|
||||
};
|
||||
|
||||
static const struct drm_connector_helper_funcs cdv_intel_crt_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs
|
||||
cdv_intel_crt_connector_helper_funcs = {
|
||||
.mode_valid = cdv_intel_crt_mode_valid,
|
||||
.get_modes = cdv_intel_crt_get_modes,
|
||||
.best_encoder = psb_intel_best_encoder,
|
||||
@ -310,7 +312,8 @@ void cdv_intel_crt_init(struct drm_device *dev,
|
||||
connector->doublescan_allowed = 0;
|
||||
|
||||
drm_encoder_helper_add(encoder, &cdv_intel_crt_helper_funcs);
|
||||
drm_connector_helper_add(connector, &cdv_intel_crt_connector_helper_funcs);
|
||||
drm_connector_helper_add(connector,
|
||||
&cdv_intel_crt_connector_helper_funcs);
|
||||
|
||||
drm_sysfs_connector_add(connector);
|
||||
|
||||
|
@ -40,8 +40,7 @@ struct cdv_intel_p2_t {
|
||||
int p2_slow, p2_fast;
|
||||
};
|
||||
|
||||
struct cdv_intel_clock_t
|
||||
{
|
||||
struct cdv_intel_clock_t {
|
||||
/* given values */
|
||||
int n;
|
||||
int m1, m2;
|
||||
@ -124,7 +123,8 @@ static const struct cdv_intel_limit_t cdv_intel_limits[] = {
|
||||
ret__ = -ETIMEDOUT; \
|
||||
break; \
|
||||
} \
|
||||
if (W && !in_dbg_master()) msleep(W); \
|
||||
if (W && !in_dbg_master()) \
|
||||
msleep(W); \
|
||||
} \
|
||||
ret__; \
|
||||
})
|
||||
@ -331,7 +331,6 @@ cdv_dpll_set_clock_cdv(struct drm_device *dev, struct drm_crtc *crtc,
|
||||
lane_value |= LANE_PLL_ENABLE;
|
||||
cdv_sb_write(dev, lane_reg, lane_value);
|
||||
|
||||
|
||||
lane_reg = PSB_LANE3;
|
||||
cdv_sb_read(dev, lane_reg, &lane_value);
|
||||
lane_value &= ~(LANE_PLL_MASK);
|
||||
@ -362,7 +361,8 @@ bool cdv_intel_pipe_has_type(struct drm_crtc *crtc, int type)
|
||||
return false;
|
||||
}
|
||||
|
||||
static const struct cdv_intel_limit_t *cdv_intel_limit(struct drm_crtc *crtc, int refclk)
|
||||
static const struct cdv_intel_limit_t *cdv_intel_limit(struct drm_crtc *crtc,
|
||||
int refclk)
|
||||
{
|
||||
const struct cdv_intel_limit_t *limit;
|
||||
if (cdv_intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
|
||||
@ -448,17 +448,20 @@ static bool cdv_intel_find_best_PLL(struct drm_crtc *crtc, int target,
|
||||
|
||||
memset(best_clock, 0, sizeof(*best_clock));
|
||||
clock.m1 = 0;
|
||||
/* m1 is reserved as 0 in CDV, n is a ring counter. So skip the m1 loop */
|
||||
/* m1 is reserved as 0 in CDV, n is a ring counter.
|
||||
So skip the m1 loop */
|
||||
for (clock.n = limit->n.min; clock.n <= limit->n.max; clock.n++) {
|
||||
for (clock.m2 = limit->m2.min; clock.m2 <= limit->m2.max;
|
||||
clock.m2++) {
|
||||
for (clock.p1 = limit->p1.min; clock.p1 <= limit->p1.max;
|
||||
for (clock.p1 = limit->p1.min;
|
||||
clock.p1 <= limit->p1.max;
|
||||
clock.p1++) {
|
||||
int this_err;
|
||||
|
||||
cdv_intel_clock(dev, refclk, &clock);
|
||||
|
||||
if (!cdv_intel_PLL_is_valid(crtc, limit, &clock))
|
||||
if (!cdv_intel_PLL_is_valid(crtc,
|
||||
limit, &clock))
|
||||
continue;
|
||||
|
||||
this_err = abs(clock.dot - target);
|
||||
@ -808,7 +811,7 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
dpll |= DPLLB_MODE_LVDS;
|
||||
else
|
||||
dpll |= DPLLB_MODE_DAC_SERIAL;
|
||||
//dpll |= (2 << 11);
|
||||
/* dpll |= (2 << 11); */
|
||||
|
||||
/* setup pipeconf */
|
||||
pipeconf = REG_READ(pipeconf_reg);
|
||||
@ -824,9 +827,7 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
dspcntr |= DISPLAY_PLANE_ENABLE;
|
||||
pipeconf |= PIPEACONF_ENABLE;
|
||||
|
||||
REG_WRITE(dpll_reg,
|
||||
dpll | DPLL_VGA_MODE_DIS |
|
||||
DPLL_SYNCLOCK_ENABLE);
|
||||
REG_WRITE(dpll_reg, dpll | DPLL_VGA_MODE_DIS | DPLL_SYNCLOCK_ENABLE);
|
||||
REG_READ(dpll_reg);
|
||||
|
||||
cdv_dpll_set_clock_cdv(dev, crtc, &clock);
|
||||
@ -864,7 +865,6 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
|
||||
dpll |= DPLL_VCO_ENABLE;
|
||||
|
||||
|
||||
/* Disable the panel fitter if it was on our pipe */
|
||||
if (cdv_intel_panel_fitter_pipe(dev) == pipe)
|
||||
REG_WRITE(PFIT_CONTROL, 0);
|
||||
@ -873,8 +873,7 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
drm_mode_debug_printmodeline(mode);
|
||||
|
||||
REG_WRITE(dpll_reg,
|
||||
(REG_READ(dpll_reg) & ~DPLL_LOCK) |
|
||||
DPLL_VCO_ENABLE);
|
||||
(REG_READ(dpll_reg) & ~DPLL_LOCK) | DPLL_VCO_ENABLE);
|
||||
REG_READ(dpll_reg);
|
||||
/* Wait for the clocks to stabilize. */
|
||||
udelay(150); /* 42 usec w/o calibration, 110 with. rounded up. */
|
||||
@ -885,12 +884,8 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
}
|
||||
|
||||
{
|
||||
int sdvo_pixel_multiply =
|
||||
adjusted_mode->clock / mode->clock;
|
||||
REG_WRITE(dpll_md_reg,
|
||||
(0 << DPLL_MD_UDI_DIVIDER_SHIFT) |
|
||||
((sdvo_pixel_multiply -
|
||||
1) << DPLL_MD_UDI_MULTIPLIER_SHIFT));
|
||||
int sdvo_pixel_multiply = adjusted_mode->clock / mode->clock;
|
||||
REG_WRITE(dpll_md_reg, (0 << DPLL_MD_UDI_DIVIDER_SHIFT) | ((sdvo_pixel_multiply - 1) << DPLL_MD_UDI_MULTIPLIER_SHIFT));
|
||||
}
|
||||
|
||||
REG_WRITE(htot_reg, (adjusted_mode->crtc_hdisplay - 1) |
|
||||
|
@ -92,7 +92,6 @@ static bool cdv_hdmi_mode_fixup(struct drm_encoder *encoder,
|
||||
struct drm_display_mode *mode,
|
||||
struct drm_display_mode *adjusted_mode)
|
||||
{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -105,11 +104,10 @@ static void cdv_hdmi_dpms(struct drm_encoder *encoder, int mode)
|
||||
|
||||
hdmib = REG_READ(hdmi_priv->hdmi_reg);
|
||||
|
||||
if (mode != DRM_MODE_DPMS_ON) {
|
||||
if (mode != DRM_MODE_DPMS_ON)
|
||||
REG_WRITE(hdmi_priv->hdmi_reg, hdmib & ~HDMIB_PORT_EN);
|
||||
} else {
|
||||
else
|
||||
REG_WRITE(hdmi_priv->hdmi_reg, hdmib | HDMIB_PORT_EN);
|
||||
}
|
||||
REG_READ(hdmi_priv->hdmi_reg);
|
||||
}
|
||||
|
||||
@ -132,11 +130,12 @@ static void cdv_hdmi_restore(struct drm_connector *connector)
|
||||
REG_READ(hdmi_priv->hdmi_reg);
|
||||
}
|
||||
|
||||
static enum drm_connector_status cdv_hdmi_detect(struct drm_connector *connector, bool force)
|
||||
static enum drm_connector_status cdv_hdmi_detect(
|
||||
struct drm_connector *connector, bool force)
|
||||
{
|
||||
struct drm_device *dev = connector->dev;
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
struct psb_intel_output *psb_intel_output = to_psb_intel_output(connector);
|
||||
struct psb_intel_output *psb_intel_output =
|
||||
to_psb_intel_output(connector);
|
||||
struct mid_intel_hdmi_priv *hdmi_priv = psb_intel_output->dev_priv;
|
||||
struct edid *edid = NULL;
|
||||
enum drm_connector_status status = connector_status_disconnected;
|
||||
@ -149,8 +148,10 @@ static enum drm_connector_status cdv_hdmi_detect(struct drm_connector *connector
|
||||
if (edid) {
|
||||
if (edid->input & DRM_EDID_INPUT_DIGITAL) {
|
||||
status = connector_status_connected;
|
||||
hdmi_priv->has_hdmi_sink = drm_detect_hdmi_monitor(edid);
|
||||
hdmi_priv->has_hdmi_audio = drm_detect_monitor_audio(edid);
|
||||
hdmi_priv->has_hdmi_sink =
|
||||
drm_detect_hdmi_monitor(edid);
|
||||
hdmi_priv->has_hdmi_audio =
|
||||
drm_detect_monitor_audio(edid);
|
||||
}
|
||||
|
||||
psb_intel_output->base.display_info.raw_edid = NULL;
|
||||
@ -184,13 +185,15 @@ static int cdv_hdmi_set_property(struct drm_connector *connector,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (drm_connector_property_get_value(connector, property, &curValue))
|
||||
if (drm_connector_property_get_value(connector,
|
||||
property, &curValue))
|
||||
return -1;
|
||||
|
||||
if (curValue == value)
|
||||
return 0;
|
||||
|
||||
if (drm_connector_property_set_value(connector, property, value))
|
||||
if (drm_connector_property_set_value(connector,
|
||||
property, value))
|
||||
return -1;
|
||||
|
||||
centre = (curValue == DRM_MODE_SCALE_NO_SCALE) ||
|
||||
@ -203,7 +206,8 @@ static int cdv_hdmi_set_property(struct drm_connector *connector,
|
||||
encoder->crtc->x, encoder->crtc->y, encoder->crtc->fb))
|
||||
return -1;
|
||||
} else {
|
||||
struct drm_encoder_helper_funcs *helpers = encoder->helper_private;
|
||||
struct drm_encoder_helper_funcs *helpers
|
||||
= encoder->helper_private;
|
||||
helpers->mode_set(encoder, &crtc->saved_mode,
|
||||
&crtc->saved_adjusted_mode);
|
||||
}
|
||||
@ -217,7 +221,8 @@ static int cdv_hdmi_set_property(struct drm_connector *connector,
|
||||
*/
|
||||
static int cdv_hdmi_get_modes(struct drm_connector *connector)
|
||||
{
|
||||
struct psb_intel_output *psb_intel_output = to_psb_intel_output(connector);
|
||||
struct psb_intel_output *psb_intel_output =
|
||||
to_psb_intel_output(connector);
|
||||
struct edid *edid = NULL;
|
||||
int ret = 0;
|
||||
|
||||
@ -250,8 +255,8 @@ static int cdv_hdmi_mode_valid(struct drm_connector *connector,
|
||||
return MODE_NO_INTERLACE;
|
||||
|
||||
/*
|
||||
* FIXME: fornow we limit the size to 1680x1050 on CDV, otherwise it will
|
||||
* go beyond the stolen memory size allocated to the Framebuffer
|
||||
* FIXME: for now we limit the size to 1680x1050 on CDV, otherwise it
|
||||
* will go beyond the stolen memory size allocated to the framebuffer
|
||||
*/
|
||||
if (mode->hdisplay > 1680)
|
||||
return MODE_PANEL;
|
||||
@ -280,7 +285,8 @@ static const struct drm_encoder_helper_funcs cdv_hdmi_helper_funcs = {
|
||||
.commit = psb_intel_encoder_commit,
|
||||
};
|
||||
|
||||
static const struct drm_connector_helper_funcs cdv_hdmi_connector_helper_funcs = {
|
||||
static const struct drm_connector_helper_funcs
|
||||
cdv_hdmi_connector_helper_funcs = {
|
||||
.get_modes = cdv_hdmi_get_modes,
|
||||
.mode_valid = cdv_hdmi_mode_valid,
|
||||
.best_encoder = psb_intel_best_encoder,
|
||||
@ -296,7 +302,8 @@ static const struct drm_connector_funcs cdv_hdmi_connector_funcs = {
|
||||
.destroy = cdv_hdmi_destroy,
|
||||
};
|
||||
|
||||
void cdv_hdmi_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev, int reg)
|
||||
void cdv_hdmi_init(struct drm_device *dev,
|
||||
struct psb_intel_mode_device *mode_dev, int reg)
|
||||
{
|
||||
struct psb_intel_output *psb_intel_output;
|
||||
struct drm_connector *connector;
|
||||
@ -334,7 +341,8 @@ void cdv_hdmi_init(struct drm_device *dev, struct psb_intel_mode_device *mode_de
|
||||
connector->interlace_allowed = false;
|
||||
connector->doublescan_allowed = false;
|
||||
|
||||
drm_connector_attach_property(connector, dev->mode_config.scaling_mode_property, DRM_MODE_SCALE_FULLSCREEN);
|
||||
drm_connector_attach_property(connector,
|
||||
dev->mode_config.scaling_mode_property, DRM_MODE_SCALE_FULLSCREEN);
|
||||
|
||||
switch (reg) {
|
||||
case SDVOB:
|
||||
@ -352,16 +360,12 @@ void cdv_hdmi_init(struct drm_device *dev, struct psb_intel_mode_device *mode_de
|
||||
psb_intel_output->ddc_bus = psb_intel_i2c_create(dev,
|
||||
ddc_bus, (reg == SDVOB) ? "HDMIB" : "HDMIC");
|
||||
|
||||
if (psb_intel_output->ddc_bus) {
|
||||
/* HACKS_JLIU7 */
|
||||
DRM_INFO("Enter cdv_hdmi_init, i2c_adapter is availabe.\n");
|
||||
|
||||
} else {
|
||||
printk(KERN_ALERT "No ddc adapter available!\n");
|
||||
if (!psb_intel_output->ddc_bus) {
|
||||
dev_err(dev->dev, "No ddc adapter available!\n");
|
||||
goto failed_ddc;
|
||||
}
|
||||
psb_intel_output->hdmi_i2c_adapter = &(psb_intel_output->ddc_bus->adapter);
|
||||
|
||||
psb_intel_output->hdmi_i2c_adapter =
|
||||
&(psb_intel_output->ddc_bus->adapter);
|
||||
hdmi_priv->dev = dev;
|
||||
drm_sysfs_connector_add(connector);
|
||||
return;
|
||||
|
@ -390,7 +390,8 @@ static void cdv_intel_lvds_mode_set(struct drm_encoder *encoder,
|
||||
* This connector should only have
|
||||
* been set up if the LVDS was actually connected anyway.
|
||||
*/
|
||||
static enum drm_connector_status cdv_intel_lvds_detect(struct drm_connector *connector, bool force)
|
||||
static enum drm_connector_status cdv_intel_lvds_detect(
|
||||
struct drm_connector *connector, bool force)
|
||||
{
|
||||
return connector_status_connected;
|
||||
}
|
||||
@ -505,19 +506,22 @@ int cdv_intel_lvds_set_property(struct drm_connector *connector,
|
||||
#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE
|
||||
struct drm_psb_private *dev_priv =
|
||||
encoder->dev->dev_private;
|
||||
struct backlight_device *bd = dev_priv->backlight_device;
|
||||
struct backlight_device *bd =
|
||||
dev_priv->backlight_device;
|
||||
bd->props.brightness = value;
|
||||
backlight_update_status(bd);
|
||||
#endif
|
||||
}
|
||||
} else if (!strcmp(property->name, "DPMS") && encoder) {
|
||||
struct drm_encoder_helper_funcs *helpers = encoder->helper_private;
|
||||
struct drm_encoder_helper_funcs *helpers =
|
||||
encoder->helper_private;
|
||||
helpers->dpms(encoder, value);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct drm_encoder_helper_funcs cdv_intel_lvds_helper_funcs = {
|
||||
static const struct drm_encoder_helper_funcs
|
||||
cdv_intel_lvds_helper_funcs = {
|
||||
.dpms = cdv_intel_lvds_encoder_dpms,
|
||||
.mode_fixup = cdv_intel_lvds_mode_fixup,
|
||||
.prepare = cdv_intel_lvds_prepare,
|
||||
|
Loading…
Reference in New Issue
Block a user