Lines Matching refs:adap
151 static void cec_devnode_unregister(struct cec_adapter *adap) in cec_devnode_unregister() argument
153 struct cec_devnode *devnode = &adap->devnode; in cec_devnode_unregister()
171 mutex_lock(&adap->lock); in cec_devnode_unregister()
172 __cec_s_phys_addr(adap, CEC_PHYS_ADDR_INVALID, false); in cec_devnode_unregister()
173 __cec_s_log_addrs(adap, NULL, false); in cec_devnode_unregister()
174 mutex_unlock(&adap->lock); in cec_devnode_unregister()
181 static void cec_cec_notify(struct cec_adapter *adap, u16 pa) in cec_cec_notify() argument
183 cec_s_phys_addr(adap, pa, false); in cec_cec_notify()
186 void cec_register_cec_notifier(struct cec_adapter *adap, in cec_register_cec_notifier() argument
189 if (WARN_ON(!cec_is_registered(adap))) in cec_register_cec_notifier()
192 adap->notifier = notifier; in cec_register_cec_notifier()
193 cec_notifier_register(adap->notifier, adap, cec_cec_notify); in cec_register_cec_notifier()
203 struct cec_adapter *adap = sf->private; in cec_error_inj_write() local
217 if (!adap->ops->error_inj_parse_line(adap, line)) { in cec_error_inj_write()
228 struct cec_adapter *adap = sf->private; in cec_error_inj_show() local
230 return adap->ops->error_inj_show(adap, sf); in cec_error_inj_show()
251 struct cec_adapter *adap; in cec_allocate_adapter() local
264 adap = kzalloc(sizeof(*adap), GFP_KERNEL); in cec_allocate_adapter()
265 if (!adap) in cec_allocate_adapter()
267 strlcpy(adap->name, name, sizeof(adap->name)); in cec_allocate_adapter()
268 adap->phys_addr = CEC_PHYS_ADDR_INVALID; in cec_allocate_adapter()
269 adap->cec_pin_is_high = true; in cec_allocate_adapter()
270 adap->log_addrs.cec_version = CEC_OP_CEC_VERSION_2_0; in cec_allocate_adapter()
271 adap->log_addrs.vendor_id = CEC_VENDOR_ID_NONE; in cec_allocate_adapter()
272 adap->capabilities = caps; in cec_allocate_adapter()
273 adap->needs_hpd = caps & CEC_CAP_NEEDS_HPD; in cec_allocate_adapter()
274 adap->available_log_addrs = available_las; in cec_allocate_adapter()
275 adap->sequence = 0; in cec_allocate_adapter()
276 adap->ops = ops; in cec_allocate_adapter()
277 adap->priv = priv; in cec_allocate_adapter()
278 memset(adap->phys_addrs, 0xff, sizeof(adap->phys_addrs)); in cec_allocate_adapter()
279 mutex_init(&adap->lock); in cec_allocate_adapter()
280 INIT_LIST_HEAD(&adap->transmit_queue); in cec_allocate_adapter()
281 INIT_LIST_HEAD(&adap->wait_queue); in cec_allocate_adapter()
282 init_waitqueue_head(&adap->kthread_waitq); in cec_allocate_adapter()
285 INIT_LIST_HEAD(&adap->devnode.fhs); in cec_allocate_adapter()
286 mutex_init(&adap->devnode.lock); in cec_allocate_adapter()
288 adap->kthread = kthread_run(cec_thread_func, adap, "cec-%s", name); in cec_allocate_adapter()
289 if (IS_ERR(adap->kthread)) { in cec_allocate_adapter()
291 res = PTR_ERR(adap->kthread); in cec_allocate_adapter()
292 kfree(adap); in cec_allocate_adapter()
298 return adap; in cec_allocate_adapter()
301 adap->rc = rc_allocate_device(RC_DRIVER_SCANCODE); in cec_allocate_adapter()
302 if (!adap->rc) { in cec_allocate_adapter()
305 kthread_stop(adap->kthread); in cec_allocate_adapter()
306 kfree(adap); in cec_allocate_adapter()
310 snprintf(adap->device_name, sizeof(adap->device_name), in cec_allocate_adapter()
312 snprintf(adap->input_phys, sizeof(adap->input_phys), in cec_allocate_adapter()
315 adap->rc->device_name = adap->device_name; in cec_allocate_adapter()
316 adap->rc->input_phys = adap->input_phys; in cec_allocate_adapter()
317 adap->rc->input_id.bustype = BUS_CEC; in cec_allocate_adapter()
318 adap->rc->input_id.vendor = 0; in cec_allocate_adapter()
319 adap->rc->input_id.product = 0; in cec_allocate_adapter()
320 adap->rc->input_id.version = 1; in cec_allocate_adapter()
321 adap->rc->driver_name = CEC_NAME; in cec_allocate_adapter()
322 adap->rc->allowed_protocols = RC_PROTO_BIT_CEC; in cec_allocate_adapter()
323 adap->rc->priv = adap; in cec_allocate_adapter()
324 adap->rc->map_name = RC_MAP_CEC; in cec_allocate_adapter()
325 adap->rc->timeout = MS_TO_NS(550); in cec_allocate_adapter()
327 return adap; in cec_allocate_adapter()
331 int cec_register_adapter(struct cec_adapter *adap, in cec_register_adapter() argument
336 if (IS_ERR_OR_NULL(adap)) in cec_register_adapter()
342 adap->owner = parent->driver->owner; in cec_register_adapter()
343 adap->devnode.dev.parent = parent; in cec_register_adapter()
346 if (adap->capabilities & CEC_CAP_RC) { in cec_register_adapter()
347 adap->rc->dev.parent = parent; in cec_register_adapter()
348 res = rc_register_device(adap->rc); in cec_register_adapter()
352 adap->name); in cec_register_adapter()
353 rc_free_device(adap->rc); in cec_register_adapter()
354 adap->rc = NULL; in cec_register_adapter()
360 res = cec_devnode_register(&adap->devnode, adap->owner); in cec_register_adapter()
364 rc_unregister_device(adap->rc); in cec_register_adapter()
365 adap->rc = NULL; in cec_register_adapter()
370 dev_set_drvdata(&adap->devnode.dev, adap); in cec_register_adapter()
375 adap->cec_dir = debugfs_create_dir(dev_name(&adap->devnode.dev), top_cec_dir); in cec_register_adapter()
376 if (IS_ERR_OR_NULL(adap->cec_dir)) { in cec_register_adapter()
377 pr_warn("cec-%s: Failed to create debugfs dir\n", adap->name); in cec_register_adapter()
380 adap->status_file = debugfs_create_devm_seqfile(&adap->devnode.dev, in cec_register_adapter()
381 "status", adap->cec_dir, cec_adap_status); in cec_register_adapter()
382 if (IS_ERR_OR_NULL(adap->status_file)) { in cec_register_adapter()
383 pr_warn("cec-%s: Failed to create status file\n", adap->name); in cec_register_adapter()
384 debugfs_remove_recursive(adap->cec_dir); in cec_register_adapter()
385 adap->cec_dir = NULL; in cec_register_adapter()
388 if (!adap->ops->error_inj_show || !adap->ops->error_inj_parse_line) in cec_register_adapter()
390 adap->error_inj_file = debugfs_create_file("error-inj", 0644, in cec_register_adapter()
391 adap->cec_dir, adap, in cec_register_adapter()
393 if (IS_ERR_OR_NULL(adap->error_inj_file)) in cec_register_adapter()
395 adap->name); in cec_register_adapter()
401 void cec_unregister_adapter(struct cec_adapter *adap) in cec_unregister_adapter() argument
403 if (IS_ERR_OR_NULL(adap)) in cec_unregister_adapter()
408 rc_unregister_device(adap->rc); in cec_unregister_adapter()
409 adap->rc = NULL; in cec_unregister_adapter()
411 debugfs_remove_recursive(adap->cec_dir); in cec_unregister_adapter()
413 if (adap->notifier) in cec_unregister_adapter()
414 cec_notifier_unregister(adap->notifier); in cec_unregister_adapter()
416 cec_devnode_unregister(adap); in cec_unregister_adapter()
420 void cec_delete_adapter(struct cec_adapter *adap) in cec_delete_adapter() argument
422 if (IS_ERR_OR_NULL(adap)) in cec_delete_adapter()
424 kthread_stop(adap->kthread); in cec_delete_adapter()
425 if (adap->kthread_config) in cec_delete_adapter()
426 kthread_stop(adap->kthread_config); in cec_delete_adapter()
427 if (adap->ops->adap_free) in cec_delete_adapter()
428 adap->ops->adap_free(adap); in cec_delete_adapter()
430 rc_free_device(adap->rc); in cec_delete_adapter()
432 kfree(adap); in cec_delete_adapter()