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

Commit 2b4d9d2b authored by Russell King's avatar Russell King
Browse files

MFD: ucb1x00-core: disable mcp clock when bus is not required



The ucb1x00-core was leaving the mcp clock enabled indefinitely after
probe.  This needlessly wastes power.  Add the necessary disables to
ensure that the clock remains off when we don't need it.

Acked-by: default avatarJochen Friedrich <jochen@scram.de>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent ed442b67
Loading
Loading
Loading
Loading
+5 −4
Original line number Original line Diff line number Diff line
@@ -554,16 +554,17 @@ static int ucb1x00_probe(struct mcp *mcp)


	mcp_enable(mcp);
	mcp_enable(mcp);
	id = mcp_reg_read(mcp, UCB_ID);
	id = mcp_reg_read(mcp, UCB_ID);
	mcp_disable(mcp);


	if (id != UCB_ID_1200 && id != UCB_ID_1300 && id != UCB_ID_TC35143) {
	if (id != UCB_ID_1200 && id != UCB_ID_1300 && id != UCB_ID_TC35143) {
		printk(KERN_WARNING "UCB1x00 ID not found: %04x\n", id);
		printk(KERN_WARNING "UCB1x00 ID not found: %04x\n", id);
		goto err_disable;
		goto out;
	}
	}


	ucb = kzalloc(sizeof(struct ucb1x00), GFP_KERNEL);
	ucb = kzalloc(sizeof(struct ucb1x00), GFP_KERNEL);
	ret = -ENOMEM;
	ret = -ENOMEM;
	if (!ucb)
	if (!ucb)
		goto err_disable;
		goto out;


	device_initialize(&ucb->dev);
	device_initialize(&ucb->dev);
	ucb->dev.class = &ucb1x00_class;
	ucb->dev.class = &ucb1x00_class;
@@ -581,7 +582,9 @@ static int ucb1x00_probe(struct mcp *mcp)
	if (ret)
	if (ret)
		goto err_dev_add;
		goto err_dev_add;


	ucb1x00_enable(ucb);
	ucb->irq = ucb1x00_detect_irq(ucb);
	ucb->irq = ucb1x00_detect_irq(ucb);
	ucb1x00_disable(ucb);
	if (ucb->irq == NO_IRQ) {
	if (ucb->irq == NO_IRQ) {
		dev_err(&ucb->dev, "IRQ probe failed\n");
		dev_err(&ucb->dev, "IRQ probe failed\n");
		ret = -ENODEV;
		ret = -ENODEV;
@@ -633,8 +636,6 @@ static int ucb1x00_probe(struct mcp *mcp)
	device_del(&ucb->dev);
	device_del(&ucb->dev);
 err_dev_add:
 err_dev_add:
	put_device(&ucb->dev);
	put_device(&ucb->dev);
 err_disable:
	mcp_disable(mcp);
 out:
 out:
	if (pdata && pdata->reset)
	if (pdata && pdata->reset)
		pdata->reset(UCB_RST_PROBE_FAIL);
		pdata->reset(UCB_RST_PROBE_FAIL);