mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2025-12-28 16:50:20 +01:00
unify connector, i2c handling for atom and legacy
This commit is contained in:
parent
5f427e9aae
commit
b6f5b8ec71
5 changed files with 77 additions and 67 deletions
|
|
@ -62,12 +62,16 @@ static inline struct radeon_i2c_bus_rec radeon_lookup_gpio_for_ddc(struct drm_de
|
|||
i2c.put_data_reg = le16_to_cpu(gpio.usDataEnRegisterIndex) * 4;
|
||||
i2c.get_clk_reg = le16_to_cpu(gpio.usClkY_RegisterIndex) * 4;
|
||||
i2c.get_data_reg = le16_to_cpu(gpio.usDataY_RegisterIndex) * 4;
|
||||
i2c.a_clk_reg = le16_to_cpu(gpio.usClkA_RegisterIndex) * 4;
|
||||
i2c.a_data_reg = le16_to_cpu(gpio.usDataA_RegisterIndex) * 4;
|
||||
i2c.mask_clk_mask = (1 << gpio.ucClkMaskShift);
|
||||
i2c.mask_data_mask = (1 << gpio.ucDataMaskShift);
|
||||
i2c.put_clk_mask = (1 << gpio.ucClkEnShift);
|
||||
i2c.put_data_mask = (1 << gpio.ucDataEnShift);
|
||||
i2c.get_clk_mask = (1 << gpio.ucClkY_Shift);
|
||||
i2c.get_data_mask = (1 << gpio.ucDataY_Shift);
|
||||
i2c.a_clk_mask = (1 << gpio.ucClkA_Shift);
|
||||
i2c.a_data_mask = (1 << gpio.ucDataA_Shift);
|
||||
i2c.valid = true;
|
||||
|
||||
return i2c;
|
||||
|
|
|
|||
|
|
@ -57,8 +57,10 @@ struct radeon_i2c_bus_rec combios_setup_i2c_bus(int ddc_line)
|
|||
{
|
||||
struct radeon_i2c_bus_rec i2c;
|
||||
|
||||
i2c.mask_clk_mask = RADEON_GPIO_EN_1 | RADEON_GPIO_Y_1;
|
||||
i2c.mask_data_mask = RADEON_GPIO_EN_0 | RADEON_GPIO_Y_0;
|
||||
i2c.mask_clk_mask = RADEON_GPIO_EN_1;
|
||||
i2c.mask_data_mask = RADEON_GPIO_EN_0;
|
||||
i2c.a_clk_mask = RADEON_GPIO_A_1;
|
||||
i2c.a_data_mask = RADEON_GPIO_A_0;
|
||||
i2c.put_clk_mask = RADEON_GPIO_EN_1;
|
||||
i2c.put_data_mask = RADEON_GPIO_EN_0;
|
||||
i2c.get_clk_mask = RADEON_GPIO_Y_1;
|
||||
|
|
@ -67,6 +69,8 @@ struct radeon_i2c_bus_rec combios_setup_i2c_bus(int ddc_line)
|
|||
(ddc_line == RADEON_MDGPIO_EN_REG)) {
|
||||
i2c.mask_clk_reg = ddc_line;
|
||||
i2c.mask_data_reg = ddc_line;
|
||||
i2c.a_clk_reg = ddc_line;
|
||||
i2c.a_data_reg = ddc_line;
|
||||
i2c.put_clk_reg = ddc_line;
|
||||
i2c.put_data_reg = ddc_line;
|
||||
i2c.get_clk_reg = ddc_line + 4;
|
||||
|
|
@ -74,17 +78,19 @@ struct radeon_i2c_bus_rec combios_setup_i2c_bus(int ddc_line)
|
|||
} else {
|
||||
i2c.mask_clk_reg = ddc_line;
|
||||
i2c.mask_data_reg = ddc_line;
|
||||
i2c.a_clk_reg = ddc_line;
|
||||
i2c.a_data_reg = ddc_line;
|
||||
i2c.put_clk_reg = ddc_line;
|
||||
i2c.put_data_reg = ddc_line;
|
||||
i2c.get_clk_reg = ddc_line;
|
||||
i2c.get_data_reg = ddc_line;
|
||||
}
|
||||
|
||||
|
||||
if (ddc_line)
|
||||
i2c.valid = true;
|
||||
else
|
||||
i2c.valid = false;
|
||||
|
||||
|
||||
return i2c;
|
||||
}
|
||||
|
||||
|
|
@ -196,7 +202,7 @@ bool radeon_combios_get_tmds_info(struct radeon_encoder *encoder)
|
|||
if (n > 4) n = 4;
|
||||
for (i = 0; i < n; i++) {
|
||||
encoder->tmds_pll[i].value = radeon_bios32(dev_priv, tmp+i*10+0x08);
|
||||
encoder->tmds_pll[i].freq = radeon_bios16(dev_priv, tmp+i*10+0x10);
|
||||
encoder->tmds_pll[i].freq = radeon_bios16(dev_priv, tmp+i*10+0x10);
|
||||
}
|
||||
return true;
|
||||
} else if (ver == 4) {
|
||||
|
|
@ -219,7 +225,7 @@ static void radeon_apply_legacy_quirks(struct drm_device *dev, int bios_index)
|
|||
struct drm_radeon_private *dev_priv = dev->dev_private;
|
||||
struct radeon_mode_info *mode_info = &dev_priv->mode_info;
|
||||
|
||||
/* on XPRESS chips, CRT2_DDC and MONID_DCC both use the
|
||||
/* on XPRESS chips, CRT2_DDC and MONID_DCC both use the
|
||||
* MONID gpio, but use different pins.
|
||||
* CRT2_DDC uses the standard pinout, MONID_DDC uses
|
||||
* something else.
|
||||
|
|
@ -231,17 +237,6 @@ static void radeon_apply_legacy_quirks(struct drm_device *dev, int bios_index)
|
|||
mode_info->bios_connector[bios_index].ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_MONID);
|
||||
}
|
||||
|
||||
/* XPRESS desktop chips seem to have a proprietary connector listed for
|
||||
* DVI-D, try and do the right thing here.
|
||||
*/
|
||||
if ((dev_priv->flags & RADEON_IS_MOBILITY) &&
|
||||
(mode_info->bios_connector[bios_index].connector_type == CONNECTOR_LVDS)) {
|
||||
DRM_INFO("proprietary connector found. assuming DVI-D\n");
|
||||
mode_info->bios_connector[bios_index].dac_type = DAC_NONE;
|
||||
mode_info->bios_connector[bios_index].tmds_type = TMDS_EXT;
|
||||
mode_info->bios_connector[bios_index].connector_type = CONNECTOR_DVI_D;
|
||||
}
|
||||
|
||||
/* Certain IBM chipset RN50s have a BIOS reporting two VGAs,
|
||||
one with VGA DDC and one with CRT2 DDC. - kill the CRT2 DDC one */
|
||||
if (dev->pdev->device == 0x515e &&
|
||||
|
|
@ -272,16 +267,16 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
enum radeon_combios_ddc ddctype;
|
||||
enum radeon_combios_connector connector_type;
|
||||
int i;
|
||||
|
||||
|
||||
DRM_DEBUG("\n");
|
||||
offset = radeon_bios16(dev_priv, dev_priv->bios_header_start + 0x50);
|
||||
if (offset) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
entry = offset + 2 + i * 2;
|
||||
|
||||
|
||||
if (!radeon_bios16(dev_priv, entry))
|
||||
break;
|
||||
|
||||
|
||||
mode_info->bios_connector[i].valid = true;
|
||||
|
||||
tmp = radeon_bios16(dev_priv, entry);
|
||||
|
|
@ -291,7 +286,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
|
||||
switch(connector_type) {
|
||||
case CONNECTOR_PROPRIETARY_LEGACY:
|
||||
mode_info->bios_connector[i].connector_type = CONNECTOR_LVDS;
|
||||
mode_info->bios_connector[i].connector_type = CONNECTOR_DVI_D;
|
||||
break;
|
||||
case CONNECTOR_CRT_LEGACY:
|
||||
mode_info->bios_connector[i].connector_type = CONNECTOR_VGA;
|
||||
|
|
@ -406,7 +401,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
for (i = 0; i < ATOM_MAX_SUPPORTED_DEVICE; i++) {
|
||||
if (!mode_info->bios_connector[i].valid)
|
||||
continue;
|
||||
|
||||
|
||||
DRM_DEBUG("Port %d: ddc_type 0x%x, dac_type %d, tmds_type %d, connector type %d, hpd_mask %d\n",
|
||||
i, mode_info->bios_connector[i].ddc_i2c.mask_clk_reg,
|
||||
mode_info->bios_connector[i].dac_type,
|
||||
|
|
@ -417,4 +412,4 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -36,9 +36,9 @@ static int radeon_lvds_get_modes(struct drm_connector *connector)
|
|||
int ret = 0;
|
||||
struct edid *edid;
|
||||
|
||||
avivo_i2c_do_lock(radeon_connector, 1);
|
||||
radeon_i2c_do_lock(radeon_connector, 1);
|
||||
edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
|
||||
avivo_i2c_do_lock(radeon_connector, 0);
|
||||
radeon_i2c_do_lock(radeon_connector, 0);
|
||||
if (edid) {
|
||||
drm_mode_connector_update_edid_property(&radeon_connector->base, edid);
|
||||
ret = drm_add_edid_modes(&radeon_connector->base, edid);
|
||||
|
|
@ -53,7 +53,7 @@ static int radeon_lvds_get_modes(struct drm_connector *connector)
|
|||
return ret;
|
||||
|
||||
radeon_encoder_update_panel_size(lvds_encoder, connector);
|
||||
#endif
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -111,33 +111,33 @@ struct drm_connector_funcs radeon_lvds_connector_funcs = {
|
|||
.destroy = radeon_connector_destroy,
|
||||
};
|
||||
|
||||
static int radeon_atom_vga_get_modes(struct drm_connector *connector)
|
||||
static int radeon_vga_get_modes(struct drm_connector *connector)
|
||||
{
|
||||
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||
int ret;
|
||||
|
||||
ret = radeon_ddc_get_modes(radeon_connector);
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int radeon_atom_vga_mode_valid(struct drm_connector *connector,
|
||||
static int radeon_vga_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
{
|
||||
|
||||
return MODE_OK;
|
||||
}
|
||||
|
||||
static enum drm_connector_status radeon_atom_vga_detect(struct drm_connector *connector)
|
||||
static enum drm_connector_status radeon_vga_detect(struct drm_connector *connector)
|
||||
{
|
||||
struct edid *edid;
|
||||
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||
struct drm_encoder *encoder;
|
||||
struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
|
||||
avivo_i2c_do_lock(radeon_connector, 1);
|
||||
radeon_i2c_do_lock(radeon_connector, 1);
|
||||
edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
|
||||
avivo_i2c_do_lock(radeon_connector, 0);
|
||||
radeon_i2c_do_lock(radeon_connector, 0);
|
||||
if (edid) {
|
||||
kfree(edid);
|
||||
return connector_status_connected;
|
||||
|
|
@ -152,20 +152,20 @@ static enum drm_connector_status radeon_atom_vga_detect(struct drm_connector *co
|
|||
return encoder_funcs->detect(encoder, connector);
|
||||
}
|
||||
|
||||
struct drm_connector_helper_funcs radeon_atom_vga_connector_helper_funcs = {
|
||||
.get_modes = radeon_atom_vga_get_modes,
|
||||
.mode_valid = radeon_atom_vga_mode_valid,
|
||||
struct drm_connector_helper_funcs radeon_vga_connector_helper_funcs = {
|
||||
.get_modes = radeon_vga_get_modes,
|
||||
.mode_valid = radeon_vga_mode_valid,
|
||||
.best_encoder = radeon_best_single_encoder,
|
||||
};
|
||||
|
||||
struct drm_connector_funcs radeon_atom_vga_connector_funcs = {
|
||||
.detect = radeon_atom_vga_detect,
|
||||
struct drm_connector_funcs radeon_vga_connector_funcs = {
|
||||
.detect = radeon_vga_detect,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
.destroy = radeon_connector_destroy,
|
||||
};
|
||||
|
||||
|
||||
static enum drm_connector_status radeon_atom_dvi_detect(struct drm_connector *connector)
|
||||
static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connector)
|
||||
{
|
||||
struct edid *edid;
|
||||
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||
|
|
@ -175,9 +175,9 @@ static enum drm_connector_status radeon_atom_dvi_detect(struct drm_connector *co
|
|||
int i;
|
||||
enum drm_connector_status ret;
|
||||
|
||||
avivo_i2c_do_lock(radeon_connector, 1);
|
||||
radeon_i2c_do_lock(radeon_connector, 1);
|
||||
edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
|
||||
avivo_i2c_do_lock(radeon_connector, 0);
|
||||
radeon_i2c_do_lock(radeon_connector, 0);
|
||||
if (edid) {
|
||||
/* if the monitor is digital - set the bits */
|
||||
if (edid->digital)
|
||||
|
|
@ -212,7 +212,7 @@ static enum drm_connector_status radeon_atom_dvi_detect(struct drm_connector *co
|
|||
}
|
||||
|
||||
/* okay need to be smart in here about which encoder to pick */
|
||||
struct drm_encoder *radeon_atom_dvi_encoder(struct drm_connector *connector)
|
||||
struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
|
||||
{
|
||||
int enc_id = connector->encoder_ids[0];
|
||||
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||
|
|
@ -253,14 +253,14 @@ struct drm_encoder *radeon_atom_dvi_encoder(struct drm_connector *connector)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
struct drm_connector_helper_funcs radeon_atom_dvi_connector_helper_funcs = {
|
||||
.get_modes = radeon_atom_vga_get_modes,
|
||||
.mode_valid = radeon_atom_vga_mode_valid,
|
||||
.best_encoder = radeon_atom_dvi_encoder,
|
||||
struct drm_connector_helper_funcs radeon_dvi_connector_helper_funcs = {
|
||||
.get_modes = radeon_vga_get_modes,
|
||||
.mode_valid = radeon_vga_mode_valid,
|
||||
.best_encoder = radeon_dvi_encoder,
|
||||
};
|
||||
|
||||
struct drm_connector_funcs radeon_atom_dvi_connector_funcs = {
|
||||
.detect = radeon_atom_dvi_detect,
|
||||
struct drm_connector_funcs radeon_dvi_connector_funcs = {
|
||||
.detect = radeon_dvi_detect,
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
.destroy = radeon_connector_destroy,
|
||||
};
|
||||
|
|
@ -272,12 +272,12 @@ static struct connector_funcs {
|
|||
struct drm_connector_helper_funcs *helper_funcs;
|
||||
int conn_type;
|
||||
char *i2c_id;
|
||||
} connector_fns[] = {
|
||||
} connector_fns[] = {
|
||||
{ CONNECTOR_NONE, NULL, NULL, DRM_MODE_CONNECTOR_Unknown },
|
||||
{ CONNECTOR_VGA, &radeon_atom_vga_connector_funcs, &radeon_atom_vga_connector_helper_funcs, DRM_MODE_CONNECTOR_VGA , "VGA"},
|
||||
{ CONNECTOR_VGA, &radeon_vga_connector_funcs, &radeon_vga_connector_helper_funcs, DRM_MODE_CONNECTOR_VGA , "VGA"},
|
||||
{ CONNECTOR_LVDS, &radeon_lvds_connector_funcs, &radeon_lvds_connector_helper_funcs, DRM_MODE_CONNECTOR_LVDS, "LVDS" },
|
||||
{ CONNECTOR_DVI_A, &radeon_atom_vga_connector_funcs, &radeon_atom_vga_connector_helper_funcs, DRM_MODE_CONNECTOR_DVIA, "DVI" },
|
||||
{ CONNECTOR_DVI_I, &radeon_atom_dvi_connector_funcs, &radeon_atom_dvi_connector_helper_funcs, DRM_MODE_CONNECTOR_DVII, "DVI" },
|
||||
{ CONNECTOR_DVI_A, &radeon_vga_connector_funcs, &radeon_vga_connector_helper_funcs, DRM_MODE_CONNECTOR_DVIA, "DVI" },
|
||||
{ CONNECTOR_DVI_I, &radeon_dvi_connector_funcs, &radeon_dvi_connector_helper_funcs, DRM_MODE_CONNECTOR_DVII, "DVI" },
|
||||
|
||||
#if 0
|
||||
{ CONNECTOR_DVI_D, radeon_vga_connector_funcs, radeon_vga_connector_helper_funcs, DRM_MODE_CONNECTOR_VGA },
|
||||
|
|
@ -294,14 +294,14 @@ static struct connector_funcs {
|
|||
{ CONNECTOR_DIN, radeon_vga_connector_funcs, radeon_vga_connector_helper_funcs, DRM_MODE_CONNECTOR_VGA },
|
||||
{ CONNECTOR_DISPLAY_PORT, radeon_vga_connector_funcs, radeon_vga_connector_helper_funcs, DRM_MODE_CONNECTOR_VGA },
|
||||
#endif
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
struct drm_connector *radeon_connector_add(struct drm_device *dev, int bios_index)
|
||||
{
|
||||
struct radeon_connector *radeon_connector;
|
||||
struct drm_radeon_private *dev_priv = dev->dev_private;
|
||||
struct radeon_mode_info *mode_info = &dev_priv->mode_info;
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector *connector;
|
||||
int table_idx;
|
||||
|
||||
for (table_idx = 0; table_idx < ARRAY_SIZE(connector_fns); table_idx++) {
|
||||
|
|
@ -323,7 +323,7 @@ struct drm_connector *radeon_connector_add(struct drm_device *dev, int bios_inde
|
|||
connector_fns[table_idx].conn_type);
|
||||
|
||||
drm_connector_helper_add(&radeon_connector->base, connector_fns[table_idx].helper_funcs);
|
||||
|
||||
|
||||
if (mode_info->bios_connector[bios_index].ddc_i2c.valid) {
|
||||
radeon_connector->ddc_bus = radeon_i2c_create(dev, &mode_info->bios_connector[bios_index].ddc_i2c,
|
||||
connector_fns[table_idx].i2c_id);
|
||||
|
|
|
|||
|
|
@ -361,25 +361,35 @@ bool radeon_setup_enc_conn(struct drm_device *dev)
|
|||
|
||||
|
||||
|
||||
void avivo_i2c_do_lock(struct radeon_connector *radeon_connector, int lock_state)
|
||||
void radeon_i2c_do_lock(struct radeon_connector *radeon_connector, int lock_state)
|
||||
{
|
||||
struct drm_radeon_private *dev_priv = radeon_connector->base.dev->dev_private;
|
||||
uint32_t temp;
|
||||
struct radeon_i2c_bus_rec *rec = &radeon_connector->ddc_bus->rec;
|
||||
|
||||
if (lock_state) {
|
||||
temp = RADEON_READ(rec->a_clk_reg);
|
||||
temp &= ~(rec->a_clk_mask);
|
||||
RADEON_WRITE(rec->a_clk_reg, temp);
|
||||
|
||||
temp = RADEON_READ(rec->a_data_reg);
|
||||
temp &= ~(rec->a_data_mask);
|
||||
RADEON_WRITE(rec->a_data_reg, temp);
|
||||
}
|
||||
|
||||
temp = RADEON_READ(rec->mask_clk_reg);
|
||||
if (lock_state)
|
||||
temp |= rec->put_clk_mask;
|
||||
temp |= rec->mask_clk_mask;
|
||||
else
|
||||
temp &= ~rec->put_clk_mask;
|
||||
temp &= ~rec->mask_clk_mask;
|
||||
RADEON_WRITE(rec->mask_clk_reg, temp);
|
||||
temp = RADEON_READ(rec->mask_clk_reg);
|
||||
|
||||
temp = RADEON_READ(rec->mask_data_reg);
|
||||
if (lock_state)
|
||||
temp |= rec->put_data_mask;
|
||||
temp |= rec->mask_data_mask;
|
||||
else
|
||||
temp &= ~rec->put_data_mask;
|
||||
temp &= ~rec->mask_data_mask;
|
||||
RADEON_WRITE(rec->mask_data_reg, temp);
|
||||
temp = RADEON_READ(rec->mask_data_reg);
|
||||
}
|
||||
|
|
@ -392,12 +402,9 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
|
|||
|
||||
if (!radeon_connector->ddc_bus)
|
||||
return -1;
|
||||
|
||||
if (radeon_is_avivo(dev_priv))
|
||||
avivo_i2c_do_lock(radeon_connector, 1);
|
||||
radeon_i2c_do_lock(radeon_connector, 1);
|
||||
edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
|
||||
if (radeon_is_avivo(dev_priv))
|
||||
avivo_i2c_do_lock(radeon_connector, 0);
|
||||
radeon_i2c_do_lock(radeon_connector, 0);
|
||||
if (edid) {
|
||||
drm_mode_connector_update_edid_property(&radeon_connector->base, edid);
|
||||
ret = drm_add_edid_modes(&radeon_connector->base, edid);
|
||||
|
|
|
|||
|
|
@ -91,6 +91,8 @@ struct radeon_i2c_bus_rec {
|
|||
bool valid;
|
||||
uint32_t mask_clk_reg;
|
||||
uint32_t mask_data_reg;
|
||||
uint32_t a_clk_reg;
|
||||
uint32_t a_data_reg;
|
||||
uint32_t put_clk_reg;
|
||||
uint32_t put_data_reg;
|
||||
uint32_t get_clk_reg;
|
||||
|
|
@ -101,6 +103,8 @@ struct radeon_i2c_bus_rec {
|
|||
uint32_t put_data_mask;
|
||||
uint32_t get_clk_mask;
|
||||
uint32_t get_data_mask;
|
||||
uint32_t a_clk_mask;
|
||||
uint32_t a_data_mask;
|
||||
};
|
||||
|
||||
struct radeon_bios_connector {
|
||||
|
|
@ -121,7 +125,7 @@ struct radeon_tmds_pll {
|
|||
};
|
||||
|
||||
#define RADEON_MAX_BIOS_CONNECTOR 16
|
||||
|
||||
|
||||
#define RADEON_PLL_USE_BIOS_DIVS (1 << 0)
|
||||
#define RADEON_PLL_NO_ODD_POST_DIV (1 << 1)
|
||||
#define RADEON_PLL_USE_REF_DIV (1 << 2)
|
||||
|
|
@ -406,7 +410,7 @@ void radeon_atombios_init_crtc(struct drm_device *dev,
|
|||
struct radeon_crtc *radeon_crtc);
|
||||
void radeon_legacy_init_crtc(struct drm_device *dev,
|
||||
struct radeon_crtc *radeon_crtc);
|
||||
void avivo_i2c_do_lock(struct radeon_connector *radeon_connector, int lock_state);
|
||||
void radeon_i2c_do_lock(struct radeon_connector *radeon_connector, int lock_state);
|
||||
|
||||
void radeon_atom_static_pwrmgt_setup(struct drm_device *dev, int enable);
|
||||
void radeon_atom_dyn_clk_setup(struct drm_device *dev, int enable);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue