Skip to content

Commit

Permalink
i2c: omap: adopt pinctrl support
Browse files Browse the repository at this point in the history
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: Sebastien Guiriec <s-guiriec@ti.com>
Acked-by: Shubhrajyoti D <shubhrajyoti@ti.com>
Reviewed-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
  • Loading branch information
Sebastien Guiriec authored and Wolfram Sang committed Nov 14, 2012
1 parent d60ece5 commit 2d4b452
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions drivers/i2c/busses/i2c-omap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -213,6 +214,8 @@ struct omap_i2c_dev {
u16 syscstate;
u16 westate;
u16 errata;

struct pinctrl *pins;
};

static const u8 reg_map_ip_v1[] = {
Expand Down Expand Up @@ -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;

Expand Down

0 comments on commit 2d4b452

Please sign in to comment.