From: Sascha Hauer <s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> To: Richard Zhao <linuxzsc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Cc: kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org, linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org Subject: Re: [PATCH 1/4] i2c: imx: check busy bit when START/STOP Date: Thu, 1 Oct 2009 11:52:40 +0200 [thread overview] Message-ID: <20091001095239.GE27039@pengutronix.de> (raw) In-Reply-To: <4e090d470910010211k4ce78763i1a5163ec6ea57fe8-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> On Thu, Oct 01, 2009 at 05:11:30PM +0800, Richard Zhao wrote: > On Thu, Oct 1, 2009 at 4:38 PM, Sascha Hauer <s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> wrote: > > On Thu, Oct 01, 2009 at 04:03:20PM +0800, Richard Zhao wrote: > >> On Thu, Oct 1, 2009 at 9:13 AM, Richard Zhao <linuxzsc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > >> > After START/RESTART, wait for busy bit to be set and > >> > after STOP, wait for busy bit to be clear. > >> > > >> > Signed-off-by: Richard Zhao <linuxzsc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > >> > > >> > diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c > >> > index 4afba3e..156cc95 100644 > >> > --- a/drivers/i2c/busses/i2c-imx.c > >> > +++ b/drivers/i2c/busses/i2c-imx.c > >> > @@ -125,14 +125,19 @@ struct imx_i2c_struct { > >> > /** Functions for IMX I2C adapter driver *************************************** > >> > *******************************************************************************/ > >> > > >> > -static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx) > >> > +static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy) > >> > { > >> > unsigned long orig_jiffies = jiffies; > >> > + unsigned int temp; > >> > > >> > dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__); > >> > > >> > - /* wait for bus not busy */ > >> > - while (readb(i2c_imx->base + IMX_I2C_I2SR) & I2SR_IBB) { > >> > + temp = readb(i2c_imx->base + IMX_I2C_I2SR); > >> > + while (1) { > >> > + if (for_busy && (temp & I2SR_IBB)) > >> > + break; > >> > + if (!for_busy && !(temp & I2SR_IBB)) > >> > + break; > >> > if (signal_pending(current)) { > >> > dev_dbg(&i2c_imx->adapter.dev, > >> > "<%s> I2C Interrupted\n", __func__); > >> > @@ -144,6 +149,7 @@ static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx) > >> > return -EIO; > >> > } > >> > schedule(); > >> > + temp = readb(i2c_imx->base + IMX_I2C_I2SR); > >> > } > >> > > >> > return 0; > >> > @@ -179,20 +185,32 @@ static int i2c_imx_acked(struct imx_i2c_struct *i2c_imx) > >> > return 0; > >> > } > >> > > >> > -static void i2c_imx_start(struct imx_i2c_struct *i2c_imx) > >> > +static int i2c_imx_start(struct imx_i2c_struct *i2c_imx) > >> > { > >> > unsigned int temp = 0; > >> > + int result; > >> > > >> > dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__); > >> > > >> > /* Enable I2C controller */ > >> > + writeb(0, i2c_imx->base + IMX_I2C_I2SR); > >> > writeb(I2CR_IEN, i2c_imx->base + IMX_I2C_I2CR); > >> > + > >> > + result = i2c_imx_bus_busy(i2c_imx, 0); > >> > + if (result) > >> > + return result; > >> > + > >> > /* Start I2C transaction */ > >> > temp = readb(i2c_imx->base + IMX_I2C_I2CR); > >> > temp |= I2CR_MSTA; > >> > writeb(temp, i2c_imx->base + IMX_I2C_I2CR); > >> > + result = i2c_imx_bus_busy(i2c_imx, 1); > >> > + if (result) > >> > + return result; > >> > + > >> > temp |= I2CR_IIEN | I2CR_MTX | I2CR_TXAK; > >> > writeb(temp, i2c_imx->base + IMX_I2C_I2CR); > >> > + return result; > >> > } > >> > > >> > static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx) > >> > @@ -202,16 +220,16 @@ static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx) > >> > /* Stop I2C transaction */ > >> > dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__); > >> > temp = readb(i2c_imx->base + IMX_I2C_I2CR); > >> > - temp &= ~I2CR_MSTA; > >> > + temp &= ~(I2CR_MSTA | I2CR_MTX); > >> > writeb(temp, i2c_imx->base + IMX_I2C_I2CR); > >> > - /* setup chip registers to defaults */ > >> > - writeb(I2CR_IEN, i2c_imx->base + IMX_I2C_I2CR); > >> > - writeb(0, i2c_imx->base + IMX_I2C_I2SR); > >> > /* > >> > * This delay caused by an i.MXL hardware bug. > >> > * If no (or too short) delay, no "STOP" bit will be generated. > >> > */ > >> > udelay(i2c_imx->disable_delay); > >> > + > >> > + i2c_imx_bus_busy(i2c_imx, 0); > >> > + > >> > /* Disable I2C controller */ > >> > writeb(0, i2c_imx->base + IMX_I2C_I2CR); > >> > } > >> > @@ -344,7 +362,7 @@ static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs) > >> > dev_dbg(&i2c_imx->adapter.dev, > >> > "<%s> clear MSTA\n", __func__); > >> > temp = readb(i2c_imx->base + IMX_I2C_I2CR); > >> > - temp &= ~I2CR_MSTA; > >> > + temp &= ~(I2CR_MSTA | I2CR_MTX); > >> > writeb(temp, i2c_imx->base + IMX_I2C_I2CR); > >> > } else if (i == (msgs->len - 2)) { > >> > dev_dbg(&i2c_imx->adapter.dev, > >> > @@ -370,14 +388,11 @@ static int i2c_imx_xfer(struct i2c_adapter *adapter, > >> > > >> > dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__); > >> > > >> > - /* Check if i2c bus is not busy */ > >> > - result = i2c_imx_bus_busy(i2c_imx); > >> > + /* Start I2C transfer */ > >> > + result = i2c_imx_start(i2c_imx); > >> > if (result) > >> > goto fail0; > >> > > >> > - /* Start I2C transfer */ > >> > - i2c_imx_start(i2c_imx); > >> > - > >> > /* read/write data */ > >> > for (i = 0; i < num; i++) { > >> > if (i) { > >> > @@ -386,6 +401,9 @@ static int i2c_imx_xfer(struct i2c_adapter *adapter, > >> > temp = readb(i2c_imx->base + IMX_I2C_I2CR); > >> > temp |= I2CR_RSTA; > >> > writeb(temp, i2c_imx->base + IMX_I2C_I2CR); > >> > + result = i2c_imx_bus_busy(i2c_imx, 1); > >> > + if (result) > >> > + goto fail0; > >> > } > >> > dev_dbg(&i2c_imx->adapter.dev, > >> > "<%s> transfer message: %d\n", __func__, i); > >> > -- > >> > 1.6.0.4 > >> > > >> > > >> > >> Hi Sascha, > >> > >> So I assume you have no comments about this patch ? > > > > No, I'm still thinking about it. The commit message says *what* you're > > doing, but not *why*. Is it a concrete bug that you fix or is it just > > because it might be a good idea to do so? > The driver doesn't work with mx51, which is a fast cpu. So I checked > the driver, and find it didn't check IBB. Ah, so 'make the driver work on i.MX51' is a good statement which should be part of the commit message. > > Also, we leave i2c_imx_xfer with the controller in a well defined state. > > So if we leave this function with the controller in non busy state, why > > do we have to check for non busy again when we enter it again? > I2C is a multi-master bus. So you say with this patch the driver becomes multi master capable? If so, it should also be part of the commit message. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
WARNING: multiple messages have this Message-ID (diff)
From: s.hauer@pengutronix.de (Sascha Hauer) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 1/4] i2c: imx: check busy bit when START/STOP Date: Thu, 1 Oct 2009 11:52:40 +0200 [thread overview] Message-ID: <20091001095239.GE27039@pengutronix.de> (raw) In-Reply-To: <4e090d470910010211k4ce78763i1a5163ec6ea57fe8@mail.gmail.com> On Thu, Oct 01, 2009 at 05:11:30PM +0800, Richard Zhao wrote: > On Thu, Oct 1, 2009 at 4:38 PM, Sascha Hauer <s.hauer@pengutronix.de> wrote: > > On Thu, Oct 01, 2009 at 04:03:20PM +0800, Richard Zhao wrote: > >> On Thu, Oct 1, 2009 at 9:13 AM, Richard Zhao <linuxzsc@gmail.com> wrote: > >> > After START/RESTART, wait for busy bit to be set and > >> > after STOP, wait for busy bit to be clear. > >> > > >> > Signed-off-by: Richard Zhao <linuxzsc@gmail.com> > >> > > >> > diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c > >> > index 4afba3e..156cc95 100644 > >> > --- a/drivers/i2c/busses/i2c-imx.c > >> > +++ b/drivers/i2c/busses/i2c-imx.c > >> > @@ -125,14 +125,19 @@ struct imx_i2c_struct { > >> > ?/** Functions for IMX I2C adapter driver *************************************** > >> > ?*******************************************************************************/ > >> > > >> > -static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx) > >> > +static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy) > >> > ?{ > >> > ? ? ? ?unsigned long orig_jiffies = jiffies; > >> > + ? ? ? unsigned int temp; > >> > > >> > ? ? ? ?dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__); > >> > > >> > - ? ? ? /* wait for bus not busy */ > >> > - ? ? ? while (readb(i2c_imx->base + IMX_I2C_I2SR) & I2SR_IBB) { > >> > + ? ? ? temp = readb(i2c_imx->base + IMX_I2C_I2SR); > >> > + ? ? ? while (1) { > >> > + ? ? ? ? ? ? ? if (for_busy && (temp & I2SR_IBB)) > >> > + ? ? ? ? ? ? ? ? ? ? ? break; > >> > + ? ? ? ? ? ? ? if (!for_busy && !(temp & I2SR_IBB)) > >> > + ? ? ? ? ? ? ? ? ? ? ? break; > >> > ? ? ? ? ? ? ? ?if (signal_pending(current)) { > >> > ? ? ? ? ? ? ? ? ? ? ? ?dev_dbg(&i2c_imx->adapter.dev, > >> > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"<%s> I2C Interrupted\n", __func__); > >> > @@ -144,6 +149,7 @@ static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx) > >> > ? ? ? ? ? ? ? ? ? ? ? ?return -EIO; > >> > ? ? ? ? ? ? ? ?} > >> > ? ? ? ? ? ? ? ?schedule(); > >> > + ? ? ? ? ? ? ? temp = readb(i2c_imx->base + IMX_I2C_I2SR); > >> > ? ? ? ?} > >> > > >> > ? ? ? ?return 0; > >> > @@ -179,20 +185,32 @@ static int i2c_imx_acked(struct imx_i2c_struct *i2c_imx) > >> > ? ? ? ?return 0; > >> > ?} > >> > > >> > -static void i2c_imx_start(struct imx_i2c_struct *i2c_imx) > >> > +static int i2c_imx_start(struct imx_i2c_struct *i2c_imx) > >> > ?{ > >> > ? ? ? ?unsigned int temp = 0; > >> > + ? ? ? int result; > >> > > >> > ? ? ? ?dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__); > >> > > >> > ? ? ? ?/* Enable I2C controller */ > >> > + ? ? ? writeb(0, i2c_imx->base + IMX_I2C_I2SR); > >> > ? ? ? ?writeb(I2CR_IEN, i2c_imx->base + IMX_I2C_I2CR); > >> > + > >> > + ? ? ? result = i2c_imx_bus_busy(i2c_imx, 0); > >> > + ? ? ? if (result) > >> > + ? ? ? ? ? ? ? return result; > >> > + > >> > ? ? ? ?/* Start I2C transaction */ > >> > ? ? ? ?temp = readb(i2c_imx->base + IMX_I2C_I2CR); > >> > ? ? ? ?temp |= I2CR_MSTA; > >> > ? ? ? ?writeb(temp, i2c_imx->base + IMX_I2C_I2CR); > >> > + ? ? ? result = i2c_imx_bus_busy(i2c_imx, 1); > >> > + ? ? ? if (result) > >> > + ? ? ? ? ? ? ? return result; > >> > + > >> > ? ? ? ?temp |= I2CR_IIEN | I2CR_MTX | I2CR_TXAK; > >> > ? ? ? ?writeb(temp, i2c_imx->base + IMX_I2C_I2CR); > >> > + ? ? ? return result; > >> > ?} > >> > > >> > ?static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx) > >> > @@ -202,16 +220,16 @@ static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx) > >> > ? ? ? ?/* Stop I2C transaction */ > >> > ? ? ? ?dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__); > >> > ? ? ? ?temp = readb(i2c_imx->base + IMX_I2C_I2CR); > >> > - ? ? ? temp &= ~I2CR_MSTA; > >> > + ? ? ? temp &= ~(I2CR_MSTA | I2CR_MTX); > >> > ? ? ? ?writeb(temp, i2c_imx->base + IMX_I2C_I2CR); > >> > - ? ? ? /* setup chip registers to defaults */ > >> > - ? ? ? writeb(I2CR_IEN, i2c_imx->base + IMX_I2C_I2CR); > >> > - ? ? ? writeb(0, i2c_imx->base + IMX_I2C_I2SR); > >> > ? ? ? ?/* > >> > ? ? ? ? * This delay caused by an i.MXL hardware bug. > >> > ? ? ? ? * If no (or too short) delay, no "STOP" bit will be generated. > >> > ? ? ? ? */ > >> > ? ? ? ?udelay(i2c_imx->disable_delay); > >> > + > >> > + ? ? ? i2c_imx_bus_busy(i2c_imx, 0); > >> > + > >> > ? ? ? ?/* Disable I2C controller */ > >> > ? ? ? ?writeb(0, i2c_imx->base + IMX_I2C_I2CR); > >> > ?} > >> > @@ -344,7 +362,7 @@ static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs) > >> > ? ? ? ? ? ? ? ? ? ? ? ?dev_dbg(&i2c_imx->adapter.dev, > >> > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"<%s> clear MSTA\n", __func__); > >> > ? ? ? ? ? ? ? ? ? ? ? ?temp = readb(i2c_imx->base + IMX_I2C_I2CR); > >> > - ? ? ? ? ? ? ? ? ? ? ? temp &= ~I2CR_MSTA; > >> > + ? ? ? ? ? ? ? ? ? ? ? temp &= ~(I2CR_MSTA | I2CR_MTX); > >> > ? ? ? ? ? ? ? ? ? ? ? ?writeb(temp, i2c_imx->base + IMX_I2C_I2CR); > >> > ? ? ? ? ? ? ? ?} else if (i == (msgs->len - 2)) { > >> > ? ? ? ? ? ? ? ? ? ? ? ?dev_dbg(&i2c_imx->adapter.dev, > >> > @@ -370,14 +388,11 @@ static int i2c_imx_xfer(struct i2c_adapter *adapter, > >> > > >> > ? ? ? ?dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__); > >> > > >> > - ? ? ? /* Check if i2c bus is not busy */ > >> > - ? ? ? result = i2c_imx_bus_busy(i2c_imx); > >> > + ? ? ? /* Start I2C transfer */ > >> > + ? ? ? result = i2c_imx_start(i2c_imx); > >> > ? ? ? ?if (result) > >> > ? ? ? ? ? ? ? ?goto fail0; > >> > > >> > - ? ? ? /* Start I2C transfer */ > >> > - ? ? ? i2c_imx_start(i2c_imx); > >> > - > >> > ? ? ? ?/* read/write data */ > >> > ? ? ? ?for (i = 0; i < num; i++) { > >> > ? ? ? ? ? ? ? ?if (i) { > >> > @@ -386,6 +401,9 @@ static int i2c_imx_xfer(struct i2c_adapter *adapter, > >> > ? ? ? ? ? ? ? ? ? ? ? ?temp = readb(i2c_imx->base + IMX_I2C_I2CR); > >> > ? ? ? ? ? ? ? ? ? ? ? ?temp |= I2CR_RSTA; > >> > ? ? ? ? ? ? ? ? ? ? ? ?writeb(temp, i2c_imx->base + IMX_I2C_I2CR); > >> > + ? ? ? ? ? ? ? ? ? ? ? result = ?i2c_imx_bus_busy(i2c_imx, 1); > >> > + ? ? ? ? ? ? ? ? ? ? ? if (result) > >> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? goto fail0; > >> > ? ? ? ? ? ? ? ?} > >> > ? ? ? ? ? ? ? ?dev_dbg(&i2c_imx->adapter.dev, > >> > ? ? ? ? ? ? ? ? ? ? ? ?"<%s> transfer message: %d\n", __func__, i); > >> > -- > >> > 1.6.0.4 > >> > > >> > > >> > >> Hi Sascha, > >> > >> So I assume you have no comments about this patch ? > > > > No, I'm still thinking about it. The commit message says *what* you're > > doing, but not *why*. Is it a concrete bug that you fix or is it just > > because it might be a good idea to do so? > The driver doesn't work with mx51, which is a fast cpu. So I checked > the driver, and find it didn't check IBB. Ah, so 'make the driver work on i.MX51' is a good statement which should be part of the commit message. > > Also, we leave i2c_imx_xfer with the controller in a well defined state. > > So if we leave this function with the controller in non busy state, why > > do we have to check for non busy again when we enter it again? > I2C is a multi-master bus. So you say with this patch the driver becomes multi master capable? If so, it should also be part of the commit message. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
next prev parent reply other threads:[~2009-10-01 9:52 UTC|newest] Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top 2009-10-01 1:13 [PATCH 1/4] i2c: imx: check busy bit when START/STOP Richard Zhao 2009-10-01 1:13 ` Richard Zhao [not found] ` <1254359613-21210-1-git-send-email-linuxzsc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2009-10-01 1:13 ` [PATCH 2/4] i2c: imx: only imx1 needs disable delay Richard Zhao 2009-10-01 1:13 ` Richard Zhao [not found] ` <1254359613-21210-2-git-send-email-linuxzsc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2009-10-01 1:13 ` [PATCH 3/4] i2c: imx: add macros and printk to make debug easy Richard Zhao 2009-10-01 1:13 ` Richard Zhao [not found] ` <1254359613-21210-3-git-send-email-linuxzsc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2009-10-01 1:13 ` [PATCH 4/4] i2c: imx: disable clock when it's possible to save power Richard Zhao 2009-10-01 1:13 ` Richard Zhao [not found] ` <1254359613-21210-4-git-send-email-linuxzsc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2009-10-01 7:34 ` Sascha Hauer 2009-10-01 7:34 ` Sascha Hauer [not found] ` <20091001073434.GY27039-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2009-10-01 7:56 ` Richard Zhao 2009-10-01 7:56 ` Richard Zhao [not found] ` <4e090d470910010056n56bff9f4l1fec703c2dde9edf-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2009-10-01 8:00 ` Sascha Hauer 2009-10-01 8:00 ` Sascha Hauer 2009-10-04 12:30 ` Richard Zhao 2009-10-01 7:29 ` [PATCH 3/4] i2c: imx: add macros and printk to make debug easy Sascha Hauer 2009-10-01 7:29 ` Sascha Hauer [not found] ` <20091001072934.GX27039-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2009-10-01 8:01 ` Richard Zhao 2009-10-01 8:01 ` Richard Zhao [not found] ` <4e090d470910010101r6839cc9ax4fe84f04a1afbb00-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2009-10-01 8:26 ` Sascha Hauer 2009-10-01 8:26 ` Sascha Hauer [not found] ` <20091001082610.GB27039-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2009-10-01 9:30 ` Richard Zhao 2009-10-01 9:30 ` Richard Zhao 2009-10-04 12:23 ` Richard Zhao 2009-10-01 7:26 ` [PATCH 2/4] i2c: imx: only imx1 needs disable delay Sascha Hauer 2009-10-01 7:26 ` Sascha Hauer 2009-10-01 7:52 ` Richard Zhao 2009-10-01 7:52 ` Richard Zhao [not found] ` <4e090d470910010052k37a0a4eep6d436e45e6524234-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2009-10-01 7:57 ` Sascha Hauer 2009-10-01 7:57 ` Sascha Hauer 2009-10-01 8:03 ` [PATCH 1/4] i2c: imx: check busy bit when START/STOP Richard Zhao 2009-10-01 8:03 ` Richard Zhao [not found] ` <4e090d470910010103o611d9fb2t3acf93632216fc88-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2009-10-01 8:38 ` Sascha Hauer 2009-10-01 8:38 ` Sascha Hauer [not found] ` <20091001083831.GD27039-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2009-10-01 9:11 ` Richard Zhao 2009-10-01 9:11 ` Richard Zhao [not found] ` <4e090d470910010211k4ce78763i1a5163ec6ea57fe8-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2009-10-01 9:52 ` Sascha Hauer [this message] 2009-10-01 9:52 ` Sascha Hauer [not found] ` <20091001095239.GE27039-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2009-10-01 14:54 ` Richard Zhao 2009-10-01 14:54 ` Richard Zhao [not found] ` <4e090d470910010754r1ebc4455u6220ccfd803491b0-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2009-10-01 16:37 ` Wolfram Sang 2009-10-01 16:37 ` Wolfram Sang [not found] ` <20091001163753.GA20103-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2009-10-02 0:57 ` Richard Zhao 2009-10-02 0:57 ` Richard Zhao [not found] ` <4e090d470910011757g261c693ehdca40ce43ebee2ec-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2009-10-02 7:26 ` Sascha Hauer 2009-10-02 7:26 ` Sascha Hauer [not found] ` <20091002072643.GH27039-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2009-10-02 8:17 ` Richard Zhao 2009-10-02 8:17 ` Richard Zhao [not found] ` <4e090d470910020117w620fda4cta7b26b912d01bc24-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2009-10-02 14:11 ` Wolfram Sang 2009-10-02 14:11 ` Wolfram Sang 2009-10-04 12:22 ` Richard Zhao -- strict thread matches above, loose matches on Subject: below -- 2009-09-30 5:55 Richard Zhao
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=20091001095239.GE27039@pengutronix.de \ --to=s.hauer-bicnvbalz9megne8c9+irq@public.gmane.org \ --cc=kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \ --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \ --cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=linuxzsc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \ --cc=w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@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: linkBe 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.