3273fc63e1
Remove the modes timings tables for DMT modes and calculate the HW paremeters from the modes timings. Switch the DMT modes pixel clock calculation out of the static frequency list to a generic calculation from a range of possible PLL dividers. This patch is an intermediate step towards usage of the Common Clock Framwework for PLL setup, by reworking the code to have common sel_pll() function called by the CEA (HDMI) freq setup and the generic DMT frequencies setup, we should be able to simply call clk_set_rate() on the PLL clock handle in a near future. The CEA (HDMI) and CVBS modes needs very specific clock paths that CCF will never be able to determine by itself, so there is still some work to do for a full handoff to CCF handling the clocks. This setup permits setting non-CEA modes like : - 1600x900-60Hz - 1280x1024-75Hz - 1280x1024-60Hz - 1440x900-60Hz - 1366x768-60Hz - 1280x800-60Hz - 1152x864-75Hz - 1024x768-75Hz - 1024x768-70Hz - 1024x768-60Hz - 832x624-75Hz - 800x600-75Hz - 800x600-72Hz - 800x600-60Hz - 640x480-75Hz - 640x480-73Hz - 640x480-67Hz Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> Acked-by: Jerome Brunet <jbrunet@baylibre.com> [narmstrong: fixed trivial checkpatch issues] Link: https://patchwork.freedesktop.org/patch/msgid/1531726814-14638-1-git-send-email-narmstrong@baylibre.com
82 lines
2.6 KiB
C
82 lines
2.6 KiB
C
/*
|
|
* Copyright (C) 2016 BayLibre, SAS
|
|
* Author: Neil Armstrong <narmstrong@baylibre.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/*
|
|
* Video Encoders
|
|
* - ENCI : Interlace Video Encoder
|
|
* - ENCI_DVI : Interlace Video Encoder for DVI/HDMI
|
|
* - ENCP : Progressive Video Encoder
|
|
*/
|
|
|
|
#ifndef __MESON_VENC_H
|
|
#define __MESON_VENC_H
|
|
|
|
enum {
|
|
MESON_VENC_MODE_NONE = 0,
|
|
MESON_VENC_MODE_CVBS_PAL,
|
|
MESON_VENC_MODE_CVBS_NTSC,
|
|
MESON_VENC_MODE_HDMI,
|
|
};
|
|
|
|
struct meson_cvbs_enci_mode {
|
|
unsigned int mode_tag;
|
|
unsigned int hso_begin; /* HSO begin position */
|
|
unsigned int hso_end; /* HSO end position */
|
|
unsigned int vso_even; /* VSO even line */
|
|
unsigned int vso_odd; /* VSO odd line */
|
|
unsigned int macv_max_amp; /* Macrovision max amplitude */
|
|
unsigned int video_prog_mode;
|
|
unsigned int video_mode;
|
|
unsigned int sch_adjust;
|
|
unsigned int yc_delay;
|
|
unsigned int pixel_start;
|
|
unsigned int pixel_end;
|
|
unsigned int top_field_line_start;
|
|
unsigned int top_field_line_end;
|
|
unsigned int bottom_field_line_start;
|
|
unsigned int bottom_field_line_end;
|
|
unsigned int video_saturation;
|
|
unsigned int video_contrast;
|
|
unsigned int video_brightness;
|
|
unsigned int video_hue;
|
|
unsigned int analog_sync_adj;
|
|
};
|
|
|
|
/* HDMI Clock parameters */
|
|
enum drm_mode_status
|
|
meson_venc_hdmi_supported_mode(const struct drm_display_mode *mode);
|
|
bool meson_venc_hdmi_supported_vic(int vic);
|
|
bool meson_venc_hdmi_venc_repeat(int vic);
|
|
|
|
/* CVBS Timings and Parameters */
|
|
extern struct meson_cvbs_enci_mode meson_cvbs_enci_pal;
|
|
extern struct meson_cvbs_enci_mode meson_cvbs_enci_ntsc;
|
|
|
|
void meson_venci_cvbs_mode_set(struct meson_drm *priv,
|
|
struct meson_cvbs_enci_mode *mode);
|
|
void meson_venc_hdmi_mode_set(struct meson_drm *priv, int vic,
|
|
struct drm_display_mode *mode);
|
|
unsigned int meson_venci_get_field(struct meson_drm *priv);
|
|
|
|
void meson_venc_enable_vsync(struct meson_drm *priv);
|
|
void meson_venc_disable_vsync(struct meson_drm *priv);
|
|
|
|
void meson_venc_init(struct meson_drm *priv);
|
|
|
|
#endif /* __MESON_VENC_H */
|