Lines Matching refs:adap
29 return &fh->adap->devnode; in cec_devnode_data()
38 struct cec_adapter *adap = fh->adap; in cec_poll() local
42 if (!cec_is_registered(adap)) in cec_poll()
44 mutex_lock(&adap->lock); in cec_poll()
45 if (adap->is_configured && in cec_poll()
46 adap->transmit_queue_sz < CEC_MAX_MSG_TX_QUEUE_SZ) in cec_poll()
52 mutex_unlock(&adap->lock); in cec_poll()
56 static bool cec_is_busy(const struct cec_adapter *adap, in cec_is_busy() argument
59 bool valid_initiator = adap->cec_initiator && adap->cec_initiator == fh; in cec_is_busy()
60 bool valid_follower = adap->cec_follower && adap->cec_follower == fh; in cec_is_busy()
71 return adap->cec_initiator || in cec_is_busy()
75 static long cec_adap_g_caps(struct cec_adapter *adap, in cec_adap_g_caps() argument
80 strscpy(caps.driver, adap->devnode.dev.parent->driver->name, in cec_adap_g_caps()
82 strscpy(caps.name, adap->name, sizeof(caps.name)); in cec_adap_g_caps()
83 caps.available_log_addrs = adap->available_log_addrs; in cec_adap_g_caps()
84 caps.capabilities = adap->capabilities; in cec_adap_g_caps()
91 static long cec_adap_g_phys_addr(struct cec_adapter *adap, in cec_adap_g_phys_addr() argument
96 mutex_lock(&adap->lock); in cec_adap_g_phys_addr()
97 phys_addr = adap->phys_addr; in cec_adap_g_phys_addr()
98 mutex_unlock(&adap->lock); in cec_adap_g_phys_addr()
121 static long cec_adap_s_phys_addr(struct cec_adapter *adap, struct cec_fh *fh, in cec_adap_s_phys_addr() argument
127 if (!(adap->capabilities & CEC_CAP_PHYS_ADDR)) in cec_adap_s_phys_addr()
135 mutex_lock(&adap->lock); in cec_adap_s_phys_addr()
136 if (cec_is_busy(adap, fh)) in cec_adap_s_phys_addr()
139 __cec_s_phys_addr(adap, phys_addr, block); in cec_adap_s_phys_addr()
140 mutex_unlock(&adap->lock); in cec_adap_s_phys_addr()
144 static long cec_adap_g_log_addrs(struct cec_adapter *adap, in cec_adap_g_log_addrs() argument
149 mutex_lock(&adap->lock); in cec_adap_g_log_addrs()
156 memcpy(&log_addrs, &adap->log_addrs, sizeof(log_addrs)); in cec_adap_g_log_addrs()
157 if (!adap->is_configured) in cec_adap_g_log_addrs()
160 mutex_unlock(&adap->lock); in cec_adap_g_log_addrs()
167 static long cec_adap_s_log_addrs(struct cec_adapter *adap, struct cec_fh *fh, in cec_adap_s_log_addrs() argument
173 if (!(adap->capabilities & CEC_CAP_LOG_ADDRS)) in cec_adap_s_log_addrs()
180 mutex_lock(&adap->lock); in cec_adap_s_log_addrs()
181 if (!adap->is_claiming_log_addrs && !adap->is_configuring && in cec_adap_s_log_addrs()
182 (!log_addrs.num_log_addrs || !adap->is_configured) && in cec_adap_s_log_addrs()
183 !cec_is_busy(adap, fh)) { in cec_adap_s_log_addrs()
184 err = __cec_s_log_addrs(adap, &log_addrs, block); in cec_adap_s_log_addrs()
186 log_addrs = adap->log_addrs; in cec_adap_s_log_addrs()
188 mutex_unlock(&adap->lock); in cec_adap_s_log_addrs()
196 static long cec_adap_g_connector_info(struct cec_adapter *adap, in cec_adap_g_connector_info() argument
201 if (!(adap->capabilities & CEC_CAP_CONNECTOR_INFO)) in cec_adap_g_connector_info()
204 mutex_lock(&adap->lock); in cec_adap_g_connector_info()
205 if (copy_to_user(parg, &adap->conn_info, sizeof(adap->conn_info))) in cec_adap_g_connector_info()
207 mutex_unlock(&adap->lock); in cec_adap_g_connector_info()
211 static long cec_transmit(struct cec_adapter *adap, struct cec_fh *fh, in cec_transmit() argument
217 if (!(adap->capabilities & CEC_CAP_TRANSMIT)) in cec_transmit()
222 mutex_lock(&adap->lock); in cec_transmit()
223 if (adap->log_addrs.num_log_addrs == 0) in cec_transmit()
225 else if (adap->is_configuring) in cec_transmit()
227 else if (cec_is_busy(adap, fh)) in cec_transmit()
230 err = cec_transmit_msg_fh(adap, &msg, fh, block); in cec_transmit()
231 mutex_unlock(&adap->lock); in cec_transmit()
290 static long cec_receive(struct cec_adapter *adap, struct cec_fh *fh, in cec_receive() argument
308 static long cec_dqevent(struct cec_adapter *adap, struct cec_fh *fh, in cec_dqevent() argument
358 static long cec_g_mode(struct cec_adapter *adap, struct cec_fh *fh, in cec_g_mode() argument
368 static long cec_s_mode(struct cec_adapter *adap, struct cec_fh *fh, in cec_s_mode() argument
394 !(adap->capabilities & CEC_CAP_MONITOR_ALL)) { in cec_s_mode()
400 !(adap->capabilities & CEC_CAP_MONITOR_PIN)) { in cec_s_mode()
407 !(adap->capabilities & CEC_CAP_TRANSMIT)) && in cec_s_mode()
425 mutex_lock(&adap->lock); in cec_s_mode()
432 adap->cec_follower && adap->cec_follower != fh) in cec_s_mode()
439 adap->cec_initiator && adap->cec_initiator != fh) in cec_s_mode()
448 err = cec_monitor_all_cnt_inc(adap); in cec_s_mode()
450 cec_monitor_all_cnt_dec(adap); in cec_s_mode()
461 err = cec_monitor_pin_cnt_inc(adap); in cec_s_mode()
463 cec_monitor_pin_cnt_dec(adap); in cec_s_mode()
468 mutex_unlock(&adap->lock); in cec_s_mode()
473 adap->follower_cnt--; in cec_s_mode()
475 adap->follower_cnt++; in cec_s_mode()
481 ev.event = adap->cec_pin_is_high ? CEC_EVENT_PIN_CEC_HIGH : in cec_s_mode()
487 adap->passthrough = in cec_s_mode()
489 adap->cec_follower = fh; in cec_s_mode()
490 } else if (adap->cec_follower == fh) { in cec_s_mode()
491 adap->passthrough = false; in cec_s_mode()
492 adap->cec_follower = NULL; in cec_s_mode()
495 adap->cec_initiator = fh; in cec_s_mode()
496 else if (adap->cec_initiator == fh) in cec_s_mode()
497 adap->cec_initiator = NULL; in cec_s_mode()
500 mutex_unlock(&adap->lock); in cec_s_mode()
507 struct cec_adapter *adap = fh->adap; in cec_ioctl() local
511 if (!cec_is_registered(adap)) in cec_ioctl()
516 return cec_adap_g_caps(adap, parg); in cec_ioctl()
519 return cec_adap_g_phys_addr(adap, parg); in cec_ioctl()
522 return cec_adap_s_phys_addr(adap, fh, block, parg); in cec_ioctl()
525 return cec_adap_g_log_addrs(adap, parg); in cec_ioctl()
528 return cec_adap_s_log_addrs(adap, fh, block, parg); in cec_ioctl()
531 return cec_adap_g_connector_info(adap, parg); in cec_ioctl()
534 return cec_transmit(adap, fh, block, parg); in cec_ioctl()
537 return cec_receive(adap, fh, block, parg); in cec_ioctl()
540 return cec_dqevent(adap, fh, block, parg); in cec_ioctl()
543 return cec_g_mode(adap, fh, parg); in cec_ioctl()
546 return cec_s_mode(adap, fh, parg); in cec_ioctl()
557 struct cec_adapter *adap = to_cec_adapter(devnode); in cec_open() local
581 fh->adap = adap; in cec_open()
583 err = cec_get_device(adap); in cec_open()
592 ev.state_change.phys_addr = adap->phys_addr; in cec_open()
593 ev.state_change.log_addr_mask = adap->log_addrs.log_addr_mask; in cec_open()
595 adap->conn_info.type != CEC_CONNECTOR_TYPE_NO_CONNECTOR; in cec_open()
598 if (adap->pin && adap->pin->ops->read_hpd && in cec_open()
599 !adap->devnode.unregistered) { in cec_open()
600 err = adap->pin->ops->read_hpd(adap); in cec_open()
607 if (adap->pin && adap->pin->ops->read_5v && in cec_open()
608 !adap->devnode.unregistered) { in cec_open()
609 err = adap->pin->ops->read_5v(adap); in cec_open()
631 struct cec_adapter *adap = to_cec_adapter(devnode); in cec_release() local
635 mutex_lock(&adap->lock); in cec_release()
636 if (adap->cec_initiator == fh) in cec_release()
637 adap->cec_initiator = NULL; in cec_release()
638 if (adap->cec_follower == fh) { in cec_release()
639 adap->cec_follower = NULL; in cec_release()
640 adap->passthrough = false; in cec_release()
643 adap->follower_cnt--; in cec_release()
645 cec_monitor_pin_cnt_dec(adap); in cec_release()
647 cec_monitor_all_cnt_dec(adap); in cec_release()
648 mutex_unlock(&adap->lock); in cec_release()
657 mutex_lock(&adap->lock); in cec_release()
666 mutex_unlock(&adap->lock); in cec_release()
689 cec_put_device(adap); in cec_release()