/* Find the correct struct clk for the device and connection ID. We do slightly fuzzy matching here: An entry with a NULL ID is assumed to be a wildcard. If an entry has a device ID, it must match If an entry has a connection ID, it must match Then we take the most specific entry - with the following order of precidence: dev+con > dev only > con only.  */
static struct clk* clk_find(const char *dev_id, const char *con_id)
/* Find the correct struct clk for the device and connection ID. We do slightly fuzzy matching here: An entry with a NULL ID is assumed to be a wildcard. If an entry has a device ID, it must match If an entry has a connection ID, it must match Then we take the most specific entry - with the following order of precidence: dev+con > dev only > con only.  */
static struct clk* clk_find(const char *dev_id, const char *con_id)
{
	struct clk_lookup *p;
	struct clk *clk = NULL;
	int match, best = 0;
	list_for_each_entry(p, &clock_list, node) {
		match = 0;
		if (p->dev_id) {
			if (!dev_id || strcmp(p->dev_id, dev_id))
				continue;
			match += 2;
		}
		if (p->con_id) {
			if (!con_id || strcmp(p->con_id, con_id))
				continue;
			match += 1;
		}
		if (match == 0)
			continue;
		if (match > best) {
			clk = p->clk;
			best = match;
		}
	}
	return clk;
}