Add device tree probe for i2c-imx driver
Subsystems (6)
v3 cover Add device tree probe for i2c-imx driver
Hi Ben,
Hopefully, you can pick up this version.
Thanks.
Changes since v2:
* Drop HS-I2C from binding document fsl-imx-i2c.txt
Changes since v1:
* Fix a couple of typo in fsl-imx-i2c.txt
Shawn Guo (2):
i2c-imx: remove init/exit hooks from platform data
i2c-imx: add device tree probe support
.../devicetree/bindings/i2c/fsl-imx-i2c.txt | 18 ++++++++ arch/arm/plat-mxc/include/mach/i2c.h | 4 -- drivers/i2c/busses/i2c-imx.c | 46 +++++++++---------- 3 files changed, 40 insertions(+), 28 deletions(-)
PATCH v3 1/2 i2c-imx: remove init/exit hooks from platform data
The init/exit hooks in platform data are being used nowhere, so can be removed.
--- arch/arm/plat-mxc/include/mach/i2c.h | 4 ---- drivers/i2c/busses/i2c-imx.c | 21 +++------------------ 2 files changed, 3 insertions(+), 22 deletions(-)
arch/arm/plat-mxc/include/mach/i2c.h +0 -4
@@ -11,14 +11,10 @@/** * struct imxi2c_platform_data - structure of platform data for MXC I2C driver -* @init: Initialise gpio's and other board specific things -* @exit: Free everything initialised by @init * @bitrate: Bus speed measured in Hz * **/ struct imxi2c_platform_data { -int (*init)(struct device *dev); -void (*exit)(struct device *dev);int bitrate; };
drivers/i2c/busses/i2c-imx.c +3 -18
@@ -466,7 +466,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev) {struct imx_i2c_struct *i2c_imx;struct resource *res; -struct imxi2c_platform_data *pdata; +struct imxi2c_platform_data *pdata = pdev->dev.platform_data;void __iomem *base;resource_size_t res_size;int irq;
@@ -485,19 +485,11 @@ static int __init i2c_imx_probe(struct platform_device *pdev)return -ENOENT ; } - pdata = pdev->dev.platform_data; - -if (pdata && pdata->init) { - ret = pdata->init (&pdev->dev); -if (ret) -return ret; - } - res_size =resource_size (res);if (!request_mem_region (res->start, res_size,DRIVER_NAME )) { - ret = -EBUSY ; - goto fail0; +dev_err (&pdev->dev,"request_mem_region failed\n" ); +return -EBUSY ; } base =ioremap (res->start, res_size);
@@ -586,9 +578,6 @@ fail2:iounmap (base); fail1:release_mem_region (res->start,resource_size (res)); -fail0: -if (pdata && pdata->exit) - pdata->exit (&pdev->dev);return ret;/* Return error number */ }
@@ -611,10 +600,6 @@ static int __exit i2c_imx_remove(struct platform_device *pdev)writeb (0 , i2c_imx->base +IMX_I2C_I2CR );writeb (0 , i2c_imx->base +IMX_I2C_I2SR ); -/* Shut down hardware */ -if (pdata && pdata->exit) - pdata->exit (&pdev->dev); -clk_put (i2c_imx->clk);iounmap (i2c_imx->base);
Signature · 1 line
1.7.4.1
PATCH v3 2/2 i2c-imx: add device tree probe support
In reply to Shawn GuoIt adds device tree probe support for i2c-imx driver.
--- .../devicetree/bindings/i2c/fsl-imx-i2c.txt | 18 ++++++++++++++ drivers/i2c/busses/i2c-imx.c | 25 +++++++++++++++---- 2 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 Documentation/devicetree/bindings/i2c/fsl-imx-i2c.txt
Documentation/devicetree/bindings/i2c/fsl-imx-i2c.txt new file +18 -0
@@ -0,0 +1,18 @@ +* Freescale Inter IC (I2C) for i.MX + +Required properties: +- compatible : Should be "fsl,<chip>-i2c" +- reg : Should contain I2C registers location and length +- interrupts : Should contain I2C interrupt + +Optional properties: +- clock-frequency : Constains desired I2C bus clock frequency in Hz. + The absence of the propoerty indicates the default frequency 100 kHz. + +Examples: + +i2c at 83fc4000 { /* I2C2 on i.MX51 */ + compatible = "fsl,imx51-i2c", "fsl,imx1-i2c"; + reg = <0x83fc4000 0x4000>; + interrupts = <63>; +};
drivers/i2c/busses/i2c-imx.c +19 -6
@@ -48,6 +48,9 @@#include <linux/platform_device.h> #include <linux/clk.h> #include <linux/slab.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/of_i2c.h> #include <mach/irqs.h> #include <mach/hardware.h>
@@ -125,6 +128,11 @@ struct imx_i2c_struct {unsigned int ifdr;/* IMX_I2C_IFDR */ }; +static const struct of_device_id i2c_imx_dt_ids[] = { + { .compatible ="fsl,imx1-i2c" , }, + {/* sentinel */ } +}; +/** Functions for IMX I2C adapter driver *************************************** *******************************************************************************/
@@ -469,7 +477,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)struct imxi2c_platform_data *pdata = pdev->dev.platform_data;void __iomem *base;resource_size_t res_size; -int irq; +int irq, bitrate;int ret;dev_dbg (&pdev->dev,"<%s>\n" , __func__);
@@ -512,6 +520,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev) i2c_imx->adapter.algo = &i2c_imx_algo; i2c_imx->adapter.dev.parent = &pdev->dev; i2c_imx->adapter.nr = pdev->id; + i2c_imx->adapter.dev.of_node = pdev->dev.of_node; i2c_imx->irq = irq; i2c_imx->base = base; i2c_imx->res = res;
@@ -538,10 +547,12 @@ static int __init i2c_imx_probe(struct platform_device *pdev)i2c_set_adapdata (&i2c_imx->adapter, i2c_imx);/* Set up clock divider */ -if (pdata && pdata->bitrate) -i2c_imx_set_clk (i2c_imx, pdata->bitrate); -else -i2c_imx_set_clk (i2c_imx,IMX_I2C_BIT_RATE ); + bitrate =IMX_I2C_BIT_RATE ; + ret =of_property_read_u32 (pdev->dev.of_node, +"clock-frequency" , &bitrate); +if (ret <0 && pdata && pdata->bitrate) + bitrate = pdata->bitrate; +i2c_imx_set_clk (i2c_imx, bitrate);/* Set up chip registers to defaults */ writeb (0 , i2c_imx->base +IMX_I2C_I2CR );
@@ -554,6 +565,8 @@ static int __init i2c_imx_probe(struct platform_device *pdev) goto fail5; } +of_i2c_register_devices (&i2c_imx->adapter); +/* Set up platform driver data */ platform_set_drvdata (pdev, i2c_imx);
@@ -584,7 +597,6 @@ fail1: static int __exit i2c_imx_remove(struct platform_device *pdev) {struct imx_i2c_struct *i2c_imx =platform_get_drvdata (pdev); -struct imxi2c_platform_data *pdata = pdev->dev.platform_data;/* remove adapter */ dev_dbg (&i2c_imx->adapter.dev,"adapter removed\n" );
@@ -613,6 +625,7 @@ static struct platform_driver i2c_imx_driver = { .driver = { .name = DRIVER_NAME, .owner = THIS_MODULE, + .of_match_table = i2c_imx_dt_ids, } };
Signature · 1 line
1.7.4.1
v3 cover Add device tree probe for i2c-imx driver
In reply to Shawn GuoQuoted 3 lines · Shawn Guo
Hi Ben,
Hopefully, you can pick up this version.
ok, will do it for the weekend.
Quoted 20 lines
Thanks.
Changes since v2:
* Drop HS-I2C from binding document fsl-imx-i2c.txtChanges since v1:
* Fix a couple of typo in fsl-imx-i2c.txtShawn Guo (2):
i2c-imx: remove init/exit hooks from platform data
i2c-imx: add device tree probe support.../devicetree/bindings/i2c/fsl-imx-i2c.txt | 18 ++++++++ arch/arm/plat-mxc/include/mach/i2c.h | 4 -- drivers/i2c/busses/i2c-imx.c | 46 +++++++++---------- 3 files changed, 40 insertions(+), 28 deletions(-)--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Signature · 3 lines
Ben Dooks, ben at fluff.org, http://www.fluff.org/ben/ Large Hadron Colada: A large Pina Colada that makes the universe disappear.