Commit 3149a9cf authored by Claudiu Beznea's avatar Claudiu Beznea Committed by Andi Shyti
Browse files

i2c: riic: Use pm_runtime_resume_and_get()



pm_runtime_get_sync() may return with error. In case it returns with error
dev->power.usage_count needs to be decremented. pm_runtime_resume_and_get()
takes care of this. Thus use it.

Reviewed-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: default avatarClaudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: default avatarAndi Shyti <andi.shyti@kernel.org>
parent a1ecb041
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -133,10 +133,12 @@ static int riic_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
	struct riic_dev *riic = i2c_get_adapdata(adap);
	struct device *dev = adap->dev.parent;
	unsigned long time_left;
	int i;
	int i, ret;
	u8 start_bit;

	pm_runtime_get_sync(dev);
	ret = pm_runtime_resume_and_get(dev);
	if (ret)
		return ret;

	if (riic_readb(riic, RIIC_ICCR2) & ICCR2_BBSY) {
		riic->err = -EBUSY;
@@ -301,6 +303,7 @@ static const struct i2c_algorithm riic_algo = {

static int riic_init_hw(struct riic_dev *riic, struct i2c_timings *t)
{
	int ret;
	unsigned long rate;
	int total_ticks, cks, brl, brh;
	struct device *dev = riic->adapter.dev.parent;
@@ -379,7 +382,9 @@ static int riic_init_hw(struct riic_dev *riic, struct i2c_timings *t)
		 t->scl_fall_ns / (1000000000 / rate),
		 t->scl_rise_ns / (1000000000 / rate), cks, brl, brh);

	pm_runtime_get_sync(dev);
	ret = pm_runtime_resume_and_get(dev);
	if (ret)
		return ret;

	/* Changing the order of accessing IICRST and ICE may break things! */
	riic_writeb(riic, ICCR1_IICRST | ICCR1_SOWP, RIIC_ICCR1);
@@ -498,10 +503,13 @@ static void riic_i2c_remove(struct platform_device *pdev)
{
	struct riic_dev *riic = platform_get_drvdata(pdev);
	struct device *dev = &pdev->dev;
	int ret;

	pm_runtime_get_sync(dev);
	ret = pm_runtime_resume_and_get(dev);
	if (!ret) {
		riic_writeb(riic, 0, RIIC_ICIER);
		pm_runtime_put(dev);
	}
	i2c_del_adapter(&riic->adapter);
	pm_runtime_disable(dev);
}