33,6 → 33,7 |
#include <drm_crtc.h> |
#include <drm_mode.h> |
#include <drm_edid.h> |
#include <drm_dp_helper.h> |
#include <linux/i2c.h> |
#include <linux/i2c-id.h> |
#include <linux/i2c-algo-bit.h> |
89,24 → 90,45 |
TV_STD_PAL_CN, |
}; |
|
/* radeon gpio-based i2c |
* 1. "mask" reg and bits |
* grabs the gpio pins for software use |
* 0=not held 1=held |
* 2. "a" reg and bits |
* output pin value |
* 0=low 1=high |
* 3. "en" reg and bits |
* sets the pin direction |
* 0=input 1=output |
* 4. "y" reg and bits |
* input pin value |
* 0=low 1=high |
*/ |
struct radeon_i2c_bus_rec { |
bool valid; |
/* id used by atom */ |
uint8_t i2c_id; |
/* can be used with hw i2c engine */ |
bool hw_capable; |
/* uses multi-media i2c engine */ |
bool mm_i2c; |
/* regs and bits */ |
uint32_t mask_clk_reg; |
uint32_t mask_data_reg; |
uint32_t a_clk_reg; |
uint32_t a_data_reg; |
uint32_t put_clk_reg; |
uint32_t put_data_reg; |
uint32_t get_clk_reg; |
uint32_t get_data_reg; |
uint32_t en_clk_reg; |
uint32_t en_data_reg; |
uint32_t y_clk_reg; |
uint32_t y_data_reg; |
uint32_t mask_clk_mask; |
uint32_t mask_data_mask; |
uint32_t put_clk_mask; |
uint32_t put_data_mask; |
uint32_t get_clk_mask; |
uint32_t get_data_mask; |
uint32_t a_clk_mask; |
uint32_t a_data_mask; |
uint32_t en_clk_mask; |
uint32_t en_data_mask; |
uint32_t y_clk_mask; |
uint32_t y_data_mask; |
}; |
|
struct radeon_tmds_pll { |
150,9 → 172,12 |
}; |
|
struct radeon_i2c_chan { |
struct i2c_adapter adapter; |
struct drm_device *dev; |
struct i2c_adapter adapter; |
struct i2c_algo_bit_data algo; |
union { |
struct i2c_algo_dp_aux_data dp; |
struct i2c_algo_bit_data bit; |
} algo; |
struct radeon_i2c_bus_rec rec; |
}; |
|
170,6 → 195,11 |
CT_EMAC, |
}; |
|
enum radeon_dvo_chip { |
DVO_SIL164, |
DVO_SIL1178, |
}; |
|
struct radeon_mode_info { |
struct atom_context *atom_context; |
struct card_info *atom_card_info; |
209,7 → 239,7 |
bool enabled; |
bool can_tile; |
uint32_t crtc_offset; |
// struct drm_gem_object *cursor_bo; |
struct drm_gem_object *cursor_bo; |
uint64_t cursor_addr; |
int cursor_width; |
int cursor_height; |
261,6 → 291,13 |
struct radeon_tmds_pll tmds_pll[4]; |
}; |
|
struct radeon_encoder_ext_tmds { |
/* tmds over dvo */ |
struct radeon_i2c_chan *i2c_bus; |
uint8_t slave_addr; |
enum radeon_dvo_chip dvo_chip; |
}; |
|
/* spread spectrum */ |
struct radeon_atom_ss { |
uint16_t percentage; |
302,8 → 339,37 |
struct radeon_connector_atom_dig { |
uint32_t igp_lane_info; |
bool linkb; |
/* displayport */ |
struct radeon_i2c_chan *dp_i2c_bus; |
u8 dpcd[8]; |
u8 dp_sink_type; |
int dp_clock; |
int dp_lane_count; |
}; |
|
struct radeon_gpio_rec { |
bool valid; |
u8 id; |
u32 reg; |
u32 mask; |
}; |
|
enum radeon_hpd_id { |
RADEON_HPD_NONE = 0, |
RADEON_HPD_1, |
RADEON_HPD_2, |
RADEON_HPD_3, |
RADEON_HPD_4, |
RADEON_HPD_5, |
RADEON_HPD_6, |
}; |
|
struct radeon_hpd { |
enum radeon_hpd_id hpd; |
u8 plugged_state; |
struct radeon_gpio_rec gpio; |
}; |
|
struct radeon_connector { |
struct drm_connector base; |
uint32_t connector_id; |
318,6 → 384,7 |
void *con_priv; |
bool dac_load_detect; |
uint16_t connector_object_id; |
struct radeon_hpd hpd; |
}; |
|
struct radeon_framebuffer { |
325,10 → 392,37 |
struct drm_gem_object *obj; |
}; |
|
extern void radeon_connector_hotplug(struct drm_connector *connector); |
extern bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector); |
extern int radeon_dp_mode_valid_helper(struct radeon_connector *radeon_connector, |
struct drm_display_mode *mode); |
extern void radeon_dp_set_link_config(struct drm_connector *connector, |
struct drm_display_mode *mode); |
extern void dp_link_train(struct drm_encoder *encoder, |
struct drm_connector *connector); |
extern u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector); |
extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector); |
extern void atombios_dig_transmitter_setup(struct drm_encoder *encoder, |
int action, uint8_t lane_num, |
uint8_t lane_set); |
extern int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode, |
uint8_t write_byte, uint8_t *read_byte); |
|
extern struct radeon_i2c_chan *radeon_i2c_create_dp(struct drm_device *dev, |
struct radeon_i2c_bus_rec *rec, |
const char *name); |
extern struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev, |
struct radeon_i2c_bus_rec *rec, |
const char *name); |
extern void radeon_i2c_destroy(struct radeon_i2c_chan *i2c); |
extern void radeon_i2c_sw_get_byte(struct radeon_i2c_chan *i2c_bus, |
u8 slave_addr, |
u8 addr, |
u8 *val); |
extern void radeon_i2c_sw_put_byte(struct radeon_i2c_chan *i2c, |
u8 slave_addr, |
u8 addr, |
u8 val); |
extern bool radeon_ddc_probe(struct radeon_connector *radeon_connector); |
extern int radeon_ddc_get_modes(struct radeon_connector *radeon_connector); |
|
343,6 → 437,17 |
uint32_t *post_div_p, |
int flags); |
|
extern void radeon_compute_pll_avivo(struct radeon_pll *pll, |
uint64_t freq, |
uint32_t *dot_clock_p, |
uint32_t *fb_div_p, |
uint32_t *frac_fb_div_p, |
uint32_t *ref_div_p, |
uint32_t *post_div_p, |
int flags); |
|
extern void radeon_setup_encoder_clones(struct drm_device *dev); |
|
struct drm_encoder *radeon_encoder_legacy_lvds_add(struct drm_device *dev, int bios_index); |
struct drm_encoder *radeon_encoder_legacy_primary_dac_add(struct drm_device *dev, int bios_index, int with_tv); |
struct drm_encoder *radeon_encoder_legacy_tv_dac_add(struct drm_device *dev, int bios_index, int with_tv); |
349,6 → 454,7 |
struct drm_encoder *radeon_encoder_legacy_tmds_int_add(struct drm_device *dev, int bios_index); |
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 void atombios_digital_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); |
|
378,12 → 484,16 |
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); |
bool radeon_atombios_get_tmds_info(struct radeon_encoder *encoder, |
extern 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, |
extern 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, |
extern bool radeon_legacy_get_tmds_info_from_table(struct radeon_encoder *encoder, |
struct radeon_encoder_int_tmds *tmds); |
extern bool radeon_legacy_get_ext_tmds_info_from_combios(struct radeon_encoder *encoder, |
struct radeon_encoder_ext_tmds *tmds); |
extern bool radeon_legacy_get_ext_tmds_info_from_table(struct radeon_encoder *encoder, |
struct radeon_encoder_ext_tmds *tmds); |
extern struct radeon_encoder_primary_dac * |
radeon_atombios_get_primary_dac_info(struct radeon_encoder *encoder); |
extern struct radeon_encoder_tv_dac * |
395,6 → 505,8 |
radeon_combios_get_tv_dac_info(struct radeon_encoder *encoder); |
extern struct radeon_encoder_primary_dac * |
radeon_combios_get_primary_dac_info(struct radeon_encoder *encoder); |
extern bool radeon_combios_external_tmds_setup(struct drm_encoder *encoder); |
extern void radeon_external_tmds_setup(struct drm_encoder *encoder); |
extern void radeon_combios_output_lock(struct drm_encoder *encoder, bool lock); |
extern void radeon_combios_initialize_bios_scratch_regs(struct drm_device *dev); |
extern void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock); |
426,7 → 538,7 |
struct radeon_crtc *radeon_crtc); |
void radeon_legacy_init_crtc(struct drm_device *dev, |
struct radeon_crtc *radeon_crtc); |
void radeon_i2c_do_lock(struct radeon_connector *radeon_connector, int lock_state); |
extern void radeon_i2c_do_lock(struct radeon_i2c_chan *i2c, int lock_state); |
|
void radeon_get_clock_info(struct drm_device *dev); |
|
433,9 → 545,6 |
extern bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev); |
extern bool radeon_get_atom_connector_info_from_supported_devices_table(struct drm_device *dev); |
|
void radeon_rmx_mode_fixup(struct drm_encoder *encoder, |
struct drm_display_mode *mode, |
struct drm_display_mode *adjusted_mode); |
void radeon_enc_destroy(struct drm_encoder *encoder); |
void radeon_copy_fb(struct drm_device *dev, struct drm_gem_object *dst_obj); |
void radeon_combios_asic_init(struct drm_device *dev); |