Lines Matching refs:ibi
2049 if (olddev->ibi) { in i3c_master_add_i3c_dev_locked()
2050 ibireq.handler = olddev->ibi->handler; in i3c_master_add_i3c_dev_locked()
2051 ibireq.max_payload_len = olddev->ibi->max_payload_len; in i3c_master_add_i3c_dev_locked()
2052 ibireq.num_slots = olddev->ibi->num_slots; in i3c_master_add_i3c_dev_locked()
2054 if (olddev->ibi->enabled) { in i3c_master_add_i3c_dev_locked()
2512 atomic_inc(&dev->ibi->pending_ibis); in i3c_master_queue_ibi()
2513 queue_work(dev->ibi->wq, &slot->work); in i3c_master_queue_ibi()
2529 dev->ibi->handler(dev->dev, &payload); in i3c_master_handle_ibi()
2532 if (atomic_dec_and_test(&dev->ibi->pending_ibis)) in i3c_master_handle_ibi()
2533 complete(&dev->ibi->all_ibis_handled); in i3c_master_handle_ibi()
2918 if (!dev->ibi) in i3c_dev_disable_ibi_locked()
2926 reinit_completion(&dev->ibi->all_ibis_handled); in i3c_dev_disable_ibi_locked()
2927 if (atomic_read(&dev->ibi->pending_ibis)) in i3c_dev_disable_ibi_locked()
2928 wait_for_completion(&dev->ibi->all_ibis_handled); in i3c_dev_disable_ibi_locked()
2930 dev->ibi->enabled = false; in i3c_dev_disable_ibi_locked()
2940 if (!dev->ibi) in i3c_dev_enable_ibi_locked()
2945 dev->ibi->enabled = true; in i3c_dev_enable_ibi_locked()
2954 struct i3c_device_ibi_info *ibi; in i3c_dev_request_ibi_locked() local
2960 if (dev->ibi) in i3c_dev_request_ibi_locked()
2963 ibi = kzalloc(sizeof(*ibi), GFP_KERNEL); in i3c_dev_request_ibi_locked()
2964 if (!ibi) in i3c_dev_request_ibi_locked()
2967 ibi->wq = alloc_ordered_workqueue(dev_name(i3cdev_to_dev(dev->dev)), WQ_MEM_RECLAIM); in i3c_dev_request_ibi_locked()
2968 if (!ibi->wq) { in i3c_dev_request_ibi_locked()
2969 kfree(ibi); in i3c_dev_request_ibi_locked()
2973 atomic_set(&ibi->pending_ibis, 0); in i3c_dev_request_ibi_locked()
2974 init_completion(&ibi->all_ibis_handled); in i3c_dev_request_ibi_locked()
2975 ibi->handler = req->handler; in i3c_dev_request_ibi_locked()
2976 ibi->max_payload_len = req->max_payload_len; in i3c_dev_request_ibi_locked()
2977 ibi->num_slots = req->num_slots; in i3c_dev_request_ibi_locked()
2979 dev->ibi = ibi; in i3c_dev_request_ibi_locked()
2982 kfree(ibi); in i3c_dev_request_ibi_locked()
2983 dev->ibi = NULL; in i3c_dev_request_ibi_locked()
2993 if (!dev->ibi) in i3c_dev_free_ibi_locked()
2996 if (WARN_ON(dev->ibi->enabled)) in i3c_dev_free_ibi_locked()
3001 if (dev->ibi->wq) { in i3c_dev_free_ibi_locked()
3002 destroy_workqueue(dev->ibi->wq); in i3c_dev_free_ibi_locked()
3003 dev->ibi->wq = NULL; in i3c_dev_free_ibi_locked()
3006 kfree(dev->ibi); in i3c_dev_free_ibi_locked()
3007 dev->ibi = NULL; in i3c_dev_free_ibi_locked()