Lines Matching defs:aux

49 static ssize_t dp_aux_write(struct dp_aux_private *aux,
59 if (aux->read)
75 if (aux->read)
90 aux->catalog->aux_data = reg;
91 dp_catalog_aux_write_data(aux->catalog);
94 dp_catalog_aux_clear_trans(aux->catalog, false);
95 dp_catalog_aux_clear_hw_interrupts(aux->catalog);
98 if (!aux->native) { /* i2c */
101 if (aux->no_send_addr)
104 if (aux->no_send_stop)
109 aux->catalog->aux_data = reg;
110 dp_catalog_aux_write_trans(aux->catalog);
115 static ssize_t dp_aux_cmd_fifo_tx(struct dp_aux_private *aux,
121 reinit_completion(&aux->comp);
123 ret = dp_aux_write(aux, msg);
127 time_left = wait_for_completion_timeout(&aux->comp,
135 static ssize_t dp_aux_cmd_fifo_rx(struct dp_aux_private *aux,
143 dp_catalog_aux_clear_trans(aux->catalog, true);
148 aux->catalog->aux_data = data;
149 dp_catalog_aux_write_data(aux->catalog);
154 data = dp_catalog_aux_read_data(aux->catalog);
157 data = dp_catalog_aux_read_data(aux->catalog);
168 static void dp_aux_update_offset_and_segment(struct dp_aux_private *aux,
177 if (aux->native || i2c_read || ((input_msg->address != edid_address) &&
184 aux->segment = *data;
186 aux->offset = *data;
192 * @aux: DP AUX private structure
201 static void dp_aux_transfer_helper(struct dp_aux_private *aux,
222 if (!(aux->offset % edid_block_length) || !send_seg)
225 aux->read = false;
226 aux->cmd_busy = true;
227 aux->no_send_addr = true;
228 aux->no_send_stop = true;
238 if (aux->segment) {
241 helper_msg.buffer = &aux->segment;
243 dp_aux_cmd_fifo_tx(aux, &helper_msg);
255 helper_msg.buffer = &aux->offset;
257 dp_aux_cmd_fifo_tx(aux, &helper_msg);
260 aux->offset += message_size;
261 if (aux->offset == 0x80 || aux->offset == 0x100)
262 aux->segment = 0x0; /* reset segment at end of block */
276 struct dp_aux_private *aux;
278 aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
280 aux->native = msg->request & (DP_AUX_NATIVE_WRITE & DP_AUX_NATIVE_READ);
284 msg->reply = aux->native ?
290 if ((aux->native && msg->size > aux_cmd_native_max) ||
301 mutex_lock(&aux->mutex);
302 if (!aux->initted) {
315 if (aux->is_edp) {
316 ret = dp_catalog_aux_wait_for_hpd_connect_state(aux->catalog);
318 DRM_DEBUG_DP("Panel not ready for aux transactions\n");
323 dp_aux_update_offset_and_segment(aux, msg);
324 dp_aux_transfer_helper(aux, msg, true);
326 aux->read = msg->request & (DP_AUX_I2C_READ & DP_AUX_NATIVE_READ);
327 aux->cmd_busy = true;
329 if (aux->read) {
330 aux->no_send_addr = true;
331 aux->no_send_stop = false;
333 aux->no_send_addr = true;
334 aux->no_send_stop = true;
337 ret = dp_aux_cmd_fifo_tx(aux, msg);
339 if (aux->native) {
340 aux->retry_cnt++;
341 if (!(aux->retry_cnt % MAX_AUX_RETRIES))
342 phy_calibrate(aux->phy);
344 /* reset aux if link is in connected state */
345 if (dp_catalog_link_is_connected(aux->catalog))
346 dp_catalog_aux_reset(aux->catalog);
348 aux->retry_cnt = 0;
349 switch (aux->aux_error_num) {
351 if (aux->read)
352 ret = dp_aux_cmd_fifo_rx(aux, msg);
353 msg->reply = aux->native ? DP_AUX_NATIVE_REPLY_ACK : DP_AUX_I2C_REPLY_ACK;
356 msg->reply = aux->native ? DP_AUX_NATIVE_REPLY_DEFER : DP_AUX_I2C_REPLY_DEFER;
362 msg->reply = aux->native ? DP_AUX_NATIVE_REPLY_NACK : DP_AUX_I2C_REPLY_NACK;
370 aux->cmd_busy = false;
373 mutex_unlock(&aux->mutex);
382 struct dp_aux_private *aux;
389 aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
391 isr = dp_catalog_aux_get_irq(aux->catalog);
397 if (!aux->cmd_busy) {
412 aux->aux_error_num = DP_AUX_ERR_PHY;
413 dp_catalog_aux_clear_hw_interrupts(aux->catalog);
415 aux->aux_error_num = DP_AUX_ERR_NACK_DEFER;
417 aux->aux_error_num = DP_AUX_ERR_ADDR;
419 aux->aux_error_num = DP_AUX_ERR_TOUT;
420 } else if (!aux->native && (isr & DP_INTR_I2C_NACK)) {
421 aux->aux_error_num = DP_AUX_ERR_NACK;
422 } else if (!aux->native && (isr & DP_INTR_I2C_DEFER)) {
424 aux->aux_error_num = DP_AUX_ERR_NACK;
426 aux->aux_error_num = DP_AUX_ERR_DEFER;
428 aux->aux_error_num = DP_AUX_ERR_NONE;
434 complete(&aux->comp);
441 struct dp_aux_private *aux;
443 aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
445 phy_calibrate(aux->phy);
446 dp_catalog_aux_reset(aux->catalog);
451 struct dp_aux_private *aux;
458 aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
460 mutex_lock(&aux->mutex);
462 dp_catalog_aux_enable(aux->catalog, true);
463 aux->retry_cnt = 0;
464 aux->initted = true;
466 mutex_unlock(&aux->mutex);
471 struct dp_aux_private *aux;
473 aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
475 mutex_lock(&aux->mutex);
477 aux->initted = false;
478 dp_catalog_aux_enable(aux->catalog, false);
480 mutex_unlock(&aux->mutex);
494 DRM_ERROR("%s: failed to register drm aux: %d\n", __func__,
511 struct dp_aux_private *aux;
513 aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
515 pm_runtime_get_sync(aux->dev);
516 ret = dp_catalog_aux_wait_for_hpd_connect_state(aux->catalog);
517 pm_runtime_put_sync(aux->dev);
526 struct dp_aux_private *aux;
533 aux = devm_kzalloc(dev, sizeof(*aux), GFP_KERNEL);
534 if (!aux)
537 init_completion(&aux->comp);
538 aux->cmd_busy = false;
539 aux->is_edp = is_edp;
540 mutex_init(&aux->mutex);
542 aux->dev = dev;
543 aux->catalog = catalog;
544 aux->phy = phy;
545 aux->retry_cnt = 0;
548 * Use the drm_dp_aux_init() to use the aux adapter
552 aux->dp_aux.name = "dpu_dp_aux";
553 aux->dp_aux.dev = dev;
554 aux->dp_aux.transfer = dp_aux_transfer;
555 aux->dp_aux.wait_hpd_asserted = dp_wait_hpd_asserted;
556 drm_dp_aux_init(&aux->dp_aux);
558 return &aux->dp_aux;
563 struct dp_aux_private *aux;
568 aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
570 mutex_destroy(&aux->mutex);
572 devm_kfree(aux->dev, aux);