Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0dd005d authored by Russell King's avatar Russell King Committed by Russell King
Browse files

[ARM] pxa: fix clock lookup to find specific device clocks



Ensure that the clock lookup always finds an entry for a specific
device and ID before it falls back to finding just by ID.  This
fixes a problem reported by Holger Schurig where the BTUART was
assigned the wrong clock.

Tested-by: default avatarHolger Schurig <hs4233@mail.mn-solutions.de>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 1309d4e6
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -23,18 +23,27 @@ static LIST_HEAD(clocks);
static DEFINE_MUTEX(clocks_mutex);
static DEFINE_SPINLOCK(clocks_lock);

static struct clk *clk_lookup(struct device *dev, const char *id)
{
	struct clk *p;

	list_for_each_entry(p, &clocks, node)
		if (strcmp(id, p->name) == 0 && p->dev == dev)
			return p;

	return NULL;
}

struct clk *clk_get(struct device *dev, const char *id)
{
	struct clk *p, *clk = ERR_PTR(-ENOENT);

	mutex_lock(&clocks_mutex);
	list_for_each_entry(p, &clocks, node) {
		if (strcmp(id, p->name) == 0 &&
		    (p->dev == NULL || p->dev == dev)) {
	p = clk_lookup(dev, id);
	if (!p)
		p = clk_lookup(NULL, id);
	if (p)
		clk = p;
			break;
		}
	}
	mutex_unlock(&clocks_mutex);

	return clk;