Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
radeon_mode.h
Go to the documentation of this file.
1 /*
2  * Copyright 2000 ATI Technologies Inc., Markham, Ontario, and
3  * VA Linux Systems Inc., Fremont, California.
4  * Copyright 2008 Red Hat Inc.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22  * OTHER DEALINGS IN THE SOFTWARE.
23  *
24  * Original Authors:
25  * Kevin E. Martin, Rickard E. Faith, Alan Hourihane
26  *
27  * Kernel port Author: Dave Airlie
28  */
29 
30 #ifndef RADEON_MODE_H
31 #define RADEON_MODE_H
32 
33 #include <drm/drm_crtc.h>
34 #include <drm/drm_edid.h>
35 #include <drm/drm_dp_helper.h>
36 #include <drm/drm_fixed.h>
37 #include <drm/drm_crtc_helper.h>
38 #include <linux/i2c.h>
39 #include <linux/i2c-algo-bit.h>
40 
41 struct radeon_bo;
42 struct radeon_device;
43 
44 #define to_radeon_crtc(x) container_of(x, struct radeon_crtc, base)
45 #define to_radeon_connector(x) container_of(x, struct radeon_connector, base)
46 #define to_radeon_encoder(x) container_of(x, struct radeon_encoder, base)
47 #define to_radeon_framebuffer(x) container_of(x, struct radeon_framebuffer, base)
48 
54 };
55 
66 };
67 
72 };
73 
82 };
83 
84 #define RADEON_MAX_I2C_BUS 16
85 
86 /* radeon gpio-based i2c
87  * 1. "mask" reg and bits
88  * grabs the gpio pins for software use
89  * 0=not held 1=held
90  * 2. "a" reg and bits
91  * output pin value
92  * 0=low 1=high
93  * 3. "en" reg and bits
94  * sets the pin direction
95  * 0=input 1=output
96  * 4. "y" reg and bits
97  * input pin value
98  * 0=low 1=high
99  */
101  bool valid;
102  /* id used by atom */
104  /* id used by atom */
106  /* can be used with hw i2c engine */
108  /* uses multi-media i2c engine */
109  bool mm_i2c;
110  /* regs and bits */
127 };
128 
132 };
133 
134 #define RADEON_MAX_BIOS_CONNECTOR 16
135 
136 /* pll flags */
137 #define RADEON_PLL_USE_BIOS_DIVS (1 << 0)
138 #define RADEON_PLL_NO_ODD_POST_DIV (1 << 1)
139 #define RADEON_PLL_USE_REF_DIV (1 << 2)
140 #define RADEON_PLL_LEGACY (1 << 3)
141 #define RADEON_PLL_PREFER_LOW_REF_DIV (1 << 4)
142 #define RADEON_PLL_PREFER_HIGH_REF_DIV (1 << 5)
143 #define RADEON_PLL_PREFER_LOW_FB_DIV (1 << 6)
144 #define RADEON_PLL_PREFER_HIGH_FB_DIV (1 << 7)
145 #define RADEON_PLL_PREFER_LOW_POST_DIV (1 << 8)
146 #define RADEON_PLL_PREFER_HIGH_POST_DIV (1 << 9)
147 #define RADEON_PLL_USE_FRAC_FB_DIV (1 << 10)
148 #define RADEON_PLL_PREFER_CLOSEST_LOWER (1 << 11)
149 #define RADEON_PLL_USE_POST_DIV (1 << 12)
150 #define RADEON_PLL_IS_LCD (1 << 13)
151 #define RADEON_PLL_PREFER_MINM_OVER_MAXP (1 << 14)
152 
153 struct radeon_pll {
154  /* reference frequency */
156 
157  /* fixed dividers */
160 
161  /* pll in/out limits */
169 
170  /* divider limits */
179 
180  /* flags for the current clock */
182 
183  /* pll id */
185 };
186 
189  struct drm_device *dev;
190  union {
193  } algo;
195 };
196 
197 /* mostly for macs, but really any system without connector tables */
199  CT_NONE = 0,
213 };
214 
218 };
219 
220 struct radeon_fbdev;
221 
222 struct radeon_afmt {
223  bool enabled;
224  int offset;
226  int id;
227 };
228 
234  struct radeon_crtc *crtcs[6];
235  struct radeon_afmt *afmt[6];
236  /* DVI-I properties */
238  /* DAC enable load detect */
240  /* TV standard */
242  /* legacy TMDS PLL detect */
244  /* underscan */
248  /* hardcoded DFP edid from BIOS */
251 
252  /* pointer to fbdev info structure */
254  /* firmware flags */
256  /* pointer to backlight encoder */
258 };
259 
260 #define RADEON_MAX_BL_LEVEL 0xFF
261 
262 #if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)
263 
264 struct radeon_backlight_privdata {
265  struct radeon_encoder *encoder;
266  uint8_t negative;
267 };
268 
269 #endif
270 
271 #define MAX_H_CODE_TIMING_LEN 32
272 #define MAX_V_CODE_TIMING_LEN 32
273 
274 /* need to store these as reading
275  back code tables is excessive */
284 };
285 
293  /* asic_ss */
296 };
297 
298 struct radeon_crtc {
299  struct drm_crtc base;
300  int crtc_id;
301  u16 lut_r[256], lut_g[256], lut_b[256];
302  bool enabled;
303  bool can_tile;
306  struct drm_gem_object *cursor_bo;
318  int pll_id;
319  /* page flipping */
322  /* pll sharing */
326  int bpc;
332 };
333 
335  /* legacy primary dac */
337 };
338 
340  /* legacy lvds */
350  /* panel mode */
355 };
356 
358  /* legacy tv dac */
362 
363  int h_pos;
364  int v_pos;
365  int h_size;
367  bool tv_on;
370 };
371 
373  /* legacy int tmds */
375 };
376 
378  /* tmds over dvo */
382 };
383 
384 /* spread spectrum */
386  bool linkb;
387  /* atom dig */
389  int dig_encoder; /* -1 disabled, 0 DIGA, 1 DIGB, etc. */
390  /* atom lvds/edp */
394  /* panel mode */
400  struct radeon_afmt *afmt;
401 };
402 
405 };
406 
420  void *enc_priv;
424 };
425 
428  /* displayport */
430  u8 dpcd[8];
432  int dp_clock;
434  bool edp_on;
435 };
436 
438  bool valid;
442 };
443 
444 struct radeon_hpd {
448 };
449 
454  /* i2c mux */
455  bool ddc_valid;
459  /* clock/data mux */
460  bool cd_valid;
464 };
465 
471  /* some systems have an hdmi and vga port with a shared ddc line */
474  /* we need to mind the EDID between detect
475  and get modes due to analog/digital/tvencoder */
476  struct edid *edid;
477  void *con_priv;
479  bool detected_by_load; /* if the connection status was determined by load */
481  struct radeon_hpd hpd;
484 };
485 
488  struct drm_gem_object *obj;
489 };
490 
491 #define ENCODER_MODE_IS_DP(em) (((em) == ATOM_ENCODER_MODE_DP) || \
492  ((em) == ATOM_ENCODER_MODE_DP_MST))
493 
494 extern enum radeon_tv_std
496 extern enum radeon_tv_std
498 
499 extern struct drm_connector *
501 extern struct drm_connector *
504  u32 pixel_clock);
505 
511 
514  struct drm_display_mode *mode);
516  const struct drm_display_mode *mode);
517 extern void radeon_dp_link_train(struct drm_encoder *encoder,
518  struct drm_connector *connector);
522 extern int radeon_dp_get_panel_mode(struct drm_encoder *encoder,
523  struct drm_connector *connector);
524 extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode);
525 extern void radeon_atom_encoder_init(struct radeon_device *rdev);
528  int action, uint8_t lane_num,
529  uint8_t lane_set);
531 extern struct drm_encoder *radeon_get_external_encoder(struct drm_encoder *encoder);
532 extern int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,
533  u8 write_byte, u8 *read_byte);
534 
535 extern void radeon_i2c_init(struct radeon_device *rdev);
536 extern void radeon_i2c_fini(struct radeon_device *rdev);
537 extern void radeon_combios_i2c_init(struct radeon_device *rdev);
538 extern void radeon_atombios_i2c_init(struct radeon_device *rdev);
539 extern void radeon_i2c_add(struct radeon_device *rdev,
540  struct radeon_i2c_bus_rec *rec,
541  const char *name);
542 extern struct radeon_i2c_chan *radeon_i2c_lookup(struct radeon_device *rdev,
543  struct radeon_i2c_bus_rec *i2c_bus);
544 extern struct radeon_i2c_chan *radeon_i2c_create_dp(struct drm_device *dev,
545  struct radeon_i2c_bus_rec *rec,
546  const char *name);
547 extern struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev,
548  struct radeon_i2c_bus_rec *rec,
549  const char *name);
550 extern void radeon_i2c_destroy(struct radeon_i2c_chan *i2c);
551 extern void radeon_i2c_get_byte(struct radeon_i2c_chan *i2c_bus,
552  u8 slave_addr,
553  u8 addr,
554  u8 *val);
555 extern void radeon_i2c_put_byte(struct radeon_i2c_chan *i2c,
556  u8 slave_addr,
557  u8 addr,
558  u8 val);
563 
565 
567  struct radeon_atom_ss *ss,
568  int id);
570  struct radeon_atom_ss *ss,
571  int id, u32 clock);
572 
573 extern void radeon_compute_pll_legacy(struct radeon_pll *pll,
574  uint64_t freq,
575  uint32_t *dot_clock_p,
576  uint32_t *fb_div_p,
577  uint32_t *frac_fb_div_p,
578  uint32_t *ref_div_p,
579  uint32_t *post_div_p);
580 
581 extern void radeon_compute_pll_avivo(struct radeon_pll *pll,
582  u32 freq,
583  u32 *dot_clock_p,
584  u32 *fb_div_p,
585  u32 *frac_fb_div_p,
586  u32 *ref_div_p,
587  u32 *post_div_p);
588 
589 extern void radeon_setup_encoder_clones(struct drm_device *dev);
590 
591 struct drm_encoder *radeon_encoder_legacy_lvds_add(struct drm_device *dev, int bios_index);
592 struct drm_encoder *radeon_encoder_legacy_primary_dac_add(struct drm_device *dev, int bios_index, int with_tv);
593 struct drm_encoder *radeon_encoder_legacy_tv_dac_add(struct drm_device *dev, int bios_index, int with_tv);
594 struct drm_encoder *radeon_encoder_legacy_tmds_int_add(struct drm_device *dev, int bios_index);
595 struct drm_encoder *radeon_encoder_legacy_tmds_ext_add(struct drm_device *dev, int bios_index);
596 extern void atombios_dvo_setup(struct drm_encoder *encoder, int action);
597 extern void atombios_digital_setup(struct drm_encoder *encoder, int action);
598 extern int atombios_get_encoder_mode(struct drm_encoder *encoder);
600 extern void radeon_encoder_set_active_device(struct drm_encoder *encoder);
601 
602 extern void radeon_crtc_load_lut(struct drm_crtc *crtc);
603 extern int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y,
604  struct drm_framebuffer *old_fb);
605 extern int atombios_crtc_set_base_atomic(struct drm_crtc *crtc,
606  struct drm_framebuffer *fb,
607  int x, int y,
608  enum mode_set_atomic state);
609 extern int atombios_crtc_mode_set(struct drm_crtc *crtc,
610  struct drm_display_mode *mode,
611  struct drm_display_mode *adjusted_mode,
612  int x, int y,
613  struct drm_framebuffer *old_fb);
614 extern void atombios_crtc_dpms(struct drm_crtc *crtc, int mode);
615 
616 extern int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
617  struct drm_framebuffer *old_fb);
618 extern int radeon_crtc_set_base_atomic(struct drm_crtc *crtc,
619  struct drm_framebuffer *fb,
620  int x, int y,
621  enum mode_set_atomic state);
622 extern int radeon_crtc_do_set_base(struct drm_crtc *crtc,
623  struct drm_framebuffer *fb,
624  int x, int y, int atomic);
625 extern int radeon_crtc_cursor_set(struct drm_crtc *crtc,
626  struct drm_file *file_priv,
628  uint32_t width,
629  uint32_t height);
630 extern int radeon_crtc_cursor_move(struct drm_crtc *crtc,
631  int x, int y);
632 
633 extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, int crtc,
634  int *vpos, int *hpos);
635 
637 extern struct edid *
639 extern bool radeon_atom_get_clock_info(struct drm_device *dev);
640 extern bool radeon_combios_get_clock_info(struct drm_device *dev);
641 extern struct radeon_encoder_atom_dig *
643 extern bool radeon_atombios_get_tmds_info(struct radeon_encoder *encoder,
644  struct radeon_encoder_int_tmds *tmds);
645 extern bool radeon_legacy_get_tmds_info_from_combios(struct radeon_encoder *encoder,
646  struct radeon_encoder_int_tmds *tmds);
647 extern bool radeon_legacy_get_tmds_info_from_table(struct radeon_encoder *encoder,
648  struct radeon_encoder_int_tmds *tmds);
650  struct radeon_encoder_ext_tmds *tmds);
652  struct radeon_encoder_ext_tmds *tmds);
653 extern struct radeon_encoder_primary_dac *
655 extern struct radeon_encoder_tv_dac *
657 extern struct radeon_encoder_lvds *
659 extern void radeon_combios_get_ext_tmds_info(struct radeon_encoder *encoder);
660 extern struct radeon_encoder_tv_dac *
662 extern struct radeon_encoder_primary_dac *
664 extern bool radeon_combios_external_tmds_setup(struct drm_encoder *encoder);
665 extern void radeon_external_tmds_setup(struct drm_encoder *encoder);
666 extern void radeon_combios_output_lock(struct drm_encoder *encoder, bool lock);
668 extern void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock);
672 extern void
674 extern void
676 extern void
678 extern void
679 radeon_combios_encoder_dpms_scratch_regs(struct drm_encoder *encoder, bool on);
680 extern void radeon_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
681  u16 blue, int regno);
682 extern void radeon_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
683  u16 *blue, int regno);
685  struct radeon_framebuffer *rfb,
686  struct drm_mode_fb_cmd2 *mode_cmd,
687  struct drm_gem_object *obj);
688 
689 int radeonfb_remove(struct drm_device *dev, struct drm_framebuffer *fb);
693  struct radeon_crtc *radeon_crtc);
695  struct radeon_crtc *radeon_crtc);
696 
697 void radeon_get_clock_info(struct drm_device *dev);
698 
701 
702 void radeon_enc_destroy(struct drm_encoder *encoder);
703 void radeon_copy_fb(struct drm_device *dev, struct drm_gem_object *dst_obj);
706  const struct drm_display_mode *mode,
707  struct drm_display_mode *adjusted_mode);
708 void radeon_panel_mode_fixup(struct drm_encoder *encoder,
709  struct drm_display_mode *adjusted_mode);
711 
712 /* legacy tv */
713 void radeon_legacy_tv_adjust_crtc_reg(struct drm_encoder *encoder,
714  uint32_t *h_total_disp, uint32_t *h_sync_strt_wid,
715  uint32_t *v_total_disp, uint32_t *v_sync_strt_wid);
716 void radeon_legacy_tv_adjust_pll1(struct drm_encoder *encoder,
717  uint32_t *htotal_cntl, uint32_t *ppll_ref_div,
718  uint32_t *ppll_div_3, uint32_t *pixclks_cntl);
719 void radeon_legacy_tv_adjust_pll2(struct drm_encoder *encoder,
720  uint32_t *htotal2_cntl, uint32_t *p2pll_ref_div,
721  uint32_t *p2pll_div_0, uint32_t *pixclks_cntl);
722 void radeon_legacy_tv_mode_set(struct drm_encoder *encoder,
723  struct drm_display_mode *mode,
724  struct drm_display_mode *adjusted_mode);
725 
726 /* fbdev layer */
728 void radeon_fbdev_fini(struct radeon_device *rdev);
731 bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj);
732 
734 
735 void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id);
736 
737 int radeon_align_pitch(struct radeon_device *rdev, int width, int bpp, bool tiled);
738 #endif