Message ID | 20170613015641.29373-2-chris.packham@alliedtelesis.co.nz |
---|---|
State | Superseded |
Headers | show |
On 13/06/17 13:56, Chris Packham wrote: > Allow devices that use this driver to be registered via a > devicetree. > > Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz> > --- > .../devicetree/bindings/i2c/i2c-pca-platform.txt | 18 ++++++++++++++++++ > drivers/i2c/busses/i2c-pca-platform.c | 21 +++++++++++++++++++++ > 2 files changed, 39 insertions(+) > create mode 100644 Documentation/devicetree/bindings/i2c/i2c-pca-platform.txt > > diff --git a/Documentation/devicetree/bindings/i2c/i2c-pca-platform.txt b/Documentation/devicetree/bindings/i2c/i2c-pca-platform.txt > new file mode 100644 > index 000000000000..47410bda3f37 > --- /dev/null > +++ b/Documentation/devicetree/bindings/i2c/i2c-pca-platform.txt > @@ -0,0 +1,18 @@ > +* NXP PCA PCA9564/PCA9665 I2C controller > + > +The PCA9564/PCA9665 serves as an interface between most standard > +parallel-bus microcontrollers/microprocessors and the serial I2C-bus > +and allows the parallel bus system to communicate bi-directionally > +with the I2C-bus. > + > +Required properties : > + > + - reg : Offset and length of the register set for the device > + - compatible : one of "nxp,pca9564" or "nxp,pca9665" > + > +Optional properties > + - interrupts : the interrupt number > + - interrupt-parent : the phandle for the interrupt controller. > + If an interrupt is not specified polling will be used. > + - gpios : gpio phandle to control device reset. > + - clock-frequency : I2C bus frequency. > \ No newline at end of file > diff --git a/drivers/i2c/busses/i2c-pca-platform.c b/drivers/i2c/busses/i2c-pca-platform.c > index 3bd2e7d06e4b..ca63fee400cb 100644 > --- a/drivers/i2c/busses/i2c-pca-platform.c > +++ b/drivers/i2c/busses/i2c-pca-platform.c > @@ -23,6 +23,9 @@ > #include <linux/i2c-pca-platform.h> > #include <linux/gpio.h> > #include <linux/io.h> > +#include <linux/of.h> > +#include <linux/of_device.h> > +#include <linux/of_gpio.h> > > #include <asm/irq.h> > > @@ -136,12 +139,15 @@ static int i2c_pca_pf_probe(struct platform_device *pdev) > struct resource *res; > struct i2c_pca9564_pf_platform_data *platform_data = > dev_get_platdata(&pdev->dev); > + struct device_node *np = pdev->dev.of_node; > int ret = 0; > int irq; > > res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > irq = platform_get_irq(pdev, 0); > /* If irq is 0, we do polling. */ > + if (irq < 0) > + irq = 0; > > if (res == NULL) { > ret = -ENODEV; > @@ -182,6 +188,11 @@ static int i2c_pca_pf_probe(struct platform_device *pdev) I should be setting i2c->adap.dev.of_node somewhere around here so that the child nodes get automatically probed. > i2c->adap.timeout = platform_data->timeout; > i2c->algo_data.i2c_clock = platform_data->i2c_clock_speed; > i2c->gpio = platform_data->gpio; > + } else if (np) { > + i2c->adap.timeout = HZ; > + i2c->gpio = of_get_gpio(np, 0); > + of_property_read_u32_index(np, "clock-frequency", 0, > + &i2c->algo_data.i2c_clock); > } else { > i2c->adap.timeout = HZ; > i2c->algo_data.i2c_clock = 59000; > @@ -275,11 +286,21 @@ static int i2c_pca_pf_remove(struct platform_device *pdev) > return 0; > } > > +#ifdef CONFIG_OF > +static const struct of_device_id i2c_pca_of_match_table[] = { > + { .compatible = "nxp,pca9564" }, > + { .compatible = "nxp,pca9665" }, > + {}, > +}; > +MODULE_DEVICE_TABLE(of, i2c_pca_of_match_table); > +#endif > + > static struct platform_driver i2c_pca_pf_driver = { > .probe = i2c_pca_pf_probe, > .remove = i2c_pca_pf_remove, > .driver = { > .name = "i2c-pca-platform", > + .of_match_table = of_match_ptr(i2c_pca_of_match_table), > }, > }; > > -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Jun 13, 2017 at 01:56:38PM +1200, Chris Packham wrote: > Allow devices that use this driver to be registered via a > devicetree. > > Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz> > --- > .../devicetree/bindings/i2c/i2c-pca-platform.txt | 18 ++++++++++++++++++ It's preferred to split bindings to separate patch. > drivers/i2c/busses/i2c-pca-platform.c | 21 +++++++++++++++++++++ > 2 files changed, 39 insertions(+) > create mode 100644 Documentation/devicetree/bindings/i2c/i2c-pca-platform.txt > > diff --git a/Documentation/devicetree/bindings/i2c/i2c-pca-platform.txt b/Documentation/devicetree/bindings/i2c/i2c-pca-platform.txt > new file mode 100644 > index 000000000000..47410bda3f37 > --- /dev/null > +++ b/Documentation/devicetree/bindings/i2c/i2c-pca-platform.txt > @@ -0,0 +1,18 @@ > +* NXP PCA PCA9564/PCA9665 I2C controller > + > +The PCA9564/PCA9665 serves as an interface between most standard > +parallel-bus microcontrollers/microprocessors and the serial I2C-bus > +and allows the parallel bus system to communicate bi-directionally > +with the I2C-bus. > + > +Required properties : > + > + - reg : Offset and length of the register set for the device > + - compatible : one of "nxp,pca9564" or "nxp,pca9665" > + > +Optional properties > + - interrupts : the interrupt number > + - interrupt-parent : the phandle for the interrupt controller. > + If an interrupt is not specified polling will be used. > + - gpios : gpio phandle to control device reset. reset-gpios and state the active state. > + - clock-frequency : I2C bus frequency. > \ No newline at end of file ^^^ -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/Documentation/devicetree/bindings/i2c/i2c-pca-platform.txt b/Documentation/devicetree/bindings/i2c/i2c-pca-platform.txt new file mode 100644 index 000000000000..47410bda3f37 --- /dev/null +++ b/Documentation/devicetree/bindings/i2c/i2c-pca-platform.txt @@ -0,0 +1,18 @@ +* NXP PCA PCA9564/PCA9665 I2C controller + +The PCA9564/PCA9665 serves as an interface between most standard +parallel-bus microcontrollers/microprocessors and the serial I2C-bus +and allows the parallel bus system to communicate bi-directionally +with the I2C-bus. + +Required properties : + + - reg : Offset and length of the register set for the device + - compatible : one of "nxp,pca9564" or "nxp,pca9665" + +Optional properties + - interrupts : the interrupt number + - interrupt-parent : the phandle for the interrupt controller. + If an interrupt is not specified polling will be used. + - gpios : gpio phandle to control device reset. + - clock-frequency : I2C bus frequency. \ No newline at end of file diff --git a/drivers/i2c/busses/i2c-pca-platform.c b/drivers/i2c/busses/i2c-pca-platform.c index 3bd2e7d06e4b..ca63fee400cb 100644 --- a/drivers/i2c/busses/i2c-pca-platform.c +++ b/drivers/i2c/busses/i2c-pca-platform.c @@ -23,6 +23,9 @@ #include <linux/i2c-pca-platform.h> #include <linux/gpio.h> #include <linux/io.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/of_gpio.h> #include <asm/irq.h> @@ -136,12 +139,15 @@ static int i2c_pca_pf_probe(struct platform_device *pdev) struct resource *res; struct i2c_pca9564_pf_platform_data *platform_data = dev_get_platdata(&pdev->dev); + struct device_node *np = pdev->dev.of_node; int ret = 0; int irq; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); irq = platform_get_irq(pdev, 0); /* If irq is 0, we do polling. */ + if (irq < 0) + irq = 0; if (res == NULL) { ret = -ENODEV; @@ -182,6 +188,11 @@ static int i2c_pca_pf_probe(struct platform_device *pdev) i2c->adap.timeout = platform_data->timeout; i2c->algo_data.i2c_clock = platform_data->i2c_clock_speed; i2c->gpio = platform_data->gpio; + } else if (np) { + i2c->adap.timeout = HZ; + i2c->gpio = of_get_gpio(np, 0); + of_property_read_u32_index(np, "clock-frequency", 0, + &i2c->algo_data.i2c_clock); } else { i2c->adap.timeout = HZ; i2c->algo_data.i2c_clock = 59000; @@ -275,11 +286,21 @@ static int i2c_pca_pf_remove(struct platform_device *pdev) return 0; } +#ifdef CONFIG_OF +static const struct of_device_id i2c_pca_of_match_table[] = { + { .compatible = "nxp,pca9564" }, + { .compatible = "nxp,pca9665" }, + {}, +}; +MODULE_DEVICE_TABLE(of, i2c_pca_of_match_table); +#endif + static struct platform_driver i2c_pca_pf_driver = { .probe = i2c_pca_pf_probe, .remove = i2c_pca_pf_remove, .driver = { .name = "i2c-pca-platform", + .of_match_table = of_match_ptr(i2c_pca_of_match_table), }, };
Allow devices that use this driver to be registered via a devicetree. Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz> --- .../devicetree/bindings/i2c/i2c-pca-platform.txt | 18 ++++++++++++++++++ drivers/i2c/busses/i2c-pca-platform.c | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 Documentation/devicetree/bindings/i2c/i2c-pca-platform.txt