This source file includes following definitions.
- nv50_head_vblank_put
- nv50_head_vblank_get
- nv50_head_rgclk
- nv50_head_rgpos
- nv50_head_state
- nv50_head_new
- nv50_head_cnt
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 #include "head.h"
  25 
  26 static void
  27 nv50_head_vblank_put(struct nvkm_head *head)
  28 {
  29         struct nvkm_device *device = head->disp->engine.subdev.device;
  30         nvkm_mask(device, 0x61002c, (4 << head->id), 0);
  31 }
  32 
  33 static void
  34 nv50_head_vblank_get(struct nvkm_head *head)
  35 {
  36         struct nvkm_device *device = head->disp->engine.subdev.device;
  37         nvkm_mask(device, 0x61002c, (4 << head->id), (4 << head->id));
  38 }
  39 
  40 static void
  41 nv50_head_rgclk(struct nvkm_head *head, int div)
  42 {
  43         struct nvkm_device *device = head->disp->engine.subdev.device;
  44         nvkm_mask(device, 0x614200 + (head->id * 0x800), 0x0000000f, div);
  45 }
  46 
  47 void
  48 nv50_head_rgpos(struct nvkm_head *head, u16 *hline, u16 *vline)
  49 {
  50         struct nvkm_device *device = head->disp->engine.subdev.device;
  51         const u32 hoff = head->id * 0x800;
  52         
  53         *vline = nvkm_rd32(device, 0x616340 + hoff) & 0x0000ffff;
  54         *hline = nvkm_rd32(device, 0x616344 + hoff) & 0x0000ffff;
  55 }
  56 
  57 static void
  58 nv50_head_state(struct nvkm_head *head, struct nvkm_head_state *state)
  59 {
  60         struct nvkm_device *device = head->disp->engine.subdev.device;
  61         const u32 hoff = head->id * 0x540 + (state == &head->arm) * 4;
  62         u32 data;
  63 
  64         data = nvkm_rd32(device, 0x610ae8 + hoff);
  65         state->vblanke = (data & 0xffff0000) >> 16;
  66         state->hblanke = (data & 0x0000ffff);
  67         data = nvkm_rd32(device, 0x610af0 + hoff);
  68         state->vblanks = (data & 0xffff0000) >> 16;
  69         state->hblanks = (data & 0x0000ffff);
  70         data = nvkm_rd32(device, 0x610af8 + hoff);
  71         state->vtotal = (data & 0xffff0000) >> 16;
  72         state->htotal = (data & 0x0000ffff);
  73         data = nvkm_rd32(device, 0x610b00 + hoff);
  74         state->vsynce = (data & 0xffff0000) >> 16;
  75         state->hsynce = (data & 0x0000ffff);
  76         state->hz = (nvkm_rd32(device, 0x610ad0 + hoff) & 0x003fffff) * 1000;
  77 }
  78 
  79 static const struct nvkm_head_func
  80 nv50_head = {
  81         .state = nv50_head_state,
  82         .rgpos = nv50_head_rgpos,
  83         .rgclk = nv50_head_rgclk,
  84         .vblank_get = nv50_head_vblank_get,
  85         .vblank_put = nv50_head_vblank_put,
  86 };
  87 
  88 int
  89 nv50_head_new(struct nvkm_disp *disp, int id)
  90 {
  91         return nvkm_head_new_(&nv50_head, disp, id);
  92 }
  93 
  94 int
  95 nv50_head_cnt(struct nvkm_disp *disp, unsigned long *pmask)
  96 {
  97         *pmask = 3;
  98         return 2;
  99 }