@@ -81,20 +81,29 @@ nvkm_uconn_uevent(struct nvkm_object *object, void *argv, u32 argc, struct nvkm_
8181 return - ENOSYS ;
8282
8383 list_for_each_entry (outp , & conn -> disp -> outps , head ) {
84- if (outp -> info .connector == conn -> index && outp -> dp .aux ) {
85- if (args -> v0 .types & NVIF_CONN_EVENT_V0_PLUG ) bits |= NVKM_I2C_PLUG ;
86- if (args -> v0 .types & NVIF_CONN_EVENT_V0_UNPLUG ) bits |= NVKM_I2C_UNPLUG ;
87- if (args -> v0 .types & NVIF_CONN_EVENT_V0_IRQ ) bits |= NVKM_I2C_IRQ ;
84+ if (outp -> info .connector == conn -> index )
85+ break ;
86+ }
8887
89- return nvkm_uevent_add (uevent , & device -> i2c -> event , outp -> dp .aux -> id , bits ,
90- nvkm_uconn_uevent_aux );
91- }
88+ if (& outp -> head == & conn -> disp -> outps )
89+ return - EINVAL ;
90+
91+ if (outp -> dp .aux && !outp -> info .location ) {
92+ if (args -> v0 .types & NVIF_CONN_EVENT_V0_PLUG ) bits |= NVKM_I2C_PLUG ;
93+ if (args -> v0 .types & NVIF_CONN_EVENT_V0_UNPLUG ) bits |= NVKM_I2C_UNPLUG ;
94+ if (args -> v0 .types & NVIF_CONN_EVENT_V0_IRQ ) bits |= NVKM_I2C_IRQ ;
95+
96+ return nvkm_uevent_add (uevent , & device -> i2c -> event , outp -> dp .aux -> id , bits ,
97+ nvkm_uconn_uevent_aux );
9298 }
9399
94100 if (args -> v0 .types & NVIF_CONN_EVENT_V0_PLUG ) bits |= NVKM_GPIO_HI ;
95101 if (args -> v0 .types & NVIF_CONN_EVENT_V0_UNPLUG ) bits |= NVKM_GPIO_LO ;
96- if (args -> v0 .types & NVIF_CONN_EVENT_V0_IRQ )
97- return - EINVAL ;
102+ if (args -> v0 .types & NVIF_CONN_EVENT_V0_IRQ ) {
103+ /* TODO: support DP IRQ on ANX9805 and remove this hack. */
104+ if (!outp -> info .location )
105+ return - EINVAL ;
106+ }
98107
99108 return nvkm_uevent_add (uevent , & device -> gpio -> event , conn -> info .hpd , bits ,
100109 nvkm_uconn_uevent_gpio );
0 commit comments