Lines Matching refs:adap

29 	return &fh->adap->devnode;  in cec_devnode_data()
38 struct cec_adapter *adap = fh->adap; in cec_poll() local
41 if (!cec_is_registered(adap)) in cec_poll()
43 mutex_lock(&adap->lock); in cec_poll()
44 if (adap->is_configured && in cec_poll()
45 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 strlcpy(caps.driver, adap->devnode.dev.parent->driver->name, in cec_adap_g_caps()
82 strlcpy(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()
104 static long cec_adap_s_phys_addr(struct cec_adapter *adap, struct cec_fh *fh, in cec_adap_s_phys_addr() argument
110 if (!(adap->capabilities & CEC_CAP_PHYS_ADDR)) in cec_adap_s_phys_addr()
118 mutex_lock(&adap->lock); in cec_adap_s_phys_addr()
119 if (cec_is_busy(adap, fh)) in cec_adap_s_phys_addr()
122 __cec_s_phys_addr(adap, phys_addr, block); in cec_adap_s_phys_addr()
123 mutex_unlock(&adap->lock); in cec_adap_s_phys_addr()
127 static long cec_adap_g_log_addrs(struct cec_adapter *adap, in cec_adap_g_log_addrs() argument
132 mutex_lock(&adap->lock); in cec_adap_g_log_addrs()
133 log_addrs = adap->log_addrs; in cec_adap_g_log_addrs()
134 if (!adap->is_configured) in cec_adap_g_log_addrs()
137 mutex_unlock(&adap->lock); in cec_adap_g_log_addrs()
144 static long cec_adap_s_log_addrs(struct cec_adapter *adap, struct cec_fh *fh, in cec_adap_s_log_addrs() argument
150 if (!(adap->capabilities & CEC_CAP_LOG_ADDRS)) in cec_adap_s_log_addrs()
157 mutex_lock(&adap->lock); in cec_adap_s_log_addrs()
158 if (!adap->is_configuring && in cec_adap_s_log_addrs()
159 (!log_addrs.num_log_addrs || !adap->is_configured) && in cec_adap_s_log_addrs()
160 !cec_is_busy(adap, fh)) { in cec_adap_s_log_addrs()
161 err = __cec_s_log_addrs(adap, &log_addrs, block); in cec_adap_s_log_addrs()
163 log_addrs = adap->log_addrs; in cec_adap_s_log_addrs()
165 mutex_unlock(&adap->lock); in cec_adap_s_log_addrs()
173 static long cec_transmit(struct cec_adapter *adap, struct cec_fh *fh, in cec_transmit() argument
179 if (!(adap->capabilities & CEC_CAP_TRANSMIT)) in cec_transmit()
185 if ((adap->log_addrs.flags & CEC_LOG_ADDRS_FL_CDC_ONLY) && in cec_transmit()
189 mutex_lock(&adap->lock); in cec_transmit()
190 if (adap->log_addrs.num_log_addrs == 0) in cec_transmit()
192 else if (adap->is_configuring) in cec_transmit()
194 else if (!adap->is_configured && in cec_transmit()
195 (adap->needs_hpd || msg.msg[0] != 0xf0)) in cec_transmit()
197 else if (cec_is_busy(adap, fh)) in cec_transmit()
200 err = cec_transmit_msg_fh(adap, &msg, fh, block); in cec_transmit()
201 mutex_unlock(&adap->lock); in cec_transmit()
260 static long cec_receive(struct cec_adapter *adap, struct cec_fh *fh, in cec_receive() argument
278 static long cec_dqevent(struct cec_adapter *adap, struct cec_fh *fh, in cec_dqevent() argument
328 static long cec_g_mode(struct cec_adapter *adap, struct cec_fh *fh, in cec_g_mode() argument
338 static long cec_s_mode(struct cec_adapter *adap, struct cec_fh *fh, in cec_s_mode() argument
364 !(adap->capabilities & CEC_CAP_MONITOR_ALL)) { in cec_s_mode()
370 !(adap->capabilities & CEC_CAP_MONITOR_PIN)) { in cec_s_mode()
377 !(adap->capabilities & CEC_CAP_TRANSMIT)) && in cec_s_mode()
395 mutex_lock(&adap->lock); in cec_s_mode()
402 adap->cec_follower && adap->cec_follower != fh) in cec_s_mode()
409 adap->cec_initiator && adap->cec_initiator != fh) in cec_s_mode()
418 err = cec_monitor_all_cnt_inc(adap); in cec_s_mode()
420 cec_monitor_all_cnt_dec(adap); in cec_s_mode()
431 err = cec_monitor_pin_cnt_inc(adap); in cec_s_mode()
433 cec_monitor_pin_cnt_dec(adap); in cec_s_mode()
438 mutex_unlock(&adap->lock); in cec_s_mode()
443 adap->follower_cnt--; in cec_s_mode()
445 adap->follower_cnt++; in cec_s_mode()
451 ev.event = adap->cec_pin_is_high ? CEC_EVENT_PIN_CEC_HIGH : in cec_s_mode()
457 adap->passthrough = in cec_s_mode()
459 adap->cec_follower = fh; in cec_s_mode()
460 } else if (adap->cec_follower == fh) { in cec_s_mode()
461 adap->passthrough = false; in cec_s_mode()
462 adap->cec_follower = NULL; in cec_s_mode()
465 adap->cec_initiator = fh; in cec_s_mode()
466 else if (adap->cec_initiator == fh) in cec_s_mode()
467 adap->cec_initiator = NULL; in cec_s_mode()
470 mutex_unlock(&adap->lock); in cec_s_mode()
477 struct cec_adapter *adap = fh->adap; in cec_ioctl() local
481 if (!cec_is_registered(adap)) in cec_ioctl()
486 return cec_adap_g_caps(adap, parg); in cec_ioctl()
489 return cec_adap_g_phys_addr(adap, parg); in cec_ioctl()
492 return cec_adap_s_phys_addr(adap, fh, block, parg); in cec_ioctl()
495 return cec_adap_g_log_addrs(adap, parg); in cec_ioctl()
498 return cec_adap_s_log_addrs(adap, fh, block, parg); in cec_ioctl()
501 return cec_transmit(adap, fh, block, parg); in cec_ioctl()
504 return cec_receive(adap, fh, block, parg); in cec_ioctl()
507 return cec_dqevent(adap, fh, block, parg); in cec_ioctl()
510 return cec_g_mode(adap, fh, parg); in cec_ioctl()
513 return cec_s_mode(adap, fh, parg); in cec_ioctl()
524 struct cec_adapter *adap = to_cec_adapter(devnode); in cec_open() local
548 fh->adap = adap; in cec_open()
558 !adap->needs_hpd && in cec_open()
559 adap->phys_addr == CEC_PHYS_ADDR_INVALID) { in cec_open()
560 err = adap->ops->adap_enable(adap, true); in cec_open()
570 ev.state_change.phys_addr = adap->phys_addr; in cec_open()
571 ev.state_change.log_addr_mask = adap->log_addrs.log_addr_mask; in cec_open()
574 if (adap->pin && adap->pin->ops->read_hpd) { in cec_open()
575 err = adap->pin->ops->read_hpd(adap); in cec_open()
582 if (adap->pin && adap->pin->ops->read_5v) { in cec_open()
583 err = adap->pin->ops->read_5v(adap); in cec_open()
602 struct cec_adapter *adap = to_cec_adapter(devnode); in cec_release() local
606 mutex_lock(&adap->lock); in cec_release()
607 if (adap->cec_initiator == fh) in cec_release()
608 adap->cec_initiator = NULL; in cec_release()
609 if (adap->cec_follower == fh) { in cec_release()
610 adap->cec_follower = NULL; in cec_release()
611 adap->passthrough = false; in cec_release()
614 adap->follower_cnt--; in cec_release()
616 cec_monitor_pin_cnt_dec(adap); in cec_release()
618 cec_monitor_all_cnt_dec(adap); in cec_release()
619 mutex_unlock(&adap->lock); in cec_release()
623 if (cec_is_registered(adap) && list_empty(&devnode->fhs) && in cec_release()
624 !adap->needs_hpd && adap->phys_addr == CEC_PHYS_ADDR_INVALID) { in cec_release()
625 WARN_ON(adap->ops->adap_enable(adap, false)); in cec_release()
630 mutex_lock(&adap->lock); in cec_release()
639 mutex_unlock(&adap->lock); in cec_release()