Commit 7a4e63cb authored by Wolfram Sang's avatar Wolfram Sang
Browse files

Revert "i2c: core: support bus regulator controlling in adapter"



This reverts commit 6fe12cdb. Testing in
linux-next showed it needs some more time.

Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
parent 3f35064a
Loading
Loading
Loading
Loading
+0 −84
Original line number Diff line number Diff line
@@ -313,14 +313,12 @@ static int i2c_smbus_host_notify_to_irq(const struct i2c_client *client)
static int i2c_device_probe(struct device *dev)
{
	struct i2c_client	*client = i2c_verify_client(dev);
	struct i2c_adapter	*adap;
	struct i2c_driver	*driver;
	int status;

	if (!client)
		return 0;

	adap = client->adapter;
	driver = to_i2c_driver(dev->driver);

	client->irq = client->init_irq;
@@ -386,12 +384,6 @@ static int i2c_device_probe(struct device *dev)

	dev_dbg(dev, "probe\n");

	status = regulator_enable(adap->bus_regulator);
	if (status < 0) {
		dev_err(&adap->dev, "Failed to enable power regulator\n");
		goto err_clear_wakeup_irq;
	}

	status = of_clk_set_defaults(dev->of_node, false);
	if (status < 0)
		goto err_clear_wakeup_irq;
@@ -432,14 +424,12 @@ static int i2c_device_probe(struct device *dev)
static int i2c_device_remove(struct device *dev)
{
	struct i2c_client	*client = i2c_verify_client(dev);
	struct i2c_adapter      *adap;
	struct i2c_driver	*driver;
	int status = 0;

	if (!client || !dev->driver)
		return 0;

	adap = client->adapter;
	driver = to_i2c_driver(dev->driver);
	if (driver->remove) {
		dev_dbg(dev, "remove\n");
@@ -447,8 +437,6 @@ static int i2c_device_remove(struct device *dev)
	}

	dev_pm_domain_detach(&client->dev, true);
	if (!pm_runtime_status_suspended(&client->dev))
		regulator_disable(adap->bus_regulator);

	dev_pm_clear_wake_irq(&client->dev);
	device_init_wakeup(&client->dev, false);
@@ -460,72 +448,6 @@ static int i2c_device_remove(struct device *dev)
	return status;
}

#ifdef CONFIG_PM_SLEEP
static int i2c_resume_early(struct device *dev)
{
	struct i2c_client *client = i2c_verify_client(dev);
	struct i2c_adapter *adap = client->adapter;
	int err;

	if (!pm_runtime_status_suspended(&client->dev)) {
		err = regulator_enable(adap->bus_regulator);
		if (err)
			return err;
	}

	return pm_generic_resume_early(&client->dev);
}

static int i2c_suspend_late(struct device *dev)
{
	struct i2c_client *client = i2c_verify_client(dev);
	struct i2c_adapter *adap = client->adapter;
	int err;

	err = pm_generic_suspend_late(&client->dev);
	if (err)
		return err;

	if (!pm_runtime_status_suspended(&client->dev))
		return regulator_disable(adap->bus_regulator);

	return 0;
}
#endif

#ifdef CONFIG_PM
static int i2c_runtime_resume(struct device *dev)
{
	struct i2c_client *client = i2c_verify_client(dev);
	struct i2c_adapter *adap = client->adapter;
	int err;

	err = regulator_enable(adap->bus_regulator);
	if (err)
		return err;

	return pm_generic_runtime_resume(&client->dev);
}

static int i2c_runtime_suspend(struct device *dev)
{
	struct i2c_client *client = i2c_verify_client(dev);
	struct i2c_adapter *adap = client->adapter;
	int err;

	err = pm_generic_runtime_suspend(&client->dev);
	if (err)
		return err;

	return regulator_disable(adap->bus_regulator);
}
#endif

static const struct dev_pm_ops i2c_device_pm = {
	SET_LATE_SYSTEM_SLEEP_PM_OPS(i2c_suspend_late, i2c_resume_early)
	SET_RUNTIME_PM_OPS(i2c_runtime_suspend, i2c_runtime_resume, NULL)
};

static void i2c_device_shutdown(struct device *dev)
{
	struct i2c_client *client = i2c_verify_client(dev);
@@ -583,7 +505,6 @@ struct bus_type i2c_bus_type = {
	.probe		= i2c_device_probe,
	.remove		= i2c_device_remove,
	.shutdown	= i2c_device_shutdown,
	.pm		= &i2c_device_pm,
};
EXPORT_SYMBOL_GPL(i2c_bus_type);

@@ -1422,11 +1343,6 @@ static int i2c_register_adapter(struct i2c_adapter *adap)
	if (res)
		goto out_reg;

	adap->bus_regulator = devm_regulator_get(&adap->dev, "bus");
	if (IS_ERR(adap->bus_regulator)) {
		res = PTR_ERR(adap->bus_regulator);
		goto out_reg;
	}
	dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);

	pm_runtime_no_callbacks(&adap->dev);
+0 −2
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@
#include <linux/device.h>	/* for struct device */
#include <linux/sched.h>	/* for completion */
#include <linux/mutex.h>
#include <linux/regulator/consumer.h>
#include <linux/rtmutex.h>
#include <linux/irqdomain.h>		/* for Host Notify IRQ */
#include <linux/of.h>		/* for struct device_node */
@@ -716,7 +715,6 @@ struct i2c_adapter {
	const struct i2c_adapter_quirks *quirks;

	struct irq_domain *host_notify_domain;
	struct regulator *bus_regulator;
};
#define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)