Lines Matching full:aux
33 static int edp_msg_fifo_tx(struct edp_aux *aux, struct drm_dp_aux_msg *msg) in edp_msg_fifo_tx() argument
67 edp_write(aux->base + REG_EDP_AUX_DATA, reg); in edp_msg_fifo_tx()
75 edp_write(aux->base + REG_EDP_AUX_TRANS_CTRL, reg); in edp_msg_fifo_tx()
80 static int edp_msg_fifo_rx(struct edp_aux *aux, struct drm_dp_aux_msg *msg) in edp_msg_fifo_rx() argument
87 edp_write(aux->base + REG_EDP_AUX_DATA, in edp_msg_fifo_rx()
93 data = edp_read(aux->base + REG_EDP_AUX_DATA); in edp_msg_fifo_rx()
95 data = edp_read(aux->base + REG_EDP_AUX_DATA); in edp_msg_fifo_rx()
103 * This function does the real job to process an AUX transaction.
104 * It will call msm_edp_aux_ctrl() function to reset the AUX channel,
108 * start transaction only when AUX channel is fully enabled.
113 struct edp_aux *aux = to_edp_aux(drm_aux); in edp_aux_transfer() local
134 mutex_lock(&aux->msg_mutex); in edp_aux_transfer()
136 aux->msg_err = false; in edp_aux_transfer()
137 reinit_completion(&aux->msg_comp); in edp_aux_transfer()
139 ret = edp_msg_fifo_tx(aux, msg); in edp_aux_transfer()
144 time_left = wait_for_completion_timeout(&aux->msg_comp, in edp_aux_transfer()
148 * Clear GO and reset AUX channel in edp_aux_transfer()
151 edp_write(aux->base + REG_EDP_AUX_TRANS_CTRL, 0); in edp_aux_transfer()
152 msm_edp_aux_ctrl(aux, 1); in edp_aux_transfer()
153 pr_err("%s: aux timeout,\n", __func__); in edp_aux_transfer()
159 if (!aux->msg_err) { in edp_aux_transfer()
161 ret = edp_msg_fifo_rx(aux, msg); in edp_aux_transfer()
183 mutex_unlock(&aux->msg_mutex); in edp_aux_transfer()
190 struct edp_aux *aux = NULL; in msm_edp_aux_init() local
194 aux = devm_kzalloc(dev, sizeof(*aux), GFP_KERNEL); in msm_edp_aux_init()
195 if (!aux) in msm_edp_aux_init()
198 aux->base = regbase; in msm_edp_aux_init()
199 mutex_init(&aux->msg_mutex); in msm_edp_aux_init()
200 init_completion(&aux->msg_comp); in msm_edp_aux_init()
202 aux->drm_aux.name = "msm_edp_aux"; in msm_edp_aux_init()
203 aux->drm_aux.dev = dev; in msm_edp_aux_init()
204 aux->drm_aux.transfer = edp_aux_transfer; in msm_edp_aux_init()
205 ret = drm_dp_aux_register(&aux->drm_aux); in msm_edp_aux_init()
207 pr_err("%s: failed to register drm aux: %d\n", __func__, ret); in msm_edp_aux_init()
208 mutex_destroy(&aux->msg_mutex); in msm_edp_aux_init()
211 if (drm_aux && aux) in msm_edp_aux_init()
212 *drm_aux = &aux->drm_aux; in msm_edp_aux_init()
214 return aux; in msm_edp_aux_init()
217 void msm_edp_aux_destroy(struct device *dev, struct edp_aux *aux) in msm_edp_aux_destroy() argument
219 if (aux) { in msm_edp_aux_destroy()
220 drm_dp_aux_unregister(&aux->drm_aux); in msm_edp_aux_destroy()
221 mutex_destroy(&aux->msg_mutex); in msm_edp_aux_destroy()
225 irqreturn_t msm_edp_aux_irq(struct edp_aux *aux, u32 isr) in msm_edp_aux_irq() argument
229 edp_write(aux->base + REG_EDP_AUX_TRANS_CTRL, 0); in msm_edp_aux_irq()
232 aux->msg_err = true; in msm_edp_aux_irq()
234 aux->msg_err = false; in msm_edp_aux_irq()
236 complete(&aux->msg_comp); in msm_edp_aux_irq()
242 void msm_edp_aux_ctrl(struct edp_aux *aux, int enable) in msm_edp_aux_ctrl() argument
247 data = edp_read(aux->base + REG_EDP_AUX_CTRL); in msm_edp_aux_ctrl()
251 edp_write(aux->base + REG_EDP_AUX_CTRL, data); in msm_edp_aux_ctrl()
258 edp_write(aux->base + REG_EDP_AUX_CTRL, data); in msm_edp_aux_ctrl()
261 edp_write(aux->base + REG_EDP_AUX_CTRL, data); in msm_edp_aux_ctrl()