Lines Matching refs:dev

23 static bool find_dest_adap(struct vivid_dev *dev,  in find_dest_adap()  argument
31 if (adap != dev->cec_rx_adap && dev->cec_rx_adap && in find_dest_adap()
32 dev->cec_rx_adap->is_configured && in find_dest_adap()
33 cec_has_log_addr(dev->cec_rx_adap, dest)) in find_dest_adap()
36 for (i = 0; i < MAX_OUTPUTS && dev->cec_tx_adap[i]; i++) { in find_dest_adap()
37 if (adap == dev->cec_tx_adap[i]) in find_dest_adap()
39 if (!dev->cec_tx_adap[i]->is_configured) in find_dest_adap()
41 if (cec_has_log_addr(dev->cec_tx_adap[i], dest)) in find_dest_adap()
47 static bool xfer_ready(struct vivid_dev *dev) in xfer_ready() argument
52 spin_lock(&dev->cec_xfers_slock); in xfer_ready()
53 for (i = 0; i < ARRAY_SIZE(dev->xfers); i++) { in xfer_ready()
54 if (dev->xfers[i].sft && in xfer_ready()
55 dev->xfers[i].sft <= dev->cec_sft) { in xfer_ready()
60 spin_unlock(&dev->cec_xfers_slock); in xfer_ready()
72 static void adjust_sfts(struct vivid_dev *dev) in adjust_sfts() argument
77 for (i = 0; i < ARRAY_SIZE(dev->xfers); i++) { in adjust_sfts()
78 if (dev->xfers[i].sft <= CEC_SIGNAL_FREE_TIME_RETRY) in adjust_sfts()
80 initiator = dev->xfers[i].msg[0] >> 4; in adjust_sfts()
81 if (initiator == dev->last_initiator) in adjust_sfts()
82 dev->xfers[i].sft = CEC_SIGNAL_FREE_TIME_NEXT_XFER; in adjust_sfts()
84 dev->xfers[i].sft = CEC_SIGNAL_FREE_TIME_NEW_INITIATOR; in adjust_sfts()
103 struct vivid_dev *dev = _dev; in vivid_cec_bus_thread() local
105 dev->cec_sft = CEC_SIGNAL_FREE_TIME_NEXT_XFER; in vivid_cec_bus_thread()
116 wait_event_interruptible(dev->kthread_waitq_cec, xfer_ready(dev) || in vivid_cec_bus_thread()
120 last_sft = dev->cec_sft; in vivid_cec_bus_thread()
121 dev->cec_sft = 0; in vivid_cec_bus_thread()
127 spin_lock(&dev->cec_xfers_slock); in vivid_cec_bus_thread()
128 for (i = 0; i < ARRAY_SIZE(dev->xfers); i++) { in vivid_cec_bus_thread()
129 if (!dev->xfers[i].sft || dev->xfers[i].sft > last_sft) in vivid_cec_bus_thread()
134 xfers_on_bus[first_idx].adap = dev->xfers[i].adap; in vivid_cec_bus_thread()
135 memcpy(first_msg.msg, dev->xfers[i].msg, dev->xfers[i].len); in vivid_cec_bus_thread()
136 first_msg.len = dev->xfers[i].len; in vivid_cec_bus_thread()
138 xfers_on_bus[i].adap = dev->xfers[i].adap; in vivid_cec_bus_thread()
147 dev->xfers[i].sft = 0; in vivid_cec_bus_thread()
149 dev->last_initiator = cec_msg_initiator(&first_msg); in vivid_cec_bus_thread()
150 adjust_sfts(dev); in vivid_cec_bus_thread()
151 spin_unlock(&dev->cec_xfers_slock); in vivid_cec_bus_thread()
156 valid_dest = find_dest_adap(dev, xfers_on_bus[first_idx].adap, dest); in vivid_cec_bus_thread()
194 if (xfers_on_bus[first_idx].adap != dev->cec_rx_adap) in vivid_cec_bus_thread()
195 cec_received_msg(dev->cec_rx_adap, &first_msg); in vivid_cec_bus_thread()
196 for (i = 0; i < MAX_OUTPUTS && dev->cec_tx_adap[i]; i++) in vivid_cec_bus_thread()
197 if (xfers_on_bus[first_idx].adap != dev->cec_tx_adap[i]) in vivid_cec_bus_thread()
198 cec_received_msg(dev->cec_tx_adap[i], &first_msg); in vivid_cec_bus_thread()
211 dev->cec_sft = CEC_SIGNAL_FREE_TIME_RETRY; in vivid_cec_bus_thread()
219 while (dev->cec_sft >= CEC_SIGNAL_FREE_TIME_RETRY && in vivid_cec_bus_thread()
220 dev->cec_sft < CEC_SIGNAL_FREE_TIME_NEXT_XFER && in vivid_cec_bus_thread()
221 !xfer_ready(dev) && !kthread_should_stop()) { in vivid_cec_bus_thread()
224 dev->cec_sft += 2; in vivid_cec_bus_thread()
244 struct vivid_dev *dev = cec_get_drvdata(adap); in vivid_cec_adap_transmit() local
247 spin_lock(&dev->cec_xfers_slock); in vivid_cec_adap_transmit()
248 dev->xfers[idx].adap = adap; in vivid_cec_adap_transmit()
249 memcpy(dev->xfers[idx].msg, msg->msg, CEC_MAX_MSG_SIZE); in vivid_cec_adap_transmit()
250 dev->xfers[idx].len = msg->len; in vivid_cec_adap_transmit()
251 dev->xfers[idx].sft = CEC_SIGNAL_FREE_TIME_RETRY; in vivid_cec_adap_transmit()
253 if (idx == dev->last_initiator) in vivid_cec_adap_transmit()
254 dev->xfers[idx].sft = CEC_SIGNAL_FREE_TIME_NEXT_XFER; in vivid_cec_adap_transmit()
256 dev->xfers[idx].sft = CEC_SIGNAL_FREE_TIME_NEW_INITIATOR; in vivid_cec_adap_transmit()
258 spin_unlock(&dev->cec_xfers_slock); in vivid_cec_adap_transmit()
259 wake_up_interruptible(&dev->kthread_waitq_cec); in vivid_cec_adap_transmit()
266 struct vivid_dev *dev = cec_get_drvdata(adap); in vivid_received() local
283 strscpy(dev->osd, osd, sizeof(dev->osd)); in vivid_received()
284 dev->osd_jiffies = jiffies; in vivid_received()
287 strscpy(dev->osd, osd, sizeof(dev->osd)); in vivid_received()
288 dev->osd_jiffies = 0; in vivid_received()
291 dev->osd[0] = 0; in vivid_received()
292 dev->osd_jiffies = 0; in vivid_received()
314 struct cec_adapter *vivid_cec_alloc_adap(struct vivid_dev *dev, in vivid_cec_alloc_adap() argument
322 dev->inst, is_source ? "out" : "cap", idx); in vivid_cec_alloc_adap()
323 return cec_allocate_adapter(&vivid_cec_adap_ops, dev, in vivid_cec_alloc_adap()