Lines Matching refs:srv
44 #define MPP_REGISTER_DRIVER(srv, flag, X, x) {\ argument
46 mpp_add_driver(srv, MPP_DRIVER_##X, &rockchip_##x##_driver, "grf_"#x);\
91 static int mpp_add_driver(struct mpp_service *srv, in mpp_add_driver() argument
98 mpp_init_grf(srv->dev->of_node, in mpp_add_driver()
99 &srv->grf_infos[type], in mpp_add_driver()
109 srv->sub_drivers[type] = driver; in mpp_add_driver()
114 static int mpp_remove_driver(struct mpp_service *srv, int i) in mpp_remove_driver() argument
116 if (srv && srv->sub_drivers[i]) { in mpp_remove_driver()
118 mpp_set_grf(&srv->grf_infos[i]); in mpp_remove_driver()
119 platform_driver_unregister(srv->sub_drivers[i]); in mpp_remove_driver()
121 av1dec_driver_unregister(srv->sub_drivers[i]); in mpp_remove_driver()
123 srv->sub_drivers[i] = NULL; in mpp_remove_driver()
129 static int mpp_register_service(struct mpp_service *srv, in mpp_register_service() argument
133 struct device *dev = srv->dev; in mpp_register_service()
136 ret = alloc_chrdev_region(&srv->dev_id, 0, 1, service_name); in mpp_register_service()
142 cdev_init(&srv->mpp_cdev, &rockchip_mpp_fops); in mpp_register_service()
143 srv->mpp_cdev.owner = THIS_MODULE; in mpp_register_service()
144 srv->mpp_cdev.ops = &rockchip_mpp_fops; in mpp_register_service()
146 ret = cdev_add(&srv->mpp_cdev, srv->dev_id, 1); in mpp_register_service()
148 unregister_chrdev_region(srv->dev_id, 1); in mpp_register_service()
153 srv->child_dev = device_create(srv->cls, dev, srv->dev_id, in mpp_register_service()
159 static int mpp_remove_service(struct mpp_service *srv) in mpp_remove_service() argument
161 device_destroy(srv->cls, srv->dev_id); in mpp_remove_service()
162 cdev_del(&srv->mpp_cdev); in mpp_remove_service()
163 unregister_chrdev_region(srv->dev_id, 1); in mpp_remove_service()
169 static int mpp_procfs_remove(struct mpp_service *srv) in mpp_procfs_remove() argument
171 if (srv->procfs) { in mpp_procfs_remove()
172 proc_remove(srv->procfs); in mpp_procfs_remove()
173 srv->procfs = NULL; in mpp_procfs_remove()
238 struct mpp_service *srv = seq->private; in mpp_show_session_summary() local
240 mutex_lock(&srv->session_lock); in mpp_show_session_summary()
242 &srv->session_list, in mpp_show_session_summary()
258 mutex_unlock(&srv->session_lock); in mpp_show_session_summary()
295 struct mpp_service *srv = file->private; in mpp_show_support_device() local
302 if (test_bit(i, &srv->hw_support)) { in mpp_show_support_device()
303 mpp = srv->sub_devices[array_index_nospec(i, MPP_DEVICE_BUTT)]; in mpp_show_support_device()
318 static int mpp_procfs_init(struct mpp_service *srv) in mpp_procfs_init() argument
320 srv->procfs = proc_mkdir(MPP_SERVICE_NAME, NULL); in mpp_procfs_init()
321 if (IS_ERR_OR_NULL(srv->procfs)) { in mpp_procfs_init()
323 srv->procfs = NULL; in mpp_procfs_init()
327 proc_create_single("version", 0444, srv->procfs, mpp_show_version); in mpp_procfs_init()
330 srv->procfs, mpp_show_session_summary, srv); in mpp_procfs_init()
332 proc_create_single("supports-cmd", 0444, srv->procfs, mpp_show_support_cmd); in mpp_procfs_init()
335 srv->procfs, mpp_show_support_device, srv); in mpp_procfs_init()
336 mpp_procfs_create_u32("timing_en", 0644, srv->procfs, &srv->timing_en); in mpp_procfs_init()
341 static inline int mpp_procfs_remove(struct mpp_service *srv) in mpp_procfs_remove() argument
346 static inline int mpp_procfs_init(struct mpp_service *srv) in mpp_procfs_init() argument
355 struct mpp_service *srv = NULL; in mpp_service_probe() local
362 srv = devm_kzalloc(dev, sizeof(*srv), GFP_KERNEL); in mpp_service_probe()
363 if (!srv) in mpp_service_probe()
366 srv->dev = dev; in mpp_service_probe()
367 atomic_set(&srv->shutdown_request, 0); in mpp_service_probe()
368 platform_set_drvdata(pdev, srv); in mpp_service_probe()
370 srv->cls = class_create(THIS_MODULE, MPP_CLASS_NAME); in mpp_service_probe()
371 if (PTR_ERR_OR_ZERO(srv->cls)) in mpp_service_probe()
372 return PTR_ERR(srv->cls); in mpp_service_probe()
375 &srv->taskqueue_cnt); in mpp_service_probe()
376 if (srv->taskqueue_cnt > MPP_DEVICE_BUTT) { in mpp_service_probe()
378 srv->taskqueue_cnt, MPP_DEVICE_BUTT); in mpp_service_probe()
382 for (i = 0; i < srv->taskqueue_cnt; i++) { in mpp_service_probe()
390 srv->task_queues[i] = queue; in mpp_service_probe()
394 &srv->reset_group_cnt); in mpp_service_probe()
395 if (srv->reset_group_cnt > MPP_DEVICE_BUTT) { in mpp_service_probe()
397 srv->reset_group_cnt, MPP_DEVICE_BUTT); in mpp_service_probe()
401 if (srv->reset_group_cnt) { in mpp_service_probe()
405 for (i = 0; i < srv->reset_group_cnt; i++) { in mpp_service_probe()
411 srv->reset_groups[i] = group; in mpp_service_probe()
415 ret = mpp_register_service(srv, MPP_SERVICE_NAME); in mpp_service_probe()
420 mutex_init(&srv->session_lock); in mpp_service_probe()
421 INIT_LIST_HEAD(&srv->session_list); in mpp_service_probe()
422 mpp_procfs_init(srv); in mpp_service_probe()
425 MPP_REGISTER_DRIVER(srv, HAS_RKVDEC, RKVDEC, rkvdec); in mpp_service_probe()
426 MPP_REGISTER_DRIVER(srv, HAS_RKVENC, RKVENC, rkvenc); in mpp_service_probe()
427 MPP_REGISTER_DRIVER(srv, HAS_VDPU1, VDPU1, vdpu1); in mpp_service_probe()
428 MPP_REGISTER_DRIVER(srv, HAS_VEPU1, VEPU1, vepu1); in mpp_service_probe()
429 MPP_REGISTER_DRIVER(srv, HAS_VDPU2, VDPU2, vdpu2); in mpp_service_probe()
430 MPP_REGISTER_DRIVER(srv, HAS_VEPU2, VEPU2, vepu2); in mpp_service_probe()
431 MPP_REGISTER_DRIVER(srv, HAS_VEPU22, VEPU22, vepu22); in mpp_service_probe()
432 MPP_REGISTER_DRIVER(srv, HAS_IEP2, IEP2, iep2); in mpp_service_probe()
433 MPP_REGISTER_DRIVER(srv, HAS_JPGDEC, JPGDEC, jpgdec); in mpp_service_probe()
434 MPP_REGISTER_DRIVER(srv, HAS_RKVDEC2, RKVDEC2, rkvdec2); in mpp_service_probe()
435 MPP_REGISTER_DRIVER(srv, HAS_RKVENC2, RKVENC2, rkvenc2); in mpp_service_probe()
436 MPP_REGISTER_DRIVER(srv, HAS_AV1DEC, AV1DEC, av1dec); in mpp_service_probe()
437 MPP_REGISTER_DRIVER(srv, HAS_VDPP, VDPP, vdpp); in mpp_service_probe()
444 class_destroy(srv->cls); in mpp_service_probe()
453 struct mpp_service *srv = platform_get_drvdata(pdev); in mpp_service_remove() local
458 for (i = 0; i < srv->taskqueue_cnt; i++) { in mpp_service_remove()
459 queue = srv->task_queues[i]; in mpp_service_remove()
469 mpp_remove_driver(srv, i); in mpp_service_remove()
471 mpp_remove_service(srv); in mpp_service_remove()
472 class_destroy(srv->cls); in mpp_service_remove()
473 mpp_procfs_remove(srv); in mpp_service_remove()