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

Commit 2d4b4520 authored by Sebastien Guiriec's avatar Sebastien Guiriec Committed by Wolfram Sang
Browse files

i2c: omap: adopt pinctrl support



Some GPIO expanders need some early pin control muxing. Due to
legacy boards sometimes the driver uses subsys_initcall instead of
module_init. This patch takes advantage of defer probe feature
and pin control in order to wait until pin control probing before
GPIO driver probing. It has been tested on OMAP5 board with TCA6424
driver.

Signed-off-by: default avatarSebastien Guiriec <s-guiriec@ti.com>
Acked-by: default avatarShubhrajyoti D <shubhrajyoti@ti.com>
Reviewed-by: default avatarFelipe Balbi <balbi@ti.com>
Signed-off-by: default avatarWolfram Sang <w.sang@pengutronix.de>
parent d60ece5f
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@
#include <linux/slab.h>
#include <linux/i2c-omap.h>
#include <linux/pm_runtime.h>
#include <linux/pinctrl/consumer.h>

/* I2C controller revisions */
#define OMAP_I2C_OMAP1_REV_2		0x20
@@ -213,6 +214,8 @@ struct omap_i2c_dev {
	u16			syscstate;
	u16			westate;
	u16			errata;

	struct pinctrl		*pins;
};

static const u8 reg_map_ip_v1[] = {
@@ -1104,6 +1107,16 @@ omap_i2c_probe(struct platform_device *pdev)
		dev->dtrev = pdata->rev;
	}

	dev->pins = devm_pinctrl_get_select_default(&pdev->dev);
	if (IS_ERR(dev->pins)) {
		if (PTR_ERR(dev->pins) == -EPROBE_DEFER)
			return -EPROBE_DEFER;

		dev_warn(&pdev->dev, "did not get pins for i2c error: %li\n",
			 PTR_ERR(dev->pins));
		dev->pins = NULL;
	}

	dev->dev = &pdev->dev;
	dev->irq = irq;