int
gf119_dac_new(struct nvkm_disp *disp, int id)
{
+ struct nvkm_device *device = disp->engine.subdev.device;
+ if (!(nvkm_rd32(device, 0x612004) & (0x00000010 << id)))
+ return 0;
return nvkm_ior_new_(&gf119_dac, disp, DAC, id);
}
int
nv50_dac_new(struct nvkm_disp *disp, int id)
{
+ struct nvkm_device *device = disp->engine.subdev.device;
+ if (!(nvkm_rd32(device, 0x610184) & (0x00100000 << id)))
+ return 0;
return nvkm_ior_new_(&nv50_dac, disp, DAC, id);
}
return nv50_ior_base(ior) + ((ior->asy.link == 2) * 0x80);
}
+int nv50_sor_new_(const struct nvkm_ior_func *, struct nvkm_disp *, int id);
void nv50_sor_state(struct nvkm_ior *, struct nvkm_ior_state *);
void nv50_sor_power(struct nvkm_ior *, bool, bool, bool, bool, bool);
void nv50_sor_clock(struct nvkm_ior *);
void gt215_sor_dp_audio(struct nvkm_ior *, int, bool);
+int gf119_sor_new_(const struct nvkm_ior_func *, struct nvkm_disp *, int id);
void gf119_sor_state(struct nvkm_ior *, struct nvkm_ior_state *);
void gf119_sor_clock(struct nvkm_ior *);
int gf119_sor_dp_links(struct nvkm_ior *, struct nvkm_i2c_aux *);
int
nv50_pior_new(struct nvkm_disp *disp, int id)
{
+ struct nvkm_device *device = disp->engine.subdev.device;
+ if (!(nvkm_rd32(device, 0x610184) & (0x10000000 << id)))
+ return 0;
return nvkm_ior_new_(&nv50_pior, disp, PIOR, id);
}
int
g84_sor_new(struct nvkm_disp *disp, int id)
{
- return nvkm_ior_new_(&g84_sor, disp, SOR, id);
+ return nv50_sor_new_(&g84_sor, disp, id);
}
int
g94_sor_new(struct nvkm_disp *disp, int id)
{
- return nvkm_ior_new_(&g94_sor, disp, SOR, id);
+ return nv50_sor_new_(&g94_sor, disp, id);
}
state->head = ctrl & 0x0000000f;
}
+int
+gf119_sor_new_(const struct nvkm_ior_func *func, struct nvkm_disp *disp, int id)
+{
+ struct nvkm_device *device = disp->engine.subdev.device;
+ if (!(nvkm_rd32(device, 0x612004) & (0x00000100 << id)))
+ return 0;
+ return nvkm_ior_new_(func, disp, SOR, id);
+}
+
static const struct nvkm_ior_func
gf119_sor = {
.state = gf119_sor_state,
int
gf119_sor_new(struct nvkm_disp *disp, int id)
{
- return nvkm_ior_new_(&gf119_sor, disp, SOR, id);
+ return gf119_sor_new_(&gf119_sor, disp, id);
}
int
gk104_sor_new(struct nvkm_disp *disp, int id)
{
- return nvkm_ior_new_(&gk104_sor, disp, SOR, id);
+ return gf119_sor_new_(&gk104_sor, disp, id);
}
int
gm107_sor_new(struct nvkm_disp *disp, int id)
{
- return nvkm_ior_new_(&gm107_sor, disp, SOR, id);
+ return gf119_sor_new_(&gm107_sor, disp, id);
}
int
gm200_sor_new(struct nvkm_disp *disp, int id)
{
- return nvkm_ior_new_(&gm200_sor, disp, SOR, id);
+ return gf119_sor_new_(&gm200_sor, disp, id);
}
int
gt215_sor_new(struct nvkm_disp *disp, int id)
{
- return nvkm_ior_new_(>215_sor, disp, SOR, id);
+ return nv50_sor_new_(>215_sor, disp, id);
}
int
mcp77_sor_new(struct nvkm_disp *disp, int id)
{
- return nvkm_ior_new_(&mcp77_sor, disp, SOR, id);
+ return nv50_sor_new_(&mcp77_sor, disp, id);
}
int
mcp89_sor_new(struct nvkm_disp *disp, int id)
{
- return nvkm_ior_new_(&mcp89_sor, disp, SOR, id);
+ return nv50_sor_new_(&mcp89_sor, disp, id);
}
state->head = ctrl & 0x00000003;
}
+int
+nv50_sor_new_(const struct nvkm_ior_func *func, struct nvkm_disp *disp, int id)
+{
+ struct nvkm_device *device = disp->engine.subdev.device;
+ if (!(nvkm_rd32(device, 0x610184) & (0x01000000 << id)))
+ return 0;
+ return nvkm_ior_new_(func, disp, SOR, id);
+}
+
static const struct nvkm_ior_func
nv50_sor = {
.state = nv50_sor_state,
int
nv50_sor_new(struct nvkm_disp *disp, int id)
{
- return nvkm_ior_new_(&nv50_sor, disp, SOR, id);
+ return nv50_sor_new_(&nv50_sor, disp, id);
}