Lines Matching refs:feature

352 	    struct dfl_feature *feature)  in dfl_dev_add()  argument
381 ddev->feature_id = feature->id; in dfl_dev_add()
382 ddev->revision = feature->revision; in dfl_dev_add()
386 parent_res = &pdev->resource[feature->resource_index]; in dfl_dev_add()
399 if (feature->nr_irqs) { in dfl_dev_add()
400 ddev->irqs = kcalloc(feature->nr_irqs, in dfl_dev_add()
407 for (i = 0; i < feature->nr_irqs; i++) in dfl_dev_add()
408 ddev->irqs[i] = feature->irq_ctx[i].irq; in dfl_dev_add()
410 ddev->num_irqs = feature->nr_irqs; in dfl_dev_add()
428 struct dfl_feature *feature; in dfl_devs_remove() local
430 dfl_fpga_dev_for_each_feature(pdata, feature) { in dfl_devs_remove()
431 if (feature->ddev) { in dfl_devs_remove()
432 device_unregister(&feature->ddev->dev); in dfl_devs_remove()
433 feature->ddev = NULL; in dfl_devs_remove()
440 struct dfl_feature *feature; in dfl_devs_add() local
444 dfl_fpga_dev_for_each_feature(pdata, feature) { in dfl_devs_add()
445 if (feature->ioaddr) in dfl_devs_add()
448 if (feature->ddev) { in dfl_devs_add()
453 ddev = dfl_dev_add(pdata, feature); in dfl_devs_add()
459 feature->ddev = ddev; in dfl_devs_add()
487 #define is_header_feature(feature) ((feature)->id == FEATURE_ID_FIU_HEADER) argument
496 struct dfl_feature *feature; in dfl_fpga_dev_feature_uinit() local
500 dfl_fpga_dev_for_each_feature(pdata, feature) { in dfl_fpga_dev_feature_uinit()
501 if (feature->ops) { in dfl_fpga_dev_feature_uinit()
502 if (feature->ops->uinit) in dfl_fpga_dev_feature_uinit()
503 feature->ops->uinit(pdev, feature); in dfl_fpga_dev_feature_uinit()
504 feature->ops = NULL; in dfl_fpga_dev_feature_uinit()
512 struct dfl_feature *feature, in dfl_feature_instance_init() argument
518 if (!is_header_feature(feature)) { in dfl_feature_instance_init()
520 feature->resource_index); in dfl_feature_instance_init()
524 feature->id); in dfl_feature_instance_init()
528 feature->ioaddr = base; in dfl_feature_instance_init()
532 ret = drv->ops->init(pdev, feature); in dfl_feature_instance_init()
537 feature->ops = drv->ops; in dfl_feature_instance_init()
542 static bool dfl_feature_drv_match(struct dfl_feature *feature, in dfl_feature_drv_match() argument
549 if (ids->id == feature->id) in dfl_feature_drv_match()
572 struct dfl_feature *feature; in dfl_fpga_dev_feature_init() local
576 dfl_fpga_dev_for_each_feature(pdata, feature) { in dfl_fpga_dev_feature_init()
577 if (dfl_feature_drv_match(feature, drv)) { in dfl_fpga_dev_feature_init()
579 feature, drv); in dfl_fpga_dev_feature_init()
792 struct dfl_feature *feature = &pdata->features[index++]; in build_info_commit_dev() local
797 feature->dev = fdev; in build_info_commit_dev()
798 feature->id = finfo->fid; in build_info_commit_dev()
799 feature->revision = finfo->revision; in build_info_commit_dev()
808 if (is_header_feature(feature)) { in build_info_commit_dev()
809 feature->resource_index = -1; in build_info_commit_dev()
810 feature->ioaddr = in build_info_commit_dev()
813 if (IS_ERR(feature->ioaddr)) in build_info_commit_dev()
814 return PTR_ERR(feature->ioaddr); in build_info_commit_dev()
816 feature->resource_index = res_idx; in build_info_commit_dev()
830 feature->irq_ctx = ctx; in build_info_commit_dev()
831 feature->nr_irqs = finfo->nr_irqs; in build_info_commit_dev()
1734 static int do_set_irq_trigger(struct dfl_feature *feature, unsigned int idx, in do_set_irq_trigger() argument
1737 struct platform_device *pdev = feature->dev; in do_set_irq_trigger()
1741 irq = feature->irq_ctx[idx].irq; in do_set_irq_trigger()
1743 if (feature->irq_ctx[idx].trigger) { in do_set_irq_trigger()
1744 free_irq(irq, feature->irq_ctx[idx].trigger); in do_set_irq_trigger()
1745 kfree(feature->irq_ctx[idx].name); in do_set_irq_trigger()
1746 eventfd_ctx_put(feature->irq_ctx[idx].trigger); in do_set_irq_trigger()
1747 feature->irq_ctx[idx].trigger = NULL; in do_set_irq_trigger()
1753 feature->irq_ctx[idx].name = in do_set_irq_trigger()
1755 dev_name(&pdev->dev), feature->id); in do_set_irq_trigger()
1756 if (!feature->irq_ctx[idx].name) in do_set_irq_trigger()
1766 feature->irq_ctx[idx].name, trigger); in do_set_irq_trigger()
1768 feature->irq_ctx[idx].trigger = trigger; in do_set_irq_trigger()
1774 kfree(feature->irq_ctx[idx].name); in do_set_irq_trigger()
1794 int dfl_fpga_set_irq_triggers(struct dfl_feature *feature, unsigned int start, in dfl_fpga_set_irq_triggers() argument
1805 if (start + count > feature->nr_irqs) in dfl_fpga_set_irq_triggers()
1811 ret = do_set_irq_trigger(feature, start + i, fd); in dfl_fpga_set_irq_triggers()
1814 do_set_irq_trigger(feature, start + i, -1); in dfl_fpga_set_irq_triggers()
1832 struct dfl_feature *feature, in dfl_feature_ioctl_get_num_irqs() argument
1835 return put_user(feature->nr_irqs, (__u32 __user *)arg); in dfl_feature_ioctl_get_num_irqs()
1848 struct dfl_feature *feature, in dfl_feature_ioctl_set_irq() argument
1856 if (!feature->nr_irqs) in dfl_feature_ioctl_set_irq()
1862 if (!hdr.count || (hdr.start + hdr.count > feature->nr_irqs) || in dfl_feature_ioctl_set_irq()
1872 ret = dfl_fpga_set_irq_triggers(feature, hdr.start, hdr.count, fds); in dfl_feature_ioctl_set_irq()