summaryrefslogtreecommitdiff
path: root/linux-core/intel_tv.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2008-05-30 15:03:12 +1000
committerDave Airlie <airlied@redhat.com>2008-05-30 15:10:04 +1000
commit9d38448ed33aaff324cc4bbe1e0878593e97d07d (patch)
treef6e1dcfb4d2fbdca3db979580ecce800d737feea /linux-core/intel_tv.c
parent6aeef92c0cad784a5019ea90d97ab81f4e51fdd9 (diff)
modesetting: the great renaming.
Okay we have crtc, encoder and connectors. No more outputs exposed beyond driver internals I've broken intel tv connector stuff. Really for TV we should have one TV connector, with a sub property for the type of signal been driven over it
Diffstat (limited to 'linux-core/intel_tv.c')
-rw-r--r--linux-core/intel_tv.c173
1 files changed, 86 insertions, 87 deletions
diff --git a/linux-core/intel_tv.c b/linux-core/intel_tv.c
index e3e78a9f..330c204a 100644
--- a/linux-core/intel_tv.c
+++ b/linux-core/intel_tv.c
@@ -898,9 +898,9 @@ const static struct tv_mode tv_modes[] = {
#define NUM_TV_MODES sizeof(tv_modes) / sizeof (tv_modes[0])
static void
-intel_tv_dpms(struct drm_output *output, int mode)
+intel_tv_dpms(struct drm_connector *connector, int mode)
{
- struct drm_device *dev = output->dev;
+ struct drm_device *dev = connector->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
switch(mode) {
@@ -916,11 +916,11 @@ intel_tv_dpms(struct drm_output *output, int mode)
}
static void
-intel_tv_save(struct drm_output *output)
+intel_tv_save(struct drm_connector *connector)
{
- struct drm_device *dev = output->dev;
+ struct drm_device *dev = connector->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_output *intel_output = to_intel_output(output);
+ struct intel_output *intel_output = to_intel_output(connector);
struct intel_tv_priv *tv_priv = intel_output->dev_priv;
int i;
@@ -966,13 +966,13 @@ intel_tv_save(struct drm_output *output)
}
static void
-intel_tv_restore(struct drm_output *output)
+intel_tv_restore(struct drm_connector *connector)
{
- struct drm_device *dev = output->dev;
+ struct drm_device *dev = connector->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_output *intel_output = to_intel_output(output);
+ struct intel_output *intel_output = to_intel_output(connector);
struct intel_tv_priv *tv_priv = intel_output->dev_priv;
- struct drm_crtc *crtc = output->crtc;
+ struct drm_crtc *crtc = connector->crtc;
struct intel_crtc *intel_crtc;
int i;
@@ -1067,18 +1067,18 @@ intel_tv_mode_lookup (char *tv_format)
}
static const struct tv_mode *
-intel_tv_mode_find (struct drm_output *output)
+intel_tv_mode_find (struct intel_output *intel_output)
{
- struct intel_output *intel_output = to_intel_output(output);
struct intel_tv_priv *tv_priv = intel_output->dev_priv;
return intel_tv_mode_lookup(tv_priv->tv_format);
}
static enum drm_mode_status
-intel_tv_mode_valid(struct drm_output *output, struct drm_display_mode *mode)
+intel_tv_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode)
{
- const struct tv_mode *tv_mode = intel_tv_mode_find(output);
+ struct intel_output *intel_output = to_intel_output(connector);
+ const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output);
/* Ensure TV refresh is close to desired refresh */
if (tv_mode && abs(tv_mode->refresh - drm_mode_vrefresh(mode)) < 1)
@@ -1088,21 +1088,22 @@ intel_tv_mode_valid(struct drm_output *output, struct drm_display_mode *mode)
static bool
-intel_tv_mode_fixup(struct drm_output *output, struct drm_display_mode *mode,
+intel_tv_mode_fixup(struct drm_connector *connector, struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
{
- struct drm_device *dev = output->dev;
+ struct drm_device *dev = connector->dev;
struct drm_mode_config *drm_config = &dev->mode_config;
- const struct tv_mode *tv_mode = intel_tv_mode_find (output);
- struct drm_output *other_output;
+ struct intel_output *intel_output = to_intel_output(connector);
+ const struct tv_mode *tv_mode = intel_tv_mode_find (intel_output);
+ struct drm_connector *other_connector;
if (!tv_mode)
return FALSE;
- /* FIXME: lock output list */
- list_for_each_entry(other_output, &drm_config->output_list, head) {
- if (other_output != output &&
- other_output->crtc == output->crtc)
+ /* FIXME: lock connector list */
+ list_for_each_entry(other_connector, &drm_config->connector_list, head) {
+ if (other_connector != connector &&
+ other_connector->crtc == connector->crtc)
return FALSE;
}
@@ -1111,16 +1112,16 @@ intel_tv_mode_fixup(struct drm_output *output, struct drm_display_mode *mode,
}
static void
-intel_tv_mode_set(struct drm_output *output, struct drm_display_mode *mode,
+intel_tv_mode_set(struct drm_connector *connector, struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
{
- struct drm_device *dev = output->dev;
+ struct drm_device *dev = connector->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct drm_crtc *crtc = output->crtc;
+ struct drm_crtc *crtc = connector->crtc;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- struct intel_output *intel_output = to_intel_output(output);
+ struct intel_output *intel_output = to_intel_output(connector);
struct intel_tv_priv *tv_priv = intel_output->dev_priv;
- const struct tv_mode *tv_mode = intel_tv_mode_find(output);
+ const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output);
u32 tv_ctl;
u32 hctl1, hctl2, hctl3;
u32 vctl1, vctl2, vctl3, vctl4, vctl5, vctl6, vctl7;
@@ -1137,14 +1138,14 @@ intel_tv_mode_set(struct drm_output *output, struct drm_display_mode *mode,
switch (tv_priv->type) {
default:
- case ConnectorUnknown:
- case ConnectorComposite:
+ case DRM_MODE_CONNECTOR_Unknown:
+ case DRM_MODE_CONNECTOR_Composite:
tv_ctl |= TV_ENC_OUTPUT_COMPOSITE;
video_levels = tv_mode->composite_levels;
color_conversion = tv_mode->composite_color;
burst_ena = tv_mode->burst_ena;
break;
- case ConnectorComponent:
+ case DRM_MODE_CONNECTOR_Component:
tv_ctl |= TV_ENC_OUTPUT_COMPONENT;
video_levels = &component_levels;
if (tv_mode->burst_ena)
@@ -1153,7 +1154,7 @@ intel_tv_mode_set(struct drm_output *output, struct drm_display_mode *mode,
color_conversion = &hdtv_csc_yprpb;
burst_ena = FALSE;
break;
- case ConnectorSVIDEO:
+ case DRM_MODE_CONNECTOR_SVIDEO:
tv_ctl |= TV_ENC_OUTPUT_SVIDEO;
video_levels = tv_mode->svideo_levels;
color_conversion = tv_mode->svideo_color;
@@ -1355,15 +1356,15 @@ static const struct drm_display_mode reported_modes[] = {
* \return FALSE if TV is disconnected.
*/
static int
-intel_tv_detect_type (struct drm_crtc *crtc, struct drm_output *output)
+intel_tv_detect_type (struct drm_crtc *crtc, struct drm_connector *connector)
{
- struct drm_device *dev = output->dev;
+ struct drm_device *dev = connector->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_output *intel_output = to_intel_output(output);
+ struct intel_output *intel_output = to_intel_output(connector);
u32 pipeastat, pipeastat_save;
u32 tv_ctl, save_tv_ctl;
u32 tv_dac, save_tv_dac;
- int type = ConnectorUnknown;
+ int type = DRM_MODE_CONNECTOR_Unknown;
tv_dac = I915_READ(TV_DAC);
@@ -1410,13 +1411,13 @@ intel_tv_detect_type (struct drm_crtc *crtc, struct drm_output *output)
*/
if ((tv_dac & TVDAC_SENSE_MASK) == (TVDAC_B_SENSE | TVDAC_C_SENSE)) {
DRM_DEBUG("Detected Composite TV connection\n");
- type = ConnectorComposite;
+ type = DRM_MODE_CONNECTOR_Composite;
} else if ((tv_dac & (TVDAC_A_SENSE|TVDAC_B_SENSE)) == TVDAC_A_SENSE) {
DRM_DEBUG("Detected S-Video TV connection\n");
- type = ConnectorSVIDEO;
+ type = DRM_MODE_CONNECTOR_SVIDEO;
} else if ((tv_dac & TVDAC_SENSE_MASK) == 0) {
DRM_DEBUG("Detected Component TV connection\n");
- type = ConnectorComponent;
+ type = DRM_MODE_CONNECTOR_Component;
} else {
DRM_DEBUG("No TV connection detected\n");
type = -1;
@@ -1432,15 +1433,15 @@ intel_tv_detect_type (struct drm_crtc *crtc, struct drm_output *output)
/**
* Detect the TV connection.
*
- * Currently this always returns OUTPUT_STATUS_UNKNOWN, as we need to be sure
+ * Currently this always returns CONNECTOR_STATUS_UNKNOWN, as we need to be sure
* we have a pipe programmed in order to probe the TV.
*/
-static enum drm_output_status
-intel_tv_detect(struct drm_output *output)
+static enum drm_connector_status
+intel_tv_detect(struct drm_connector *connector)
{
struct drm_crtc *crtc;
struct drm_display_mode mode;
- struct intel_output *intel_output = to_intel_output(output);
+ struct intel_output *intel_output = to_intel_output(connector);
struct intel_tv_priv *tv_priv = intel_output->dev_priv;
int dpms_mode;
int type = tv_priv->type;
@@ -1448,30 +1449,31 @@ intel_tv_detect(struct drm_output *output)
mode = reported_modes[0];
drm_mode_set_crtcinfo(&mode, CRTC_INTERLACE_HALVE_V);
- if (output->crtc) {
- type = intel_tv_detect_type(output->crtc, output);
+ if (connector->crtc) {
+ type = intel_tv_detect_type(connector->crtc, connector);
} else {
- crtc = intel_get_load_detect_pipe(output, &mode, &dpms_mode);
+ crtc = intel_get_load_detect_pipe(connector, &mode, &dpms_mode);
if (crtc) {
- type = intel_tv_detect_type(crtc, output);
- intel_release_load_detect_pipe(output, dpms_mode);
+ type = intel_tv_detect_type(crtc, connector);
+ intel_release_load_detect_pipe(connector, dpms_mode);
} else
type = -1;
}
+#if 0
if (type != tv_priv->type) {
struct drm_property *connector_property =
- output->dev->mode_config.connector_type_property;
+ connector->dev->mode_config.connector_type_property;
tv_priv->type = type;
- drm_output_property_set_value(output, connector_property,
+ drm_connector_property_set_value(connector, connector_property,
type);
}
-
+#endif
if (type < 0)
- return output_status_disconnected;
+ return connector_status_disconnected;
- return output_status_connected;
+ return connector_status_connected;
}
static struct input_res {
@@ -1496,10 +1498,11 @@ static struct input_res {
*/
static int
-intel_tv_get_modes(struct drm_output *output)
+intel_tv_get_modes(struct drm_connector *connector)
{
struct drm_display_mode *mode_ptr;
- const struct tv_mode *tv_mode = intel_tv_mode_find(output);
+ struct intel_output *intel_output = to_intel_output(connector);
+ const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output);
int j;
for (j = 0; j < sizeof(input_res_table) / sizeof(input_res_table[0]);
@@ -1538,33 +1541,33 @@ intel_tv_get_modes(struct drm_output *output)
mode_ptr->htotal / 1000) / 1000;
mode_ptr->type = DRM_MODE_TYPE_DRIVER;
- drm_mode_probed_add(output, mode_ptr);
+ drm_mode_probed_add(connector, mode_ptr);
}
return 0;
}
static void
-intel_tv_destroy (struct drm_output *output)
+intel_tv_destroy (struct drm_connector *connector)
{
- struct intel_output *intel_output = to_intel_output(output);
+ struct intel_output *intel_output = to_intel_output(connector);
- drm_output_cleanup(output);
+ drm_connector_cleanup(connector);
drm_free(intel_output, sizeof(struct intel_output) + sizeof(struct intel_tv_priv),
DRM_MEM_DRIVER);
}
static bool
-intel_tv_set_property(struct drm_output *output, struct drm_property *property,
+intel_tv_set_property(struct drm_connector *connector, struct drm_property *property,
uint64_t val)
{
- struct drm_device *dev = output->dev;
- struct intel_output *intel_output = to_intel_output(output);
+ struct drm_device *dev = connector->dev;
+ struct intel_output *intel_output = to_intel_output(connector);
struct intel_tv_priv *tv_priv = intel_output->dev_priv;
int ret = 0;
- ret = drm_output_property_set_value(output, property, val);
+ ret = drm_connector_property_set_value(connector, property, val);
if (ret < 0)
goto out;
@@ -1582,25 +1585,25 @@ intel_tv_set_property(struct drm_output *output, struct drm_property *property,
goto out;
}
tv_priv->tv_format = tv_modes[val].name;
- intel_tv_mode_set(output, NULL, NULL);
+ intel_tv_mode_set(connector, NULL, NULL);
} else {
ret = -EINVAL;
goto out;
}
- intel_tv_mode_set(output, NULL, NULL);
+ intel_tv_mode_set(connector, NULL, NULL);
out:
return ret;
}
-static const struct drm_output_helper_funcs intel_tv_helper_funcs = {
+static const struct drm_connector_helper_funcs intel_tv_helper_funcs = {
.mode_fixup = intel_tv_mode_fixup,
- .prepare = intel_output_prepare,
+ .prepare = intel_connector_prepare,
.mode_set = intel_tv_mode_set,
- .commit = intel_output_commit,
+ .commit = intel_connector_commit,
};
-static const struct drm_output_funcs intel_tv_output_funcs = {
+static const struct drm_connector_funcs intel_tv_connector_funcs = {
.dpms = intel_tv_dpms,
.save = intel_tv_save,
.restore = intel_tv_restore,
@@ -1615,7 +1618,7 @@ void
intel_tv_init(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- struct drm_output *output;
+ struct drm_connector *connector;
struct intel_output *intel_output;
struct intel_tv_priv *tv_priv;
u32 tv_dac_on, tv_dac_off, save_tv_dac;
@@ -1657,17 +1660,17 @@ intel_tv_init(struct drm_device *dev)
if (!intel_output) {
return;
}
- output = &intel_output->base;
+ connector = &intel_output->base;
- drm_output_init(dev, output, &intel_tv_output_funcs,
- DRM_MODE_OUTPUT_TVDAC);
+ drm_connector_init(dev, connector, &intel_tv_connector_funcs,
+ DRM_MODE_CONNECTOR_Unknown);
tv_priv = (struct intel_tv_priv *)(intel_output + 1);
intel_output->type = INTEL_OUTPUT_TVOUT;
- output->possible_crtcs = ((1 << 0) | (1 << 1));
- output->possible_clones = (1 << INTEL_OUTPUT_TVOUT);
+ connector->possible_crtcs = ((1 << 0) | (1 << 1));
+ connector->possible_clones = (1 << INTEL_OUTPUT_TVOUT);
intel_output->dev_priv = tv_priv;
- tv_priv->type = ConnectorUnknown;
+ tv_priv->type = DRM_MODE_CONNECTOR_Unknown;
/* BIOS margin values */
tv_priv->margin[TV_MARGIN_LEFT] = 54;
@@ -1677,13 +1680,9 @@ intel_tv_init(struct drm_device *dev)
tv_priv->tv_format = kstrdup(tv_modes[initial_mode].name, GFP_KERNEL);
- drm_output_helper_add(output, &intel_tv_helper_funcs);
- output->interlace_allowed = FALSE;
- output->doublescan_allowed = FALSE;
-
- drm_output_attach_property(output,
- dev->mode_config.connector_type_property,
- ConnectorUnknown);
+ drm_connector_helper_add(connector, &intel_tv_helper_funcs);
+ connector->interlace_allowed = FALSE;
+ connector->doublescan_allowed = FALSE;
/* Create TV properties then attach current values */
tv_format_names = drm_alloc(sizeof(char *) * NUM_TV_MODES,
@@ -1694,20 +1693,20 @@ intel_tv_init(struct drm_device *dev)
tv_format_names[i] = tv_modes[i].name;
drm_create_tv_properties(dev, NUM_TV_MODES, tv_format_names);
- drm_output_attach_property(output, dev->mode_config.tv_mode_property,
+ drm_connector_attach_property(connector, dev->mode_config.tv_mode_property,
initial_mode);
- drm_output_attach_property(output,
+ drm_connector_attach_property(connector,
dev->mode_config.tv_left_margin_property,
tv_priv->margin[TV_MARGIN_LEFT]);
- drm_output_attach_property(output,
+ drm_connector_attach_property(connector,
dev->mode_config.tv_top_margin_property,
tv_priv->margin[TV_MARGIN_TOP]);
- drm_output_attach_property(output,
+ drm_connector_attach_property(connector,
dev->mode_config.tv_right_margin_property,
tv_priv->margin[TV_MARGIN_RIGHT]);
- drm_output_attach_property(output,
+ drm_connector_attach_property(connector,
dev->mode_config.tv_bottom_margin_property,
tv_priv->margin[TV_MARGIN_BOTTOM]);
out:
- drm_sysfs_output_add(output);
+ drm_sysfs_connector_add(connector);
}