Lines Matching refs:adap

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