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()
150 log_addrs = adap->log_addrs; in cec_adap_g_log_addrs()
151 if (!adap->is_configured) in cec_adap_g_log_addrs()
154 mutex_unlock(&adap->lock); in cec_adap_g_log_addrs()
161 static long cec_adap_s_log_addrs(struct cec_adapter *adap, struct cec_fh *fh, in cec_adap_s_log_addrs() argument
167 if (!(adap->capabilities & CEC_CAP_LOG_ADDRS)) in cec_adap_s_log_addrs()
174 mutex_lock(&adap->lock); in cec_adap_s_log_addrs()
175 if (!adap->is_configuring && in cec_adap_s_log_addrs()
176 (!log_addrs.num_log_addrs || !adap->is_configured) && in cec_adap_s_log_addrs()
177 !cec_is_busy(adap, fh)) { in cec_adap_s_log_addrs()
178 err = __cec_s_log_addrs(adap, &log_addrs, block); in cec_adap_s_log_addrs()
180 log_addrs = adap->log_addrs; in cec_adap_s_log_addrs()
182 mutex_unlock(&adap->lock); in cec_adap_s_log_addrs()
190 static long cec_transmit(struct cec_adapter *adap, struct cec_fh *fh, in cec_transmit() argument
196 if (!(adap->capabilities & CEC_CAP_TRANSMIT)) in cec_transmit()
201 mutex_lock(&adap->lock); in cec_transmit()
202 if (adap->log_addrs.num_log_addrs == 0) in cec_transmit()
204 else if (adap->is_configuring) in cec_transmit()
206 else if (cec_is_busy(adap, fh)) in cec_transmit()
209 err = cec_transmit_msg_fh(adap, &msg, fh, block); in cec_transmit()
210 mutex_unlock(&adap->lock); in cec_transmit()
269 static long cec_receive(struct cec_adapter *adap, struct cec_fh *fh, in cec_receive() argument
287 static long cec_dqevent(struct cec_adapter *adap, struct cec_fh *fh, in cec_dqevent() argument
337 static long cec_g_mode(struct cec_adapter *adap, struct cec_fh *fh, in cec_g_mode() argument
347 static long cec_s_mode(struct cec_adapter *adap, struct cec_fh *fh, in cec_s_mode() argument
373 !(adap->capabilities & CEC_CAP_MONITOR_ALL)) { in cec_s_mode()
379 !(adap->capabilities & CEC_CAP_MONITOR_PIN)) { in cec_s_mode()
386 !(adap->capabilities & CEC_CAP_TRANSMIT)) && in cec_s_mode()
404 mutex_lock(&adap->lock); in cec_s_mode()
411 adap->cec_follower && adap->cec_follower != fh) in cec_s_mode()
418 adap->cec_initiator && adap->cec_initiator != fh) in cec_s_mode()
427 err = cec_monitor_all_cnt_inc(adap); in cec_s_mode()
429 cec_monitor_all_cnt_dec(adap); in cec_s_mode()
440 err = cec_monitor_pin_cnt_inc(adap); in cec_s_mode()
442 cec_monitor_pin_cnt_dec(adap); in cec_s_mode()
447 mutex_unlock(&adap->lock); in cec_s_mode()
452 adap->follower_cnt--; in cec_s_mode()
454 adap->follower_cnt++; in cec_s_mode()
460 ev.event = adap->cec_pin_is_high ? CEC_EVENT_PIN_CEC_HIGH : in cec_s_mode()
466 adap->passthrough = in cec_s_mode()
468 adap->cec_follower = fh; in cec_s_mode()
469 } else if (adap->cec_follower == fh) { in cec_s_mode()
470 adap->passthrough = false; in cec_s_mode()
471 adap->cec_follower = NULL; in cec_s_mode()
474 adap->cec_initiator = fh; in cec_s_mode()
475 else if (adap->cec_initiator == fh) in cec_s_mode()
476 adap->cec_initiator = NULL; in cec_s_mode()
479 mutex_unlock(&adap->lock); in cec_s_mode()
486 struct cec_adapter *adap = fh->adap; in cec_ioctl() local
490 if (!cec_is_registered(adap)) in cec_ioctl()
495 return cec_adap_g_caps(adap, parg); in cec_ioctl()
498 return cec_adap_g_phys_addr(adap, parg); in cec_ioctl()
501 return cec_adap_s_phys_addr(adap, fh, block, parg); in cec_ioctl()
504 return cec_adap_g_log_addrs(adap, parg); in cec_ioctl()
507 return cec_adap_s_log_addrs(adap, fh, block, parg); in cec_ioctl()
510 return cec_transmit(adap, fh, block, parg); in cec_ioctl()
513 return cec_receive(adap, fh, block, parg); in cec_ioctl()
516 return cec_dqevent(adap, fh, block, parg); in cec_ioctl()
519 return cec_g_mode(adap, fh, parg); in cec_ioctl()
522 return cec_s_mode(adap, fh, parg); in cec_ioctl()
533 struct cec_adapter *adap = to_cec_adapter(devnode); in cec_open() local
557 fh->adap = adap; in cec_open()
567 !adap->needs_hpd && in cec_open()
568 adap->phys_addr == CEC_PHYS_ADDR_INVALID) { in cec_open()
569 err = adap->ops->adap_enable(adap, true); in cec_open()
579 ev.state_change.phys_addr = adap->phys_addr; in cec_open()
580 ev.state_change.log_addr_mask = adap->log_addrs.log_addr_mask; in cec_open()
583 if (adap->pin && adap->pin->ops->read_hpd) { in cec_open()
584 err = adap->pin->ops->read_hpd(adap); in cec_open()
591 if (adap->pin && adap->pin->ops->read_5v) { in cec_open()
592 err = adap->pin->ops->read_5v(adap); in cec_open()
611 struct cec_adapter *adap = to_cec_adapter(devnode); in cec_release() local
615 mutex_lock(&adap->lock); in cec_release()
616 if (adap->cec_initiator == fh) in cec_release()
617 adap->cec_initiator = NULL; in cec_release()
618 if (adap->cec_follower == fh) { in cec_release()
619 adap->cec_follower = NULL; in cec_release()
620 adap->passthrough = false; in cec_release()
623 adap->follower_cnt--; in cec_release()
625 cec_monitor_pin_cnt_dec(adap); in cec_release()
627 cec_monitor_all_cnt_dec(adap); in cec_release()
628 mutex_unlock(&adap->lock); in cec_release()
632 if (cec_is_registered(adap) && list_empty(&devnode->fhs) && in cec_release()
633 !adap->needs_hpd && adap->phys_addr == CEC_PHYS_ADDR_INVALID) { in cec_release()
634 WARN_ON(adap->ops->adap_enable(adap, false)); in cec_release()
639 mutex_lock(&adap->lock); in cec_release()
648 mutex_unlock(&adap->lock); in cec_release()