tv_mode
state->tv.mode = cmdline->tv_mode;
struct drm_property *tv_mode;
tv_mode = drm_property_create_enum(dev, 0, "TV mode",
if (!tv_mode)
dev->mode_config.tv_mode_property = tv_mode;
mode->tv_mode = ret;
unsigned int tv_mode;
.tv_mode = _mode, \
cmdline_mode->tv_mode = mode->tv_mode;
named_mode->tv_mode,
enum drm_connector_tv_mode tv_mode,
switch (tv_mode) {
default_mode = cmdline->tv_mode;
tv_mode->hblank_start - tv_mode->hblank_end;
tv_mode->htotal - tv_mode->hblank_start;
tv_mode->hsync_end;
mode->htotal = tv_mode->htotal + 1;
mode->vdisplay = intel_tv_mode_vdisplay(tv_mode);
if (tv_mode->progressive) {
tv_mode->vsync_start_f1 + 1;
tv_mode->vsync_len;
tv_mode->vi_end_f1 + 1;
tv_mode->vsync_start_f1 + 1 +
tv_mode->vsync_start_f2 + 1;
2 * tv_mode->vsync_len;
tv_mode->vi_end_f1 + 1 +
tv_mode->vi_end_f2 + 1;
tv_mode->progressive ? 'p' : 'i',
tv_mode->name);
struct tv_mode tv_mode = {};
tv_mode.htotal = (hctl1 & TV_HTOTAL_MASK) >> TV_HTOTAL_SHIFT;
tv_mode.hsync_end = (hctl1 & TV_HSYNC_END_MASK) >> TV_HSYNC_END_SHIFT;
tv_mode.hblank_start = (hctl3 & TV_HBLANK_START_MASK) >> TV_HBLANK_START_SHIFT;
tv_mode.hblank_end = (hctl3 & TV_HSYNC_END_MASK) >> TV_HBLANK_END_SHIFT;
tv_mode.nbr_end = (vctl1 & TV_NBR_END_MASK) >> TV_NBR_END_SHIFT;
tv_mode.vi_end_f1 = (vctl1 & TV_VI_END_F1_MASK) >> TV_VI_END_F1_SHIFT;
tv_mode.vi_end_f2 = (vctl1 & TV_VI_END_F2_MASK) >> TV_VI_END_F2_SHIFT;
tv_mode.vsync_len = (vctl2 & TV_VSYNC_LEN_MASK) >> TV_VSYNC_LEN_SHIFT;
tv_mode.vsync_start_f1 = (vctl2 & TV_VSYNC_START_F1_MASK) >> TV_VSYNC_START_F1_SHIFT;
tv_mode.vsync_start_f2 = (vctl2 & TV_VSYNC_START_F2_MASK) >> TV_VSYNC_START_F2_SHIFT;
tv_mode.clock = pipe_config->port_clock;
tv_mode.progressive = tv_ctl & TV_PROGRESSIVE;
tv_mode.oversample = 8;
tv_mode.oversample = 4;
tv_mode.oversample = 2;
tv_mode.oversample = 1;
intel_tv_mode_to_mode(&mode, &tv_mode, pipe_config->port_clock);
static bool intel_tv_vert_scaling(const struct drm_display_mode *tv_mode,
return tv_mode->crtc_vdisplay -
const struct tv_mode *tv_mode = intel_tv_mode_find(conn_state);
if (!tv_mode)
pipe_config->port_clock = tv_mode->clock;
intel_tv_mode_to_mode(adjusted_mode, tv_mode, pipe_config->port_clock);
if (!tv_mode->progressive) {
const struct tv_mode *tv_mode,
hctl1 = (tv_mode->hsync_end << TV_HSYNC_END_SHIFT) |
(tv_mode->htotal << TV_HTOTAL_SHIFT);
hctl2 = (tv_mode->hburst_start << 16) |
(tv_mode->hburst_len << TV_HBURST_LEN_SHIFT);
hctl3 = (tv_mode->hblank_start << TV_HBLANK_START_SHIFT) |
(tv_mode->hblank_end << TV_HBLANK_END_SHIFT);
vctl1 = (tv_mode->nbr_end << TV_NBR_END_SHIFT) |
(tv_mode->vi_end_f1 << TV_VI_END_F1_SHIFT) |
(tv_mode->vi_end_f2 << TV_VI_END_F2_SHIFT);
vctl2 = (tv_mode->vsync_len << TV_VSYNC_LEN_SHIFT) |
(tv_mode->vsync_start_f1 << TV_VSYNC_START_F1_SHIFT) |
(tv_mode->vsync_start_f2 << TV_VSYNC_START_F2_SHIFT);
vctl3 = (tv_mode->veq_len << TV_VEQ_LEN_SHIFT) |
(tv_mode->veq_start_f1 << TV_VEQ_START_F1_SHIFT) |
(tv_mode->veq_start_f2 << TV_VEQ_START_F2_SHIFT);
if (tv_mode->veq_ena)
vctl4 = (tv_mode->vburst_start_f1 << TV_VBURST_START_F1_SHIFT) |
(tv_mode->vburst_end_f1 << TV_VBURST_END_F1_SHIFT);
vctl5 = (tv_mode->vburst_start_f2 << TV_VBURST_START_F2_SHIFT) |
(tv_mode->vburst_end_f2 << TV_VBURST_END_F2_SHIFT);
vctl6 = (tv_mode->vburst_start_f3 << TV_VBURST_START_F3_SHIFT) |
(tv_mode->vburst_end_f3 << TV_VBURST_END_F3_SHIFT);
vctl7 = (tv_mode->vburst_start_f4 << TV_VBURST_START_F4_SHIFT) |
(tv_mode->vburst_end_f4 << TV_VBURST_END_F4_SHIFT);
const struct tv_mode *tv_mode = intel_tv_mode_find(conn_state);
video_levels = tv_mode->composite_levels;
color_conversion = tv_mode->composite_color;
burst_ena = tv_mode->burst_ena;
if (tv_mode->burst_ena)
video_levels = tv_mode->svideo_levels;
color_conversion = tv_mode->svideo_color;
burst_ena = tv_mode->burst_ena;
switch (tv_mode->oversample) {
if (tv_mode->progressive)
if (tv_mode->trilevel_sync)
if (tv_mode->pal_burst)
if (tv_mode->dda1_inc)
if (tv_mode->dda2_inc)
if (tv_mode->dda3_inc)
scctl1 |= tv_mode->sc_reset;
scctl1 |= tv_mode->dda1_inc << TV_SCDDA1_INC_SHIFT;
scctl2 = tv_mode->dda2_size << TV_SCDDA2_SIZE_SHIFT |
tv_mode->dda2_inc << TV_SCDDA2_INC_SHIFT;
scctl3 = tv_mode->dda3_size << TV_SCDDA3_SIZE_SHIFT |
tv_mode->dda3_inc << TV_SCDDA3_INC_SHIFT;
set_tv_mode_timings(display, tv_mode, burst_ena);
xsize = tv_mode->hblank_start - tv_mode->hblank_end;
ysize = intel_tv_mode_vdisplay(tv_mode);
tv_mode->filter_table[j++]);
tv_mode->filter_table[j++]);
tv_mode->filter_table[j++]);
tv_mode->filter_table[j++]);
const struct tv_mode *tv_mode = intel_tv_mode_find(connector->state);
if (!tv_mode->component_only)
tv_mode = &tv_modes[i];
if (!tv_mode->component_only)
const struct tv_mode *tv_mode)
int vdisplay = intel_tv_mode_vdisplay(tv_mode);
const struct tv_mode *tv_mode)
if (intel_tv_is_preferred_mode(mode, tv_mode))
const struct tv_mode *tv_mode = intel_tv_mode_find(connector->state);
!tv_mode->progressive &&
!tv_mode->component_only)
input->h > intel_tv_mode_vdisplay(tv_mode))
intel_tv_mode_to_mode(mode, tv_mode, tv_mode->clock);
intel_tv_set_mode_type(mode, tv_mode);
static const struct tv_mode tv_modes[] = {
static const struct tv_mode *intel_tv_mode_find(const struct drm_connector_state *conn_state)
const struct tv_mode *tv_mode = intel_tv_mode_find(connector->state);
if (abs(tv_mode->refresh - drm_mode_vrefresh(mode) * 1000) >= 1000)
intel_tv_mode_vdisplay(const struct tv_mode *tv_mode)
if (tv_mode->progressive)
return tv_mode->nbr_end + 1;
return 2 * (tv_mode->nbr_end + 1);
const struct tv_mode *tv_mode,
mode->clock = clock / (tv_mode->oversample >> !tv_mode->progressive);
enum drm_connector_tv_mode tv_mode;
struct drm_display_mode *tv_mode;
tv_mode = drm_cvt_mode(dev, 800, 600, 60, false, false, false);
if (!tv_mode)
tv_mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
drm_mode_probed_add(connector, tv_mode);