Lines Matching refs:adap
157 static void cec_devnode_unregister(struct cec_adapter *adap) in cec_devnode_unregister() argument
159 struct cec_devnode *devnode = &adap->devnode; in cec_devnode_unregister()
179 mutex_lock(&adap->lock); in cec_devnode_unregister()
180 __cec_s_phys_addr(adap, CEC_PHYS_ADDR_INVALID, false); in cec_devnode_unregister()
181 __cec_s_log_addrs(adap, NULL, false); in cec_devnode_unregister()
182 mutex_unlock(&adap->lock); in cec_devnode_unregister()
193 struct cec_adapter *adap = sf->private; in cec_error_inj_write() local
207 if (!adap->ops->error_inj_parse_line(adap, line)) { in cec_error_inj_write()
218 struct cec_adapter *adap = sf->private; in cec_error_inj_show() local
220 return adap->ops->error_inj_show(adap, sf); in cec_error_inj_show()
241 struct cec_adapter *adap; in cec_allocate_adapter() local
254 adap = kzalloc(sizeof(*adap), GFP_KERNEL); in cec_allocate_adapter()
255 if (!adap) in cec_allocate_adapter()
257 strscpy(adap->name, name, sizeof(adap->name)); in cec_allocate_adapter()
258 adap->phys_addr = CEC_PHYS_ADDR_INVALID; in cec_allocate_adapter()
259 adap->cec_pin_is_high = true; in cec_allocate_adapter()
260 adap->log_addrs.cec_version = CEC_OP_CEC_VERSION_2_0; in cec_allocate_adapter()
261 adap->log_addrs.vendor_id = CEC_VENDOR_ID_NONE; in cec_allocate_adapter()
262 adap->capabilities = caps; in cec_allocate_adapter()
264 adap->capabilities |= CEC_CAP_PHYS_ADDR; in cec_allocate_adapter()
265 adap->needs_hpd = caps & CEC_CAP_NEEDS_HPD; in cec_allocate_adapter()
266 adap->available_log_addrs = available_las; in cec_allocate_adapter()
267 adap->sequence = 0; in cec_allocate_adapter()
268 adap->ops = ops; in cec_allocate_adapter()
269 adap->priv = priv; in cec_allocate_adapter()
270 mutex_init(&adap->lock); in cec_allocate_adapter()
271 INIT_LIST_HEAD(&adap->transmit_queue); in cec_allocate_adapter()
272 INIT_LIST_HEAD(&adap->wait_queue); in cec_allocate_adapter()
273 init_waitqueue_head(&adap->kthread_waitq); in cec_allocate_adapter()
276 INIT_LIST_HEAD(&adap->devnode.fhs); in cec_allocate_adapter()
277 mutex_init(&adap->devnode.lock_fhs); in cec_allocate_adapter()
278 mutex_init(&adap->devnode.lock); in cec_allocate_adapter()
280 adap->kthread = kthread_run(cec_thread_func, adap, "cec-%s", name); in cec_allocate_adapter()
281 if (IS_ERR(adap->kthread)) { in cec_allocate_adapter()
283 res = PTR_ERR(adap->kthread); in cec_allocate_adapter()
284 kfree(adap); in cec_allocate_adapter()
290 return adap; in cec_allocate_adapter()
293 adap->rc = rc_allocate_device(RC_DRIVER_SCANCODE); in cec_allocate_adapter()
294 if (!adap->rc) { in cec_allocate_adapter()
297 kthread_stop(adap->kthread); in cec_allocate_adapter()
298 kfree(adap); in cec_allocate_adapter()
302 snprintf(adap->input_phys, sizeof(adap->input_phys), in cec_allocate_adapter()
303 "%s/input0", adap->name); in cec_allocate_adapter()
305 adap->rc->device_name = adap->name; in cec_allocate_adapter()
306 adap->rc->input_phys = adap->input_phys; in cec_allocate_adapter()
307 adap->rc->input_id.bustype = BUS_CEC; in cec_allocate_adapter()
308 adap->rc->input_id.vendor = 0; in cec_allocate_adapter()
309 adap->rc->input_id.product = 0; in cec_allocate_adapter()
310 adap->rc->input_id.version = 1; in cec_allocate_adapter()
311 adap->rc->driver_name = CEC_NAME; in cec_allocate_adapter()
312 adap->rc->allowed_protocols = RC_PROTO_BIT_CEC; in cec_allocate_adapter()
313 adap->rc->priv = adap; in cec_allocate_adapter()
314 adap->rc->map_name = RC_MAP_CEC; in cec_allocate_adapter()
315 adap->rc->timeout = MS_TO_US(550); in cec_allocate_adapter()
317 return adap; in cec_allocate_adapter()
321 int cec_register_adapter(struct cec_adapter *adap, in cec_register_adapter() argument
326 if (IS_ERR_OR_NULL(adap)) in cec_register_adapter()
332 adap->owner = parent->driver->owner; in cec_register_adapter()
333 adap->devnode.dev.parent = parent; in cec_register_adapter()
336 if (adap->capabilities & CEC_CAP_RC) { in cec_register_adapter()
337 adap->rc->dev.parent = parent; in cec_register_adapter()
338 res = rc_register_device(adap->rc); in cec_register_adapter()
342 adap->name); in cec_register_adapter()
343 rc_free_device(adap->rc); in cec_register_adapter()
344 adap->rc = NULL; in cec_register_adapter()
350 res = cec_devnode_register(&adap->devnode, adap->owner); in cec_register_adapter()
354 rc_unregister_device(adap->rc); in cec_register_adapter()
355 adap->rc = NULL; in cec_register_adapter()
360 dev_set_drvdata(&adap->devnode.dev, adap); in cec_register_adapter()
365 adap->cec_dir = debugfs_create_dir(dev_name(&adap->devnode.dev), in cec_register_adapter()
368 debugfs_create_devm_seqfile(&adap->devnode.dev, "status", adap->cec_dir, in cec_register_adapter()
371 if (!adap->ops->error_inj_show || !adap->ops->error_inj_parse_line) in cec_register_adapter()
373 debugfs_create_file("error-inj", 0644, adap->cec_dir, adap, in cec_register_adapter()
380 void cec_unregister_adapter(struct cec_adapter *adap) in cec_unregister_adapter() argument
382 if (IS_ERR_OR_NULL(adap)) in cec_unregister_adapter()
387 rc_unregister_device(adap->rc); in cec_unregister_adapter()
388 adap->rc = NULL; in cec_unregister_adapter()
390 debugfs_remove_recursive(adap->cec_dir); in cec_unregister_adapter()
392 cec_notifier_cec_adap_unregister(adap->notifier, adap); in cec_unregister_adapter()
394 cec_devnode_unregister(adap); in cec_unregister_adapter()
398 void cec_delete_adapter(struct cec_adapter *adap) in cec_delete_adapter() argument
400 if (IS_ERR_OR_NULL(adap)) in cec_delete_adapter()
402 if (adap->kthread_config) in cec_delete_adapter()
403 kthread_stop(adap->kthread_config); in cec_delete_adapter()
404 kthread_stop(adap->kthread); in cec_delete_adapter()
405 if (adap->ops->adap_free) in cec_delete_adapter()
406 adap->ops->adap_free(adap); in cec_delete_adapter()
408 rc_free_device(adap->rc); in cec_delete_adapter()
410 kfree(adap); in cec_delete_adapter()