33,6 → 33,7 |
#include <drm/drm_crtc.h> |
#include <drm/drm_edid.h> |
#include <drm/drm_dp_helper.h> |
#include <drm/drm_dp_mst_helper.h> |
#include <drm/drm_fixed.h> |
#include <drm/drm_crtc_helper.h> |
#include <linux/i2c.h> |
85,6 → 86,13 |
RADEON_HPD_NONE = 0xff, |
}; |
|
enum radeon_output_csc { |
RADEON_OUTPUT_CSC_BYPASS = 0, |
RADEON_OUTPUT_CSC_TVRGB = 1, |
RADEON_OUTPUT_CSC_YCBCR601 = 2, |
RADEON_OUTPUT_CSC_YCBCR709 = 3, |
}; |
|
#define RADEON_MAX_I2C_BUS 16 |
|
/* radeon gpio-based i2c |
229,7 → 237,6 |
int offset; |
bool last_buffer_filled_status; |
int id; |
struct r600_audio_pin *pin; |
}; |
|
struct radeon_mode_info { |
255,6 → 262,8 |
struct drm_property *audio_property; |
/* FMT dithering */ |
struct drm_property *dither_property; |
/* Output CSC */ |
struct drm_property *output_csc_property; |
/* hardcoded DFP edid from BIOS */ |
struct edid *bios_hardcoded_edid; |
int bios_hardcoded_edid_size; |
265,6 → 274,9 |
u16 firmware_flags; |
/* pointer to backlight encoder */ |
struct radeon_encoder *bl_encoder; |
|
/* bitmask for active encoder frontends */ |
uint32_t active_encoders; |
}; |
|
#define RADEON_MAX_BL_LEVEL 0xFF |
330,7 → 342,6 |
int max_cursor_width; |
int max_cursor_height; |
uint32_t legacy_display_base_addr; |
uint32_t legacy_cursor_offset; |
enum radeon_rmx_type rmx_type; |
u8 h_border; |
u8 v_border; |
356,7 → 367,9 |
u32 line_time; |
u32 wm_low; |
u32 wm_high; |
u32 lb_vblank_lead_lines; |
struct drm_display_mode hw_mode; |
enum radeon_output_csc output_csc; |
}; |
|
struct radeon_encoder_primary_dac { |
426,6 → 439,8 |
uint8_t backlight_level; |
int panel_mode; |
struct radeon_afmt *afmt; |
struct r600_audio_pin *pin; |
int active_mst_links; |
}; |
|
struct radeon_encoder_atom_dac { |
432,6 → 447,17 |
enum radeon_tv_std tv_std; |
}; |
|
struct radeon_encoder_mst { |
int crtc; |
struct radeon_encoder *primary; |
struct radeon_connector *connector; |
struct drm_dp_mst_port *port; |
int pbn; |
int fe; |
bool fe_from_be; |
bool enc_active; |
}; |
|
struct radeon_encoder { |
struct drm_encoder base; |
uint32_t encoder_enum; |
449,6 → 475,12 |
int audio_polling_active; |
bool is_ext_encoder; |
u16 caps; |
struct radeon_audio_funcs *audio; |
enum radeon_output_csc output_csc; |
bool can_mst; |
uint32_t offset; |
bool is_mst_encoder; |
/* front end for this mst encoder */ |
}; |
|
struct radeon_connector_atom_dig { |
459,6 → 491,7 |
int dp_clock; |
int dp_lane_count; |
bool edp_on; |
bool is_mst; |
}; |
|
struct radeon_gpio_rec { |
502,6 → 535,11 |
RADEON_FMT_DITHER_ENABLE = 1, |
}; |
|
struct stream_attribs { |
uint16_t fe; |
uint16_t slots; |
}; |
|
struct radeon_connector { |
struct drm_connector base; |
uint32_t connector_id; |
516,6 → 554,7 |
void *con_priv; |
bool dac_load_detect; |
bool detected_by_load; /* if the connection status was determined by load */ |
bool detected_hpd_without_ddc; /* if an HPD signal was detected on DVI, but ddc probing failed */ |
uint16_t connector_object_id; |
struct radeon_hpd hpd; |
struct radeon_router router; |
523,6 → 562,14 |
enum radeon_connector_audio audio; |
enum radeon_connector_dither dither; |
int pixelclock_for_modeset; |
bool is_mst_connector; |
struct radeon_connector *mst_port; |
struct drm_dp_mst_port *port; |
struct drm_dp_mst_topology_mgr mst_mgr; |
|
struct radeon_encoder *mst_encoder; |
struct stream_attribs cur_stream_attribs[6]; |
int enabled_attribs; |
}; |
|
struct radeon_framebuffer { |
641,6 → 688,9 |
struct atom_voltage_table_entry entries[MAX_VOLTAGE_ENTRIES]; |
}; |
|
/* Driver internal use only flags of radeon_get_crtc_scanoutpos() */ |
#define USE_REAL_VBLANKSTART (1 << 30) |
#define GET_DISTANCE_TO_VBLANKSTART (1 << 31) |
|
extern void |
radeon_add_atom_connector(struct drm_device *dev, |
707,15 → 757,26 |
extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector); |
extern int radeon_dp_get_panel_mode(struct drm_encoder *encoder, |
struct drm_connector *connector); |
int radeon_dp_get_max_link_rate(struct drm_connector *connector, |
const u8 *dpcd); |
extern void radeon_dp_set_rx_power_state(struct drm_connector *connector, |
u8 power_state); |
extern void radeon_dp_aux_init(struct radeon_connector *radeon_connector); |
extern ssize_t |
radeon_dp_aux_transfer_native(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg); |
|
extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode); |
extern void atombios_dig_encoder_setup2(struct drm_encoder *encoder, int action, int panel_mode, int enc_override); |
extern void radeon_atom_encoder_init(struct radeon_device *rdev); |
extern void radeon_atom_disp_eng_pll_init(struct radeon_device *rdev); |
extern void atombios_dig_transmitter_setup(struct drm_encoder *encoder, |
int action, uint8_t lane_num, |
uint8_t lane_set); |
extern void atombios_dig_transmitter_setup2(struct drm_encoder *encoder, |
int action, uint8_t lane_num, |
uint8_t lane_set, int fe); |
extern void atombios_set_mst_encoder_crtc_source(struct drm_encoder *encoder, |
int fe); |
extern void radeon_atom_ext_encoder_setup_ddc(struct drm_encoder *encoder); |
extern struct drm_encoder *radeon_get_external_encoder(struct drm_encoder *encoder); |
void radeon_atom_copy_swap(u8 *dst, u8 *src, u8 num_bytes, bool to_le); |
745,8 → 806,6 |
extern void radeon_router_select_cd_port(struct radeon_connector *radeon_connector); |
extern bool radeon_ddc_probe(struct radeon_connector *radeon_connector, bool use_aux); |
|
extern struct drm_encoder *radeon_best_encoder(struct drm_connector *connector); |
|
extern bool radeon_atombios_get_ppll_ss_info(struct radeon_device *rdev, |
struct radeon_atom_ss *ss, |
int id); |
820,10 → 879,10 |
int x, int y); |
extern void radeon_cursor_reset(struct drm_crtc *crtc); |
|
extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, int crtc, |
unsigned int flags, |
int *vpos, int *hpos, void *stime, |
void *etime); |
extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe, |
unsigned int flags, int *vpos, int *hpos, |
ktime_t *stime, ktime_t *etime, |
const struct drm_display_mode *mode); |
|
extern bool radeon_combios_check_hardcoded_edid(struct radeon_device *rdev); |
extern struct edid * |
925,13 → 984,29 |
int radeon_fbdev_init(struct radeon_device *rdev); |
void radeon_fbdev_fini(struct radeon_device *rdev); |
void radeon_fbdev_set_suspend(struct radeon_device *rdev, int state); |
int radeon_fbdev_total_size(struct radeon_device *rdev); |
bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj); |
void radeon_fbdev_restore_mode(struct radeon_device *rdev); |
|
void radeon_fb_output_poll_changed(struct radeon_device *rdev); |
|
void radeon_crtc_handle_vblank(struct radeon_device *rdev, int crtc_id); |
|
void radeon_fb_add_connector(struct radeon_device *rdev, struct drm_connector *connector); |
void radeon_fb_remove_connector(struct radeon_device *rdev, struct drm_connector *connector); |
|
void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id); |
|
int radeon_align_pitch(struct radeon_device *rdev, int width, int bpp, bool tiled); |
|
/* mst */ |
int radeon_dp_mst_init(struct radeon_connector *radeon_connector); |
int radeon_dp_mst_probe(struct radeon_connector *radeon_connector); |
int radeon_dp_mst_check_status(struct radeon_connector *radeon_connector); |
int radeon_mst_debugfs_init(struct radeon_device *rdev); |
void radeon_dp_mst_prepare_pll(struct drm_crtc *crtc, struct drm_display_mode *mode); |
|
void radeon_setup_mst_connector(struct drm_device *dev); |
|
int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder, int fe_idx); |
void radeon_atom_release_dig_encoder(struct radeon_device *rdev, int enc_idx); |
#endif |