Lines Matching refs:adap

169 static void cec_devnode_unregister(struct cec_adapter *adap)
171 struct cec_devnode *devnode = &adap->devnode;
191 mutex_lock(&adap->lock);
192 __cec_s_phys_addr(adap, CEC_PHYS_ADDR_INVALID, false);
193 __cec_s_log_addrs(adap, NULL, false);
194 // Disable the adapter (since adap->devnode.unregistered is true)
195 cec_adap_enable(adap);
196 mutex_unlock(&adap->lock);
207 struct cec_adapter *adap = sf->private;
221 if (!call_op(adap, error_inj_parse_line, line)) {
232 struct cec_adapter *adap = sf->private;
234 return call_op(adap, error_inj_show, sf);
255 struct cec_adapter *adap;
268 adap = kzalloc(sizeof(*adap), GFP_KERNEL);
269 if (!adap)
271 strscpy(adap->name, name, sizeof(adap->name));
272 adap->phys_addr = CEC_PHYS_ADDR_INVALID;
273 adap->cec_pin_is_high = true;
274 adap->log_addrs.cec_version = CEC_OP_CEC_VERSION_2_0;
275 adap->log_addrs.vendor_id = CEC_VENDOR_ID_NONE;
276 adap->capabilities = caps;
278 adap->capabilities |= CEC_CAP_PHYS_ADDR;
279 adap->needs_hpd = caps & CEC_CAP_NEEDS_HPD;
280 adap->available_log_addrs = available_las;
281 adap->sequence = 0;
282 adap->ops = ops;
283 adap->priv = priv;
284 mutex_init(&adap->lock);
285 INIT_LIST_HEAD(&adap->transmit_queue);
286 INIT_LIST_HEAD(&adap->wait_queue);
287 init_waitqueue_head(&adap->kthread_waitq);
289 /* adap->devnode initialization */
290 INIT_LIST_HEAD(&adap->devnode.fhs);
291 mutex_init(&adap->devnode.lock_fhs);
292 mutex_init(&adap->devnode.lock);
294 adap->kthread = kthread_run(cec_thread_func, adap, "cec-%s", name);
295 if (IS_ERR(adap->kthread)) {
297 res = PTR_ERR(adap->kthread);
298 kfree(adap);
304 return adap;
307 adap->rc = rc_allocate_device(RC_DRIVER_SCANCODE);
308 if (!adap->rc) {
311 kthread_stop(adap->kthread);
312 kfree(adap);
316 snprintf(adap->input_phys, sizeof(adap->input_phys),
317 "%s/input0", adap->name);
319 adap->rc->device_name = adap->name;
320 adap->rc->input_phys = adap->input_phys;
321 adap->rc->input_id.bustype = BUS_CEC;
322 adap->rc->input_id.vendor = 0;
323 adap->rc->input_id.product = 0;
324 adap->rc->input_id.version = 1;
325 adap->rc->driver_name = CEC_NAME;
326 adap->rc->allowed_protocols = RC_PROTO_BIT_CEC;
327 adap->rc->priv = adap;
328 adap->rc->map_name = RC_MAP_CEC;
329 adap->rc->timeout = MS_TO_US(550);
331 return adap;
335 int cec_register_adapter(struct cec_adapter *adap,
340 if (IS_ERR_OR_NULL(adap))
346 adap->owner = parent->driver->owner;
347 adap->devnode.dev.parent = parent;
348 if (!adap->xfer_timeout_ms)
349 adap->xfer_timeout_ms = CEC_XFER_TIMEOUT_MS;
352 if (adap->capabilities & CEC_CAP_RC) {
353 adap->rc->dev.parent = parent;
354 res = rc_register_device(adap->rc);
358 adap->name);
359 rc_free_device(adap->rc);
360 adap->rc = NULL;
366 res = cec_devnode_register(&adap->devnode, adap->owner);
370 rc_unregister_device(adap->rc);
371 adap->rc = NULL;
376 dev_set_drvdata(&adap->devnode.dev, adap);
381 adap->cec_dir = debugfs_create_dir(dev_name(&adap->devnode.dev),
384 debugfs_create_devm_seqfile(&adap->devnode.dev, "status", adap->cec_dir,
387 if (!adap->ops->error_inj_show || !adap->ops->error_inj_parse_line)
389 debugfs_create_file("error-inj", 0644, adap->cec_dir, adap,
396 void cec_unregister_adapter(struct cec_adapter *adap)
398 if (IS_ERR_OR_NULL(adap))
403 rc_unregister_device(adap->rc);
404 adap->rc = NULL;
406 debugfs_remove_recursive(adap->cec_dir);
408 cec_notifier_cec_adap_unregister(adap->notifier, adap);
410 cec_devnode_unregister(adap);
414 void cec_delete_adapter(struct cec_adapter *adap)
416 if (IS_ERR_OR_NULL(adap))
418 if (adap->kthread_config)
419 kthread_stop(adap->kthread_config);
420 kthread_stop(adap->kthread);
421 if (adap->ops->adap_free)
422 adap->ops->adap_free(adap);
424 rc_free_device(adap->rc);
426 kfree(adap);