int request_dma_bycap()

in drivers/dma/dma-api.c [128:161]


int request_dma_bycap(const char **dmac, const char **caps, const char *dev_id)
{
	unsigned int found = 0;
	struct dma_info *info;
	const char **p;
	int i;

	BUG_ON(!dmac || !caps);

	list_for_each_entry(info, &registered_dmac_list, list)
		if (strcmp(*dmac, info->name) == 0) {
			found = 1;
			break;
		}

	if (!found)
		return -ENODEV;

	for (i = 0; i < info->nr_channels; i++) {
		struct dma_channel *channel = &info->channels[i];

		if (unlikely(!channel->caps))
			continue;

		for (p = caps; *p; p++) {
			if (!search_cap(channel->caps, *p))
				break;
			if (request_dma(channel->chan, dev_id) == 0)
				return channel->chan;
		}
	}

	return -EINVAL;
}