Lines Matching refs:feature

354 	    struct dfl_feature *feature)  in dfl_dev_add()  argument
383 ddev->feature_id = feature->id; in dfl_dev_add()
387 parent_res = &pdev->resource[feature->resource_index]; in dfl_dev_add()
400 if (feature->nr_irqs) { in dfl_dev_add()
401 ddev->irqs = kcalloc(feature->nr_irqs, in dfl_dev_add()
408 for (i = 0; i < feature->nr_irqs; i++) in dfl_dev_add()
409 ddev->irqs[i] = feature->irq_ctx[i].irq; in dfl_dev_add()
411 ddev->num_irqs = feature->nr_irqs; in dfl_dev_add()
429 struct dfl_feature *feature; in dfl_devs_remove() local
431 dfl_fpga_dev_for_each_feature(pdata, feature) { in dfl_devs_remove()
432 if (feature->ddev) { in dfl_devs_remove()
433 device_unregister(&feature->ddev->dev); in dfl_devs_remove()
434 feature->ddev = NULL; in dfl_devs_remove()
441 struct dfl_feature *feature; in dfl_devs_add() local
445 dfl_fpga_dev_for_each_feature(pdata, feature) { in dfl_devs_add()
446 if (feature->ioaddr) in dfl_devs_add()
449 if (feature->ddev) { in dfl_devs_add()
454 ddev = dfl_dev_add(pdata, feature); in dfl_devs_add()
460 feature->ddev = ddev; in dfl_devs_add()
488 #define is_header_feature(feature) ((feature)->id == FEATURE_ID_FIU_HEADER) argument
497 struct dfl_feature *feature; in dfl_fpga_dev_feature_uinit() local
501 dfl_fpga_dev_for_each_feature(pdata, feature) { in dfl_fpga_dev_feature_uinit()
502 if (feature->ops) { in dfl_fpga_dev_feature_uinit()
503 if (feature->ops->uinit) in dfl_fpga_dev_feature_uinit()
504 feature->ops->uinit(pdev, feature); in dfl_fpga_dev_feature_uinit()
505 feature->ops = NULL; in dfl_fpga_dev_feature_uinit()
513 struct dfl_feature *feature, in dfl_feature_instance_init() argument
519 if (!is_header_feature(feature)) { in dfl_feature_instance_init()
521 feature->resource_index); in dfl_feature_instance_init()
525 feature->id); in dfl_feature_instance_init()
529 feature->ioaddr = base; in dfl_feature_instance_init()
533 ret = drv->ops->init(pdev, feature); in dfl_feature_instance_init()
538 feature->ops = drv->ops; in dfl_feature_instance_init()
543 static bool dfl_feature_drv_match(struct dfl_feature *feature, in dfl_feature_drv_match() argument
550 if (ids->id == feature->id) in dfl_feature_drv_match()
573 struct dfl_feature *feature; in dfl_fpga_dev_feature_init() local
577 dfl_fpga_dev_for_each_feature(pdata, feature) { in dfl_fpga_dev_feature_init()
578 if (dfl_feature_drv_match(feature, drv)) { in dfl_fpga_dev_feature_init()
580 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()
807 if (is_header_feature(feature)) { in build_info_commit_dev()
808 feature->resource_index = -1; in build_info_commit_dev()
809 feature->ioaddr = in build_info_commit_dev()
812 if (IS_ERR(feature->ioaddr)) in build_info_commit_dev()
813 return PTR_ERR(feature->ioaddr); in build_info_commit_dev()
815 feature->resource_index = res_idx; in build_info_commit_dev()
829 feature->irq_ctx = ctx; in build_info_commit_dev()
830 feature->nr_irqs = finfo->nr_irqs; in build_info_commit_dev()
1727 static int do_set_irq_trigger(struct dfl_feature *feature, unsigned int idx, in do_set_irq_trigger() argument
1730 struct platform_device *pdev = feature->dev; in do_set_irq_trigger()
1734 irq = feature->irq_ctx[idx].irq; in do_set_irq_trigger()
1736 if (feature->irq_ctx[idx].trigger) { in do_set_irq_trigger()
1737 free_irq(irq, feature->irq_ctx[idx].trigger); in do_set_irq_trigger()
1738 kfree(feature->irq_ctx[idx].name); in do_set_irq_trigger()
1739 eventfd_ctx_put(feature->irq_ctx[idx].trigger); in do_set_irq_trigger()
1740 feature->irq_ctx[idx].trigger = NULL; in do_set_irq_trigger()
1746 feature->irq_ctx[idx].name = in do_set_irq_trigger()
1748 dev_name(&pdev->dev), feature->id); in do_set_irq_trigger()
1749 if (!feature->irq_ctx[idx].name) in do_set_irq_trigger()
1759 feature->irq_ctx[idx].name, trigger); in do_set_irq_trigger()
1761 feature->irq_ctx[idx].trigger = trigger; in do_set_irq_trigger()
1767 kfree(feature->irq_ctx[idx].name); in do_set_irq_trigger()
1787 int dfl_fpga_set_irq_triggers(struct dfl_feature *feature, unsigned int start, in dfl_fpga_set_irq_triggers() argument
1798 if (start + count > feature->nr_irqs) in dfl_fpga_set_irq_triggers()
1804 ret = do_set_irq_trigger(feature, start + i, fd); in dfl_fpga_set_irq_triggers()
1807 do_set_irq_trigger(feature, start + i, -1); in dfl_fpga_set_irq_triggers()
1825 struct dfl_feature *feature, in dfl_feature_ioctl_get_num_irqs() argument
1828 return put_user(feature->nr_irqs, (__u32 __user *)arg); in dfl_feature_ioctl_get_num_irqs()
1841 struct dfl_feature *feature, in dfl_feature_ioctl_set_irq() argument
1849 if (!feature->nr_irqs) in dfl_feature_ioctl_set_irq()
1855 if (!hdr.count || (hdr.start + hdr.count > feature->nr_irqs) || in dfl_feature_ioctl_set_irq()
1865 ret = dfl_fpga_set_irq_triggers(feature, hdr.start, hdr.count, fds); in dfl_feature_ioctl_set_irq()