From: Ben Dooks <ben-i2c-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
To: Jean-Christophe PLAGNIOL-VILLARD
<plagnioj-sclMFOaUSTBWk0Htik3J/w@public.gmane.org>
Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
Nicolas Ferre
<nicolas.ferre-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
Subject: Re: [PATCH 1/4 v2] i2c/gpio: add DT support
Date: Mon, 13 Feb 2012 23:09:49 +0000 [thread overview]
Message-ID: <20120213230948.GC2999@freya.fluff.org> (raw)
In-Reply-To: <1328754308-7365-1-git-send-email-plagnioj-sclMFOaUSTBWk0Htik3J/w@public.gmane.org>
On Thu, Feb 09, 2012 at 03:25:05AM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj-sclMFOaUSTBWk0Htik3J/w@public.gmane.org>
> Cc: Nicolas Ferre <nicolas.ferre-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
> Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
> ---
> v2:
>
> use devm
> update DT bindings to i2c-gpio and sda-open-drain...
> update against "of: introduce helper to manage boolean"
>
> Best Regards,
> J.
> .../devicetree/bindings/gpio/gpio_i2c.txt | 32 +++++++
> drivers/i2c/busses/i2c-gpio.c | 95 +++++++++++++++----
> 2 files changed, 107 insertions(+), 20 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/gpio/gpio_i2c.txt
>
> diff --git a/Documentation/devicetree/bindings/gpio/gpio_i2c.txt b/Documentation/devicetree/bindings/gpio/gpio_i2c.txt
> new file mode 100644
> index 0000000..9710ed2
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/gpio/gpio_i2c.txt
> @@ -0,0 +1,32 @@
> +Device-Tree bindings for i2c gpio driver
> +
> +Required properties:
> + - compatible = "i2c-gpio";
> + - gpios: sda and scl gpio
> +
> +
> +Optional properties:
> + - i2c-gpio,sda-open-drain: sda as open drain
> + - i2c-gpio,scl-open-drain: scl as open drain
> + - i2c-gpio,scl-output-only: scl as output only
> + - udelay: delay between GPIO operations (may depend on each platform)
> + - timeout: timeout to get data (ms)
> +
> +Example nodes:
> +
> +i2c-gpio@0 {
> + compatible = "i2c-gpio";
> + gpios = <&pioA 23 0 /* sda */
> + &pioA 24 0 /* scl */
> + >;
> + i2c-gpio,sda-open-drain;
> + i2c-gpio,scl-open-drain;
> + udelay = <2>; /* ~100 kHz */
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + rv3029c2@56 {
> + compatible = "rv3029c2";
> + reg = <0x56>;
> + };
> +};
> diff --git a/drivers/i2c/busses/i2c-gpio.c b/drivers/i2c/busses/i2c-gpio.c
> index a651779..d7032c1 100644
> --- a/drivers/i2c/busses/i2c-gpio.c
> +++ b/drivers/i2c/busses/i2c-gpio.c
> @@ -14,8 +14,15 @@
> #include <linux/module.h>
> #include <linux/slab.h>
> #include <linux/platform_device.h>
> +#include <linux/gpio.h>
> +#include <linux/of_gpio.h>
> +#include <linux/of_i2c.h>
> -#include <asm/gpio.h>
> +struct i2c_gpio_private_data {
> + struct i2c_adapter adap;
> + struct i2c_algo_bit_data bit_data;
> + struct i2c_gpio_platform_data pdata;
> +};
>
> /* Toggle SDA by changing the direction of the pin */
> static void i2c_gpio_setsda_dir(void *data, int state)
> @@ -78,24 +85,63 @@ static int i2c_gpio_getscl(void *data)
> return gpio_get_value(pdata->scl_pin);
> }
>
> +static int __devinit of_i2c_gpio_probe(struct device_node *np,
> + struct i2c_gpio_platform_data *pdata)
> +{
> + u32 reg;
> +
> + if (of_gpio_count(np) < 2)
> + return -ENODEV;
Hmm, there's no error print and unless updated recently I think the
driver core will not produce any warnings if ->probe returns an
-ENODEV. I would prefer to see this printing a warning as for the
case below if an GPIO fails to be found.
Maybe return -EINVAL as it is not a valid configuration.
> +
> + pdata->sda_pin = of_get_gpio(np, 0);
> + pdata->scl_pin = of_get_gpio(np, 1);
> +
> + if (pdata->sda_pin < 0 || pdata->scl_pin < 0) {
> + pr_err("%s: invalid GPIO pins, sda=%d/scl=%d\n",
> + np->full_name, pdata->sda_pin, pdata->scl_pin);
> + return -ENODEV;
> + }
> +
> + if (of_property_read_u32(np, "udelay", ®))
> + pdata->udelay = reg;
This sounds like a "linux" specific property. I would think about
giving it a name like frequency, or ask Grant if we have a base set
of properties that a i2c controller should think about implementing.
> + if (of_property_read_u32(np, "timeout", ®))
> + pdata->timeout = msecs_to_jiffies(reg);
> +
> + pdata->sda_is_open_drain =
> + !!of_property_read_bool(np, "i2c-gpio,sda-open-drain");
> + pdata->scl_is_open_drain =
> + !!of_property_read_bool(np, "i2c-gpio,scl-open-drain");
> + pdata->scl_is_output_only =
> + !!of_property_read_bool(np, "i2c-gpio,scl-output-only");
I hate !!, why does of_property_read_bool() not return a bool? Also,
why can't I find of_property_read_bool() in include/linux/* ?
Also, does of_property_read_bool() consitently return a useful value if
the property does not exist, or is not readable? I am most concerned
with the behaviour if one of these properties has un-parsable contents.
> + return 0;
> +}
> +
> static int __devinit i2c_gpio_probe(struct platform_device *pdev)
> {
> + struct i2c_gpio_private_data *priv;
> struct i2c_gpio_platform_data *pdata;
> struct i2c_algo_bit_data *bit_data;
> struct i2c_adapter *adap;
> int ret;
>
> - pdata = pdev->dev.platform_data;
> - if (!pdata)
> - return -ENXIO;
> + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
> + if (!priv)
> + return -ENOMEM;
> + adap = &priv->adap;
> + bit_data = &priv->bit_data;
> + pdata = &priv->pdata;
> - ret = -ENOMEM;
> - adap = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL);
> - if (!adap)
> - goto err_alloc_adap;
> - bit_data = kzalloc(sizeof(struct i2c_algo_bit_data), GFP_KERNEL);
> - if (!bit_data)
> - goto err_alloc_bit_data;
> + if (pdev->dev.of_node) {
> + ret = of_i2c_gpio_probe(pdev->dev.of_node, pdata);
> + if (ret)
> + return ret;
> + } else {
> + if (!pdev->dev.platform_data)
> + return -ENXIO;
> + memcpy(pdata, pdev->dev.platform_data, sizeof(*pdata));
I'd moan about the error return, but that's the original driver for you.
> + }
>
> ret = gpio_request(pdata->sda_pin, "sda");
> if (ret)
> @@ -143,6 +189,7 @@ static int __devinit i2c_gpio_probe(struct platform_device *pdev)
> adap->algo_data = bit_data;
> adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
> adap->dev.parent = &pdev->dev;
> + adap->dev.of_node = pdev->dev.of_node;
Do we need to keep this around, surely we can get back to the of_node from
what we already have in adap->dev.parent?
>
> /*
> * If "dev->id" is negative we consider it as zero.
> @@ -154,7 +201,9 @@ static int __devinit i2c_gpio_probe(struct platform_device *pdev)
> if (ret)
> goto err_add_bus;
>
> - platform_set_drvdata(pdev, adap);
> + of_i2c_register_devices(adap);
> +
> + platform_set_drvdata(pdev, priv);
>
> dev_info(&pdev->dev, "using pins %u (SDA) and %u (SCL%s)\n",
> pdata->sda_pin, pdata->scl_pin,
> @@ -168,34 +217,40 @@ err_add_bus:
> err_request_scl:
> gpio_free(pdata->sda_pin);
> err_request_sda:
> - kfree(bit_data);
> -err_alloc_bit_data:
> - kfree(adap);
> -err_alloc_adap:
> return ret;
> }
>
> static int __devexit i2c_gpio_remove(struct platform_device *pdev)
> {
> + struct i2c_gpio_private_data *priv;
> struct i2c_gpio_platform_data *pdata;
> struct i2c_adapter *adap;
>
> - adap = platform_get_drvdata(pdev);
> - pdata = pdev->dev.platform_data;
> + priv = platform_get_drvdata(pdev);
> + adap = &priv->adap;
> + pdata = &priv->pdata;
>
> i2c_del_adapter(adap);
> gpio_free(pdata->scl_pin);
> gpio_free(pdata->sda_pin);
> - kfree(adap->algo_data);
> - kfree(adap);
>
> return 0;
> }
>
> +#if defined(CONFIG_OF)
> +static const struct of_device_id i2c_gpio_dt_ids[] = {
> + { .compatible = "i2c-gpio", },
> + { /* sentinel */ }
> +};
> +
> +MODULE_DEVICE_TABLE(of, i2c_gpio_dt_ids);
> +#endif
> +
> static struct platform_driver i2c_gpio_driver = {
> .driver = {
> .name = "i2c-gpio",
> .owner = THIS_MODULE,
> + .of_match_table = of_match_ptr(i2c_gpio_dt_ids),
> },
> .probe = i2c_gpio_probe,
> .remove = __devexit_p(i2c_gpio_remove),
> --
> 1.7.7
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: ben-i2c@fluff.org (Ben Dooks)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/4 v2] i2c/gpio: add DT support
Date: Mon, 13 Feb 2012 23:09:49 +0000 [thread overview]
Message-ID: <20120213230948.GC2999@freya.fluff.org> (raw)
In-Reply-To: <1328754308-7365-1-git-send-email-plagnioj@jcrosoft.com>
On Thu, Feb 09, 2012 at 03:25:05AM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote:
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
> Cc: linux-i2c at vger.kernel.org
> Cc: devicetree-discuss at lists.ozlabs.org
> ---
> v2:
>
> use devm
> update DT bindings to i2c-gpio and sda-open-drain...
> update against "of: introduce helper to manage boolean"
>
> Best Regards,
> J.
> .../devicetree/bindings/gpio/gpio_i2c.txt | 32 +++++++
> drivers/i2c/busses/i2c-gpio.c | 95 +++++++++++++++----
> 2 files changed, 107 insertions(+), 20 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/gpio/gpio_i2c.txt
>
> diff --git a/Documentation/devicetree/bindings/gpio/gpio_i2c.txt b/Documentation/devicetree/bindings/gpio/gpio_i2c.txt
> new file mode 100644
> index 0000000..9710ed2
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/gpio/gpio_i2c.txt
> @@ -0,0 +1,32 @@
> +Device-Tree bindings for i2c gpio driver
> +
> +Required properties:
> + - compatible = "i2c-gpio";
> + - gpios: sda and scl gpio
> +
> +
> +Optional properties:
> + - i2c-gpio,sda-open-drain: sda as open drain
> + - i2c-gpio,scl-open-drain: scl as open drain
> + - i2c-gpio,scl-output-only: scl as output only
> + - udelay: delay between GPIO operations (may depend on each platform)
> + - timeout: timeout to get data (ms)
> +
> +Example nodes:
> +
> +i2c-gpio at 0 {
> + compatible = "i2c-gpio";
> + gpios = <&pioA 23 0 /* sda */
> + &pioA 24 0 /* scl */
> + >;
> + i2c-gpio,sda-open-drain;
> + i2c-gpio,scl-open-drain;
> + udelay = <2>; /* ~100 kHz */
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + rv3029c2 at 56 {
> + compatible = "rv3029c2";
> + reg = <0x56>;
> + };
> +};
> diff --git a/drivers/i2c/busses/i2c-gpio.c b/drivers/i2c/busses/i2c-gpio.c
> index a651779..d7032c1 100644
> --- a/drivers/i2c/busses/i2c-gpio.c
> +++ b/drivers/i2c/busses/i2c-gpio.c
> @@ -14,8 +14,15 @@
> #include <linux/module.h>
> #include <linux/slab.h>
> #include <linux/platform_device.h>
> +#include <linux/gpio.h>
> +#include <linux/of_gpio.h>
> +#include <linux/of_i2c.h>
> -#include <asm/gpio.h>
> +struct i2c_gpio_private_data {
> + struct i2c_adapter adap;
> + struct i2c_algo_bit_data bit_data;
> + struct i2c_gpio_platform_data pdata;
> +};
>
> /* Toggle SDA by changing the direction of the pin */
> static void i2c_gpio_setsda_dir(void *data, int state)
> @@ -78,24 +85,63 @@ static int i2c_gpio_getscl(void *data)
> return gpio_get_value(pdata->scl_pin);
> }
>
> +static int __devinit of_i2c_gpio_probe(struct device_node *np,
> + struct i2c_gpio_platform_data *pdata)
> +{
> + u32 reg;
> +
> + if (of_gpio_count(np) < 2)
> + return -ENODEV;
Hmm, there's no error print and unless updated recently I think the
driver core will not produce any warnings if ->probe returns an
-ENODEV. I would prefer to see this printing a warning as for the
case below if an GPIO fails to be found.
Maybe return -EINVAL as it is not a valid configuration.
> +
> + pdata->sda_pin = of_get_gpio(np, 0);
> + pdata->scl_pin = of_get_gpio(np, 1);
> +
> + if (pdata->sda_pin < 0 || pdata->scl_pin < 0) {
> + pr_err("%s: invalid GPIO pins, sda=%d/scl=%d\n",
> + np->full_name, pdata->sda_pin, pdata->scl_pin);
> + return -ENODEV;
> + }
> +
> + if (of_property_read_u32(np, "udelay", ®))
> + pdata->udelay = reg;
This sounds like a "linux" specific property. I would think about
giving it a name like frequency, or ask Grant if we have a base set
of properties that a i2c controller should think about implementing.
> + if (of_property_read_u32(np, "timeout", ®))
> + pdata->timeout = msecs_to_jiffies(reg);
> +
> + pdata->sda_is_open_drain =
> + !!of_property_read_bool(np, "i2c-gpio,sda-open-drain");
> + pdata->scl_is_open_drain =
> + !!of_property_read_bool(np, "i2c-gpio,scl-open-drain");
> + pdata->scl_is_output_only =
> + !!of_property_read_bool(np, "i2c-gpio,scl-output-only");
I hate !!, why does of_property_read_bool() not return a bool? Also,
why can't I find of_property_read_bool() in include/linux/* ?
Also, does of_property_read_bool() consitently return a useful value if
the property does not exist, or is not readable? I am most concerned
with the behaviour if one of these properties has un-parsable contents.
> + return 0;
> +}
> +
> static int __devinit i2c_gpio_probe(struct platform_device *pdev)
> {
> + struct i2c_gpio_private_data *priv;
> struct i2c_gpio_platform_data *pdata;
> struct i2c_algo_bit_data *bit_data;
> struct i2c_adapter *adap;
> int ret;
>
> - pdata = pdev->dev.platform_data;
> - if (!pdata)
> - return -ENXIO;
> + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
> + if (!priv)
> + return -ENOMEM;
> + adap = &priv->adap;
> + bit_data = &priv->bit_data;
> + pdata = &priv->pdata;
> - ret = -ENOMEM;
> - adap = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL);
> - if (!adap)
> - goto err_alloc_adap;
> - bit_data = kzalloc(sizeof(struct i2c_algo_bit_data), GFP_KERNEL);
> - if (!bit_data)
> - goto err_alloc_bit_data;
> + if (pdev->dev.of_node) {
> + ret = of_i2c_gpio_probe(pdev->dev.of_node, pdata);
> + if (ret)
> + return ret;
> + } else {
> + if (!pdev->dev.platform_data)
> + return -ENXIO;
> + memcpy(pdata, pdev->dev.platform_data, sizeof(*pdata));
I'd moan about the error return, but that's the original driver for you.
> + }
>
> ret = gpio_request(pdata->sda_pin, "sda");
> if (ret)
> @@ -143,6 +189,7 @@ static int __devinit i2c_gpio_probe(struct platform_device *pdev)
> adap->algo_data = bit_data;
> adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
> adap->dev.parent = &pdev->dev;
> + adap->dev.of_node = pdev->dev.of_node;
Do we need to keep this around, surely we can get back to the of_node from
what we already have in adap->dev.parent?
>
> /*
> * If "dev->id" is negative we consider it as zero.
> @@ -154,7 +201,9 @@ static int __devinit i2c_gpio_probe(struct platform_device *pdev)
> if (ret)
> goto err_add_bus;
>
> - platform_set_drvdata(pdev, adap);
> + of_i2c_register_devices(adap);
> +
> + platform_set_drvdata(pdev, priv);
>
> dev_info(&pdev->dev, "using pins %u (SDA) and %u (SCL%s)\n",
> pdata->sda_pin, pdata->scl_pin,
> @@ -168,34 +217,40 @@ err_add_bus:
> err_request_scl:
> gpio_free(pdata->sda_pin);
> err_request_sda:
> - kfree(bit_data);
> -err_alloc_bit_data:
> - kfree(adap);
> -err_alloc_adap:
> return ret;
> }
>
> static int __devexit i2c_gpio_remove(struct platform_device *pdev)
> {
> + struct i2c_gpio_private_data *priv;
> struct i2c_gpio_platform_data *pdata;
> struct i2c_adapter *adap;
>
> - adap = platform_get_drvdata(pdev);
> - pdata = pdev->dev.platform_data;
> + priv = platform_get_drvdata(pdev);
> + adap = &priv->adap;
> + pdata = &priv->pdata;
>
> i2c_del_adapter(adap);
> gpio_free(pdata->scl_pin);
> gpio_free(pdata->sda_pin);
> - kfree(adap->algo_data);
> - kfree(adap);
>
> return 0;
> }
>
> +#if defined(CONFIG_OF)
> +static const struct of_device_id i2c_gpio_dt_ids[] = {
> + { .compatible = "i2c-gpio", },
> + { /* sentinel */ }
> +};
> +
> +MODULE_DEVICE_TABLE(of, i2c_gpio_dt_ids);
> +#endif
> +
> static struct platform_driver i2c_gpio_driver = {
> .driver = {
> .name = "i2c-gpio",
> .owner = THIS_MODULE,
> + .of_match_table = of_match_ptr(i2c_gpio_dt_ids),
> },
> .probe = i2c_gpio_probe,
> .remove = __devexit_p(i2c_gpio_remove),
> --
> 1.7.7
>
> --
> 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
next prev parent reply other threads:[~2012-02-13 23:09 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-09 2:25 [PATCH 1/4 v2] i2c/gpio: add DT support Jean-Christophe PLAGNIOL-VILLARD
2012-02-09 2:25 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-09 2:25 ` [PATCH 2/4 v2] ARM: at91: sam9g20 add i2c " Jean-Christophe PLAGNIOL-VILLARD
2012-02-09 2:25 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-09 2:25 ` [PATCH 3/4] ARM: at91: usb_a9g20 add DT i2c support Jean-Christophe PLAGNIOL-VILLARD
2012-02-09 2:25 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-09 2:25 ` [PATCH 4/4 v2] ARM: at91: sam9g45 add i2c DT support Jean-Christophe PLAGNIOL-VILLARD
2012-02-09 2:25 ` Jean-Christophe PLAGNIOL-VILLARD
[not found] ` <1328754308-7365-1-git-send-email-plagnioj-sclMFOaUSTBWk0Htik3J/w@public.gmane.org>
2012-02-13 17:17 ` [PATCH 1/4 v2] i2c/gpio: add " Karol Lewandowski
2012-02-13 17:17 ` Karol Lewandowski
2012-02-20 9:58 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-20 9:58 ` Jean-Christophe PLAGNIOL-VILLARD
[not found] ` <20120220095813.GB11307-RQcB7r2h9QmfDR2tN2SG5Ni2O/JbrIOy@public.gmane.org>
2012-02-20 10:08 ` Russell King - ARM Linux
2012-02-20 10:08 ` Russell King - ARM Linux
[not found] ` <20120220100843.GE22562-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2012-02-20 10:22 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-20 10:22 ` Jean-Christophe PLAGNIOL-VILLARD
[not found] ` <20120220102231.GC11307-RQcB7r2h9QmfDR2tN2SG5Ni2O/JbrIOy@public.gmane.org>
2012-02-20 12:50 ` Russell King - ARM Linux
2012-02-20 12:50 ` Russell King - ARM Linux
[not found] ` <20120220125054.GF22562-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2012-02-20 13:35 ` Jean Delvare
2012-02-20 13:35 ` Jean Delvare
[not found] ` <20120220143557.02787bad-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2012-02-20 13:51 ` Russell King - ARM Linux
2012-02-20 13:51 ` Russell King - ARM Linux
[not found] ` <20120220135106.GA26840-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2012-02-20 14:51 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-20 14:51 ` Jean-Christophe PLAGNIOL-VILLARD
[not found] ` <20120220145137.GG11307-RQcB7r2h9QmfDR2tN2SG5Ni2O/JbrIOy@public.gmane.org>
2012-02-20 15:03 ` Russell King - ARM Linux
2012-02-20 15:03 ` Russell King - ARM Linux
2012-02-20 13:37 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-20 13:37 ` Jean-Christophe PLAGNIOL-VILLARD
[not found] ` <20120220133725.GD11307-RQcB7r2h9QmfDR2tN2SG5Ni2O/JbrIOy@public.gmane.org>
2012-02-20 13:46 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-20 13:46 ` Jean-Christophe PLAGNIOL-VILLARD
[not found] ` <20120220134634.GE11307-RQcB7r2h9QmfDR2tN2SG5Ni2O/JbrIOy@public.gmane.org>
2012-02-20 13:58 ` Russell King - ARM Linux
2012-02-20 13:58 ` Russell King - ARM Linux
[not found] ` <20120220135807.GB26840-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2012-02-20 14:46 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-20 14:46 ` Jean-Christophe PLAGNIOL-VILLARD
[not found] ` <20120220144635.GF11307-RQcB7r2h9QmfDR2tN2SG5Ni2O/JbrIOy@public.gmane.org>
2012-02-20 15:00 ` Russell King - ARM Linux
2012-02-20 15:00 ` Russell King - ARM Linux
[not found] ` <20120220150040.GC26840-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2012-02-20 15:08 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-20 15:08 ` Jean-Christophe PLAGNIOL-VILLARD
[not found] ` <20120220150810.GH11307-RQcB7r2h9QmfDR2tN2SG5Ni2O/JbrIOy@public.gmane.org>
2012-02-20 15:27 ` Russell King - ARM Linux
2012-02-20 15:27 ` Russell King - ARM Linux
[not found] ` <20120220152748.GF26840-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2012-02-20 15:30 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-20 15:30 ` Jean-Christophe PLAGNIOL-VILLARD
[not found] ` <20120220153006.GK11307-RQcB7r2h9QmfDR2tN2SG5Ni2O/JbrIOy@public.gmane.org>
2012-02-20 15:46 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-20 15:46 ` Jean-Christophe PLAGNIOL-VILLARD
[not found] ` <20120220154613.GL11307-RQcB7r2h9QmfDR2tN2SG5Ni2O/JbrIOy@public.gmane.org>
2012-02-20 16:08 ` Russell King - ARM Linux
2012-02-20 16:08 ` Russell King - ARM Linux
[not found] ` <20120220160855.GG26840-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2012-02-20 16:09 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-20 16:09 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-13 23:09 ` Ben Dooks [this message]
2012-02-13 23:09 ` Ben Dooks
2012-02-14 4:06 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-14 4:06 ` Jean-Christophe PLAGNIOL-VILLARD
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120213230948.GC2999@freya.fluff.org \
--to=ben-i2c-elnmno+kys3ytjvyw6ydsg@public.gmane.org \
--cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=nicolas.ferre-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org \
--cc=plagnioj-sclMFOaUSTBWk0Htik3J/w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.