34,8 → 34,12 |
#include <drm_mode.h> |
#include <drm_edid.h> |
#include <linux/i2c.h> |
#include <linux/i2c-id.h> |
#include <linux/i2c-algo-bit.h> |
#include "radeon_fixed.h" |
|
struct radeon_device; |
|
#define to_radeon_crtc(x) container_of(x, struct radeon_crtc, base) |
#define to_radeon_connector(x) container_of(x, struct radeon_connector, base) |
#define to_radeon_encoder(x) container_of(x, struct radeon_encoder, base) |
123,6 → 127,7 |
#define RADEON_PLL_PREFER_LOW_POST_DIV (1 << 8) |
#define RADEON_PLL_PREFER_HIGH_POST_DIV (1 << 9) |
#define RADEON_PLL_USE_FRAC_FB_DIV (1 << 10) |
#define RADEON_PLL_PREFER_CLOSEST_LOWER (1 << 11) |
|
struct radeon_pll { |
uint16_t reference_freq; |
169,36 → 174,63 |
struct atom_context *atom_context; |
enum radeon_connector_table connector_table; |
bool mode_config_initialized; |
struct radeon_crtc *crtcs[2]; |
/* DVI-I properties */ |
struct drm_property *coherent_mode_property; |
/* DAC enable load detect */ |
struct drm_property *load_detect_property; |
/* TV standard load detect */ |
struct drm_property *tv_std_property; |
/* legacy TMDS PLL detect */ |
struct drm_property *tmds_pll_property; |
|
}; |
|
struct radeon_native_mode { |
/* preferred mode */ |
uint32_t panel_xres, panel_yres; |
uint32_t hoverplus, hsync_width; |
uint32_t hblank; |
uint32_t voverplus, vsync_width; |
uint32_t vblank; |
uint32_t dotclock; |
uint32_t flags; |
}; |
|
#define MAX_H_CODE_TIMING_LEN 32 |
#define MAX_V_CODE_TIMING_LEN 32 |
|
/* need to store these as reading |
back code tables is excessive */ |
struct radeon_tv_regs { |
uint32_t tv_uv_adr; |
uint32_t timing_cntl; |
uint32_t hrestart; |
uint32_t vrestart; |
uint32_t frestart; |
uint16_t h_code_timing[MAX_H_CODE_TIMING_LEN]; |
uint16_t v_code_timing[MAX_V_CODE_TIMING_LEN]; |
}; |
|
struct radeon_crtc { |
struct drm_crtc base; |
int crtc_id; |
u16_t lut_r[256], lut_g[256], lut_b[256]; |
u16 lut_r[256], lut_g[256], lut_b[256]; |
bool enabled; |
bool can_tile; |
uint32_t crtc_offset; |
struct radeon_framebuffer *fbdev_fb; |
struct drm_mode_set mode_set; |
// struct drm_gem_object *cursor_bo; |
uint64_t cursor_addr; |
int cursor_width; |
int cursor_height; |
uint32_t legacy_display_base_addr; |
uint32_t legacy_cursor_offset; |
enum radeon_rmx_type rmx_type; |
fixed20_12 vsc; |
fixed20_12 hsc; |
struct radeon_native_mode native_mode; |
}; |
|
#define RADEON_USE_RMX 1 |
|
struct radeon_native_mode { |
/* preferred mode */ |
uint32_t panel_xres, panel_yres; |
uint32_t hoverplus, hsync_width; |
uint32_t hblank; |
uint32_t voverplus, vsync_width; |
uint32_t vblank; |
uint32_t dotclock; |
uint32_t flags; |
}; |
|
struct radeon_encoder_primary_dac { |
/* legacy primary dac */ |
uint32_t ps2_pdac_adj; |
225,7 → 257,13 |
uint32_t ntsc_tvdac_adj; |
uint32_t pal_tvdac_adj; |
|
int h_pos; |
int v_pos; |
int h_size; |
int supported_tv_stds; |
bool tv_on; |
enum radeon_tv_std tv_std; |
struct radeon_tv_regs tv; |
}; |
|
struct radeon_encoder_int_tmds { |
244,10 → 282,15 |
struct radeon_native_mode native_mode; |
}; |
|
struct radeon_encoder_atom_dac { |
enum radeon_tv_std tv_std; |
}; |
|
struct radeon_encoder { |
struct drm_encoder base; |
uint32_t encoder_id; |
uint32_t devices; |
uint32_t active_device; |
uint32_t flags; |
uint32_t pixel_clock; |
enum radeon_rmx_type rmx_type; |
265,8 → 308,12 |
uint32_t connector_id; |
uint32_t devices; |
struct radeon_i2c_chan *ddc_bus; |
int use_digital; |
bool use_digital; |
/* we need to mind the EDID between detect |
and get modes due to analog/digital/tvencoder */ |
struct edid *edid; |
void *con_priv; |
bool dac_load_detect; |
}; |
|
struct radeon_framebuffer { |
299,6 → 346,7 |
struct drm_encoder *radeon_encoder_legacy_tmds_ext_add(struct drm_device *dev, int bios_index); |
extern void atombios_external_tmds_setup(struct drm_encoder *encoder, int action); |
extern int atombios_get_encoder_mode(struct drm_encoder *encoder); |
extern void radeon_encoder_set_active_device(struct drm_encoder *encoder); |
|
extern void radeon_crtc_load_lut(struct drm_crtc *crtc); |
extern int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y, |
326,8 → 374,12 |
extern bool radeon_combios_get_clock_info(struct drm_device *dev); |
extern struct radeon_encoder_atom_dig * |
radeon_atombios_get_lvds_info(struct radeon_encoder *encoder); |
extern struct radeon_encoder_int_tmds * |
radeon_atombios_get_tmds_info(struct radeon_encoder *encoder); |
bool radeon_atombios_get_tmds_info(struct radeon_encoder *encoder, |
struct radeon_encoder_int_tmds *tmds); |
bool radeon_legacy_get_tmds_info_from_combios(struct radeon_encoder *encoder, |
struct radeon_encoder_int_tmds *tmds); |
bool radeon_legacy_get_tmds_info_from_table(struct radeon_encoder *encoder, |
struct radeon_encoder_int_tmds *tmds); |
extern struct radeon_encoder_primary_dac * |
radeon_atombios_get_primary_dac_info(struct radeon_encoder *encoder); |
extern struct radeon_encoder_tv_dac * |
334,8 → 386,6 |
radeon_atombios_get_tv_dac_info(struct radeon_encoder *encoder); |
extern struct radeon_encoder_lvds * |
radeon_combios_get_lvds_info(struct radeon_encoder *encoder); |
extern struct radeon_encoder_int_tmds * |
radeon_combios_get_tmds_info(struct radeon_encoder *encoder); |
extern void radeon_combios_get_ext_tmds_info(struct radeon_encoder *encoder); |
extern struct radeon_encoder_tv_dac * |
radeon_combios_get_tv_dac_info(struct radeon_encoder *encoder); |
345,6 → 395,8 |
extern void radeon_combios_initialize_bios_scratch_regs(struct drm_device *dev); |
extern void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock); |
extern void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev); |
extern void radeon_save_bios_scratch_regs(struct radeon_device *rdev); |
extern void radeon_restore_bios_scratch_regs(struct radeon_device *rdev); |
extern void |
radeon_atombios_encoder_crtc_scratch_regs(struct drm_encoder *encoder, int crtc); |
extern void |
382,16 → 434,22 |
void radeon_copy_fb(struct drm_device *dev, struct drm_gem_object *dst_obj); |
void radeon_combios_asic_init(struct drm_device *dev); |
extern int radeon_static_clocks_init(struct drm_device *dev); |
void radeon_init_disp_bw_legacy(struct drm_device *dev, |
struct drm_display_mode *mode1, |
uint32_t pixel_bytes1, |
struct drm_display_mode *mode2, |
uint32_t pixel_bytes2); |
void radeon_init_disp_bw_avivo(struct drm_device *dev, |
struct drm_display_mode *mode1, |
uint32_t pixel_bytes1, |
struct drm_display_mode *mode2, |
uint32_t pixel_bytes2); |
void radeon_init_disp_bandwidth(struct drm_device *dev); |
bool radeon_crtc_scaling_mode_fixup(struct drm_crtc *crtc, |
struct drm_display_mode *mode, |
struct drm_display_mode *adjusted_mode); |
void atom_rv515_force_tv_scaler(struct radeon_device *rdev, struct radeon_crtc *radeon_crtc); |
|
/* legacy tv */ |
void radeon_legacy_tv_adjust_crtc_reg(struct drm_encoder *encoder, |
uint32_t *h_total_disp, uint32_t *h_sync_strt_wid, |
uint32_t *v_total_disp, uint32_t *v_sync_strt_wid); |
void radeon_legacy_tv_adjust_pll1(struct drm_encoder *encoder, |
uint32_t *htotal_cntl, uint32_t *ppll_ref_div, |
uint32_t *ppll_div_3, uint32_t *pixclks_cntl); |
void radeon_legacy_tv_adjust_pll2(struct drm_encoder *encoder, |
uint32_t *htotal2_cntl, uint32_t *p2pll_ref_div, |
uint32_t *p2pll_div_0, uint32_t *pixclks_cntl); |
void radeon_legacy_tv_mode_set(struct drm_encoder *encoder, |
struct drm_display_mode *mode, |
struct drm_display_mode *adjusted_mode); |
#endif |