• Home
  • Raw
  • Download

Lines Matching full:aux

3  * DisplayPort CEC-Tunneling-over-AUX support
17 * have a converter chip that supports CEC-Tunneling-over-AUX (usually the
50 * These functions take care of supporting the CEC-Tunneling-over-AUX
88 struct drm_dp_aux *aux = cec_get_drvdata(adap); in drm_dp_cec_adap_enable() local
92 err = drm_dp_dpcd_writeb(aux, DP_CEC_TUNNELING_CONTROL, val); in drm_dp_cec_adap_enable()
98 struct drm_dp_aux *aux = cec_get_drvdata(adap); in drm_dp_cec_adap_log_addr() local
108 err = drm_dp_dpcd_write(aux, DP_CEC_LOGICAL_ADDRESS_MASK, mask, 2); in drm_dp_cec_adap_log_addr()
115 struct drm_dp_aux *aux = cec_get_drvdata(adap); in drm_dp_cec_adap_transmit() local
119 err = drm_dp_dpcd_write(aux, DP_CEC_TX_MESSAGE_BUFFER, in drm_dp_cec_adap_transmit()
124 err = drm_dp_dpcd_writeb(aux, DP_CEC_TX_MESSAGE_INFO, in drm_dp_cec_adap_transmit()
133 struct drm_dp_aux *aux = cec_get_drvdata(adap); in drm_dp_cec_adap_monitor_all_enable() local
140 err = drm_dp_dpcd_readb(aux, DP_CEC_TUNNELING_CONTROL, &val); in drm_dp_cec_adap_monitor_all_enable()
146 err = drm_dp_dpcd_writeb(aux, DP_CEC_TUNNELING_CONTROL, val); in drm_dp_cec_adap_monitor_all_enable()
154 struct drm_dp_aux *aux = cec_get_drvdata(adap); in drm_dp_cec_adap_status() local
158 if (drm_dp_read_desc(aux, &desc, true)) in drm_dp_cec_adap_status()
183 static int drm_dp_cec_received(struct drm_dp_aux *aux) in drm_dp_cec_received() argument
185 struct cec_adapter *adap = aux->cec.adap; in drm_dp_cec_received()
190 err = drm_dp_dpcd_readb(aux, DP_CEC_RX_MESSAGE_INFO, &rx_msg_info); in drm_dp_cec_received()
198 err = drm_dp_dpcd_read(aux, DP_CEC_RX_MESSAGE_BUFFER, msg.msg, msg.len); in drm_dp_cec_received()
206 static void drm_dp_cec_handle_irq(struct drm_dp_aux *aux) in drm_dp_cec_handle_irq() argument
208 struct cec_adapter *adap = aux->cec.adap; in drm_dp_cec_handle_irq()
211 if (drm_dp_dpcd_readb(aux, DP_CEC_TUNNELING_IRQ_FLAGS, &flags) < 0) in drm_dp_cec_handle_irq()
215 drm_dp_cec_received(aux); in drm_dp_cec_handle_irq()
226 drm_dp_dpcd_writeb(aux, DP_CEC_TUNNELING_IRQ_FLAGS, flags); in drm_dp_cec_handle_irq()
231 * @aux: DisplayPort AUX channel
233 * Should be called when handling an IRQ_HPD request. If CEC-tunneling-over-AUX
236 void drm_dp_cec_irq(struct drm_dp_aux *aux) in drm_dp_cec_irq() argument
241 mutex_lock(&aux->cec.lock); in drm_dp_cec_irq()
242 if (!aux->cec.adap) in drm_dp_cec_irq()
245 ret = drm_dp_dpcd_readb(aux, DP_DEVICE_SERVICE_IRQ_VECTOR_ESI1, in drm_dp_cec_irq()
250 drm_dp_cec_handle_irq(aux); in drm_dp_cec_irq()
251 drm_dp_dpcd_writeb(aux, DP_DEVICE_SERVICE_IRQ_VECTOR_ESI1, DP_CEC_IRQ); in drm_dp_cec_irq()
253 mutex_unlock(&aux->cec.lock); in drm_dp_cec_irq()
257 static bool drm_dp_cec_cap(struct drm_dp_aux *aux, u8 *cec_cap) in drm_dp_cec_cap() argument
261 if (drm_dp_dpcd_readb(aux, DP_CEC_TUNNELING_CAPABILITY, &cap) != 1 || in drm_dp_cec_cap()
275 struct drm_dp_aux *aux = container_of(work, struct drm_dp_aux, in drm_dp_cec_unregister_work() local
278 mutex_lock(&aux->cec.lock); in drm_dp_cec_unregister_work()
279 cec_unregister_adapter(aux->cec.adap); in drm_dp_cec_unregister_work()
280 aux->cec.adap = NULL; in drm_dp_cec_unregister_work()
281 mutex_unlock(&aux->cec.lock); in drm_dp_cec_unregister_work()
290 void drm_dp_cec_set_edid(struct drm_dp_aux *aux, const struct edid *edid) in drm_dp_cec_set_edid() argument
306 cancel_delayed_work_sync(&aux->cec.unregister_work); in drm_dp_cec_set_edid()
308 mutex_lock(&aux->cec.lock); in drm_dp_cec_set_edid()
309 if (!drm_dp_cec_cap(aux, &cap)) { in drm_dp_cec_set_edid()
311 cec_unregister_adapter(aux->cec.adap); in drm_dp_cec_set_edid()
312 aux->cec.adap = NULL; in drm_dp_cec_set_edid()
321 if (aux->cec.adap) { in drm_dp_cec_set_edid()
322 if (aux->cec.adap->capabilities == cec_caps && in drm_dp_cec_set_edid()
323 aux->cec.adap->available_log_addrs == num_las) { in drm_dp_cec_set_edid()
325 cec_s_phys_addr_from_edid(aux->cec.adap, edid); in drm_dp_cec_set_edid()
332 cec_unregister_adapter(aux->cec.adap); in drm_dp_cec_set_edid()
336 aux->cec.adap = cec_allocate_adapter(&drm_dp_cec_adap_ops, in drm_dp_cec_set_edid()
337 aux, aux->cec.name, cec_caps, in drm_dp_cec_set_edid()
339 if (IS_ERR(aux->cec.adap)) { in drm_dp_cec_set_edid()
340 aux->cec.adap = NULL; in drm_dp_cec_set_edid()
343 if (cec_register_adapter(aux->cec.adap, aux->cec.parent)) { in drm_dp_cec_set_edid()
344 cec_delete_adapter(aux->cec.adap); in drm_dp_cec_set_edid()
345 aux->cec.adap = NULL; in drm_dp_cec_set_edid()
352 cec_s_phys_addr_from_edid(aux->cec.adap, edid); in drm_dp_cec_set_edid()
355 mutex_unlock(&aux->cec.lock); in drm_dp_cec_set_edid()
362 void drm_dp_cec_unset_edid(struct drm_dp_aux *aux) in drm_dp_cec_unset_edid() argument
364 cancel_delayed_work_sync(&aux->cec.unregister_work); in drm_dp_cec_unset_edid()
366 mutex_lock(&aux->cec.lock); in drm_dp_cec_unset_edid()
367 if (!aux->cec.adap) in drm_dp_cec_unset_edid()
370 cec_phys_addr_invalidate(aux->cec.adap); in drm_dp_cec_unset_edid()
378 !drm_dp_cec_cap(aux, NULL)) { in drm_dp_cec_unset_edid()
384 schedule_delayed_work(&aux->cec.unregister_work, in drm_dp_cec_unset_edid()
388 mutex_unlock(&aux->cec.lock); in drm_dp_cec_unset_edid()
394 * @aux: DisplayPort AUX channel
403 void drm_dp_cec_register_connector(struct drm_dp_aux *aux, const char *name, in drm_dp_cec_register_connector() argument
406 WARN_ON(aux->cec.adap); in drm_dp_cec_register_connector()
407 aux->cec.name = name; in drm_dp_cec_register_connector()
408 aux->cec.parent = parent; in drm_dp_cec_register_connector()
409 INIT_DELAYED_WORK(&aux->cec.unregister_work, in drm_dp_cec_register_connector()
412 drm_dp_cec_set_edid(aux, NULL); in drm_dp_cec_register_connector()
418 * @aux: DisplayPort AUX channel
420 void drm_dp_cec_unregister_connector(struct drm_dp_aux *aux) in drm_dp_cec_unregister_connector() argument
422 if (!aux->cec.adap) in drm_dp_cec_unregister_connector()
424 cancel_delayed_work_sync(&aux->cec.unregister_work); in drm_dp_cec_unregister_connector()
425 cec_unregister_adapter(aux->cec.adap); in drm_dp_cec_unregister_connector()
426 aux->cec.adap = NULL; in drm_dp_cec_unregister_connector()