Loading drivers/gpu/drm/nouveau/core/engine/disp/outp.c +4 −1 Original line number Diff line number Diff line Loading @@ -85,7 +85,10 @@ nvkm_output_create_(struct nouveau_object *parent, dcbE->sorconf.link : 0, dcbE->connector, dcbE->i2c_index, dcbE->bus, dcbE->heads); outp->port = i2c->find(i2c, outp->info.i2c_index); if (outp->info.type != DCB_OUTPUT_DP) outp->port = i2c->find(i2c, NV_I2C_PORT(outp->info.i2c_index)); else outp->port = i2c->find(i2c, NV_I2C_AUX(outp->info.i2c_index)); outp->edid = outp->port; data = nvbios_connEp(bios, outp->info.connector, &ver, &hdr, &connE); Loading drivers/gpu/drm/nouveau/core/include/subdev/i2c.h +2 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,8 @@ #include <subdev/bios/i2c.h> #define NV_I2C_PORT(n) (0x00 + (n)) #define NV_I2C_AUX(n) (0x10 + (n)) #define NV_I2C_EXT(n) (0x20 + (n)) #define NV_I2C_DEFAULT(n) (0x80 + (n)) #define NV_I2C_TYPE_DCBI2C(n) (0x0000 | (n)) Loading drivers/gpu/drm/nouveau/core/subdev/bios/init.c +2 −0 Original line number Diff line number Diff line Loading @@ -255,6 +255,8 @@ init_i2c(struct nvbios_init *init, int index) } index = init->outp->i2c_index; if (init->outp->type == DCB_OUTPUT_DP) index += NV_I2C_AUX(0); } return i2c->find(i2c, index); Loading drivers/gpu/drm/nouveau/core/subdev/i2c/base.c +6 −2 Original line number Diff line number Diff line Loading @@ -549,8 +549,12 @@ nouveau_i2c_create_(struct nouveau_object *parent, case DCB_I2C_NV04_BIT: case DCB_I2C_NV4E_BIT: case DCB_I2C_NVIO_BIT: nouveau_i2c_create_port(i2c, NV_I2C_PORT(index), info.type, &info); break; case DCB_I2C_NVIO_AUX: nouveau_i2c_create_port(i2c, index, info.type, &info); nouveau_i2c_create_port(i2c, NV_I2C_AUX(index), info.type, &info); break; case DCB_I2C_UNUSED: default: Loading @@ -562,7 +566,7 @@ nouveau_i2c_create_(struct nouveau_object *parent, * may be ddc/aux channels hiding behind external tmds/dp/etc * transmitters. */ index = ((index + 0x0f) / 0x10) * 0x10; index = NV_I2C_EXT(0); i = -1; while ((data = dcb_outp_parse(bios, ++i, &ver, &hdr, &outp))) { if (!outp.location || !outp.extdev) Loading drivers/gpu/drm/nouveau/nouveau_bios.c +1 −0 Original line number Diff line number Diff line Loading @@ -1493,6 +1493,7 @@ parse_dcb20_entry(struct drm_device *dev, struct dcb_table *dcb, break; } link = entry->dpconf.sor.link; entry->i2c_index += NV_I2C_AUX(0); break; case DCB_OUTPUT_TMDS: if (dcb->version >= 0x40) { Loading Loading
drivers/gpu/drm/nouveau/core/engine/disp/outp.c +4 −1 Original line number Diff line number Diff line Loading @@ -85,7 +85,10 @@ nvkm_output_create_(struct nouveau_object *parent, dcbE->sorconf.link : 0, dcbE->connector, dcbE->i2c_index, dcbE->bus, dcbE->heads); outp->port = i2c->find(i2c, outp->info.i2c_index); if (outp->info.type != DCB_OUTPUT_DP) outp->port = i2c->find(i2c, NV_I2C_PORT(outp->info.i2c_index)); else outp->port = i2c->find(i2c, NV_I2C_AUX(outp->info.i2c_index)); outp->edid = outp->port; data = nvbios_connEp(bios, outp->info.connector, &ver, &hdr, &connE); Loading
drivers/gpu/drm/nouveau/core/include/subdev/i2c.h +2 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,8 @@ #include <subdev/bios/i2c.h> #define NV_I2C_PORT(n) (0x00 + (n)) #define NV_I2C_AUX(n) (0x10 + (n)) #define NV_I2C_EXT(n) (0x20 + (n)) #define NV_I2C_DEFAULT(n) (0x80 + (n)) #define NV_I2C_TYPE_DCBI2C(n) (0x0000 | (n)) Loading
drivers/gpu/drm/nouveau/core/subdev/bios/init.c +2 −0 Original line number Diff line number Diff line Loading @@ -255,6 +255,8 @@ init_i2c(struct nvbios_init *init, int index) } index = init->outp->i2c_index; if (init->outp->type == DCB_OUTPUT_DP) index += NV_I2C_AUX(0); } return i2c->find(i2c, index); Loading
drivers/gpu/drm/nouveau/core/subdev/i2c/base.c +6 −2 Original line number Diff line number Diff line Loading @@ -549,8 +549,12 @@ nouveau_i2c_create_(struct nouveau_object *parent, case DCB_I2C_NV04_BIT: case DCB_I2C_NV4E_BIT: case DCB_I2C_NVIO_BIT: nouveau_i2c_create_port(i2c, NV_I2C_PORT(index), info.type, &info); break; case DCB_I2C_NVIO_AUX: nouveau_i2c_create_port(i2c, index, info.type, &info); nouveau_i2c_create_port(i2c, NV_I2C_AUX(index), info.type, &info); break; case DCB_I2C_UNUSED: default: Loading @@ -562,7 +566,7 @@ nouveau_i2c_create_(struct nouveau_object *parent, * may be ddc/aux channels hiding behind external tmds/dp/etc * transmitters. */ index = ((index + 0x0f) / 0x10) * 0x10; index = NV_I2C_EXT(0); i = -1; while ((data = dcb_outp_parse(bios, ++i, &ver, &hdr, &outp))) { if (!outp.location || !outp.extdev) Loading
drivers/gpu/drm/nouveau/nouveau_bios.c +1 −0 Original line number Diff line number Diff line Loading @@ -1493,6 +1493,7 @@ parse_dcb20_entry(struct drm_device *dev, struct dcb_table *dcb, break; } link = entry->dpconf.sor.link; entry->i2c_index += NV_I2C_AUX(0); break; case DCB_OUTPUT_TMDS: if (dcb->version >= 0x40) { Loading