From: Wei Ni <[email protected]>
*** BLURB HERE ***
Wei Ni (2):
i2c: tegra: Retry transfer when unexpected/no_ack status is detected
i2c: tegra: use new i2c slave controller
drivers/i2c/busses/i2c-tegra.c | 57 +++++++++++++++++++++++++++++++++++++--
include/linux/i2c-tegra.h | 3 ++
2 files changed, 57 insertions(+), 3 deletions(-)
From: Wei Ni <[email protected]>
Sometimes unexpected status like I2C busy status, Tx FIFO interrupted
and wait on Rx data etc is seen. Add a code to detect such conditions
and return -EAGAIN from driver. This will cause the i2c-core to retry
the transmission as per the retry count and time-out specified by the
platform data of the adapter.
And for no_ack status, also retrun -EAGAIN to retry.
Signed-off-by: Wei Ni <[email protected]>
---
drivers/i2c/busses/i2c-tegra.c | 29 ++++++++++++++++++++++++++---
include/linux/i2c-tegra.h | 2 ++
2 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
index b4ab39b..4f5f7f2 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -31,12 +31,15 @@
#include <mach/clk.h>
-#define TEGRA_I2C_TIMEOUT (msecs_to_jiffies(1000))
-#define BYTES_PER_FIFO_WORD 4
+#define TEGRA_I2C_TIMEOUT (msecs_to_jiffies(1000))
+#define TEGRA_I2C_RETRIES 3
+#define BYTES_PER_FIFO_WORD 4
#define I2C_CNFG 0x000
#define I2C_CNFG_PACKET_MODE_EN (1<<10)
#define I2C_CNFG_NEW_MASTER_FSM (1<<11)
+#define I2C_STATUS 0x01C
+#define I2C_STATUS_BUSY (1<<8)
#define I2C_SL_CNFG 0x020
#define I2C_SL_CNFG_NEWSL (1<<2)
#define I2C_SL_ADDR1 0x02c
@@ -77,6 +80,7 @@
#define I2C_ERR_NONE 0x00
#define I2C_ERR_NO_ACK 0x01
#define I2C_ERR_ARBITRATION_LOST 0x02
+#define I2C_ERR_UNEXPECTED_STATUS 0x08
#define PACKET_HEADER0_HEADER_SIZE_SHIFT 28
#define PACKET_HEADER0_PACKET_ID_SHIFT 16
@@ -363,6 +367,15 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id)
goto err;
}
+ if (unlikely((i2c_readl(i2c_dev, I2C_STATUS) & I2C_STATUS_BUSY)
+ && (status == I2C_INT_TX_FIFO_DATA_REQ)
+ && i2c_dev->msg_read
+ && i2c_dev->msg_buf_remaining)) {
+ i2c_dev->msg_err |= I2C_ERR_UNEXPECTED_STATUS;
+ complete(&i2c_dev->msg_complete);
+ goto err;
+ }
+
if (i2c_dev->msg_read && (status & I2C_INT_RX_FIFO_DATA_REQ)) {
if (i2c_dev->msg_buf_remaining)
tegra_i2c_empty_rx_fifo(i2c_dev);
@@ -466,9 +479,12 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev,
if (i2c_dev->msg_err == I2C_ERR_NO_ACK) {
if (msg->flags & I2C_M_IGNORE_NAK)
return 0;
- return -EREMOTEIO;
+ return -EAGAIN;
}
+ if (i2c_dev->msg_err & I2C_ERR_UNEXPECTED_STATUS)
+ return -EAGAIN;
+
return -EIO;
}
@@ -598,6 +614,13 @@ static int tegra_i2c_probe(struct platform_device *pdev)
i2c_dev->adapter.algo = &tegra_i2c_algo;
i2c_dev->adapter.dev.parent = &pdev->dev;
i2c_dev->adapter.nr = pdev->id;
+ if (pdata->retries)
+ i2c_dev->adapter.retries = pdata->retries;
+ else
+ i2c_dev->adapter.retries = TEGRA_I2C_RETRIES;
+
+ if (pdata->timeout)
+ i2c_dev->adapter.timeout = pdata->timeout;
ret = i2c_add_numbered_adapter(&i2c_dev->adapter);
if (ret) {
diff --git a/include/linux/i2c-tegra.h b/include/linux/i2c-tegra.h
index 9c85da4..8ee5b37 100644
--- a/include/linux/i2c-tegra.h
+++ b/include/linux/i2c-tegra.h
@@ -20,6 +20,8 @@
struct tegra_i2c_platform_data {
unsigned long bus_clk_rate;
+ int retries;
+ int timeout; /* in jiffies */
};
#endif /* _LINUX_I2C_TEGRA_H */
--
1.7.0
From: Wei Ni <[email protected]>
tegra2 has an improved new i2c slave controller. This should be
used instead of the old i2c slave controller. With old i2c slave
controller, occasionally it generates spurious slave interrupts
causing disruptions in master i2c transfers.
Signed-off-by: Wei Ni <[email protected]>
---
drivers/i2c/busses/i2c-tegra.c | 28 ++++++++++++++++++++++++++++
include/linux/i2c-tegra.h | 1 +
2 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
index 4f5f7f2..0742468 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -41,8 +41,10 @@
#define I2C_STATUS 0x01C
#define I2C_STATUS_BUSY (1<<8)
#define I2C_SL_CNFG 0x020
+#define I2C_SL_CNFG_NACK (1<<1)
#define I2C_SL_CNFG_NEWSL (1<<2)
#define I2C_SL_ADDR1 0x02c
+#define I2C_SL_ADDR2 0x030
#define I2C_TX_FIFO 0x050
#define I2C_RX_FIFO 0x054
#define I2C_PACKET_TRANSFER_STATUS 0x058
@@ -97,6 +99,9 @@
#define I2C_HEADER_MASTER_ADDR_SHIFT 12
#define I2C_HEADER_SLAVE_ADDR_SHIFT 1
+#define SL_ADDR1(addr) (addr & 0xff)
+#define SL_ADDR2(addr) ((addr >> 8) & 0xff)
+
/**
* struct tegra_i2c_dev - per device i2c context
* @dev: device reference for power management
@@ -126,6 +131,7 @@ struct tegra_i2c_dev {
int cont_id;
int irq;
int is_dvc;
+ bool is_slave;
struct completion msg_complete;
int msg_err;
u8 *msg_buf;
@@ -133,6 +139,7 @@ struct tegra_i2c_dev {
int msg_read;
unsigned long bus_clk_rate;
bool is_suspended;
+ u16 slave_addr;
};
static void dvc_writel(struct tegra_i2c_dev *i2c_dev, u32 val, unsigned long reg)
@@ -315,6 +322,20 @@ static void tegra_dvc_init(struct tegra_i2c_dev *i2c_dev)
dvc_writel(i2c_dev, val, DVC_CTRL_REG1);
}
+static void tegra_i2c_slave_init(struct tegra_i2c_dev *i2c_dev)
+{
+ u32 val = I2C_SL_CNFG_NEWSL | I2C_SL_CNFG_NACK;
+
+ i2c_writel(i2c_dev, val, I2C_SL_CNFG);
+
+ if (i2c_dev->slave_addr) {
+ u16 addr = i2c_dev->slave_addr;
+
+ i2c_writel(i2c_dev, SL_ADDR1(addr), I2C_SL_ADDR1);
+ i2c_writel(i2c_dev, SL_ADDR2(addr), I2C_SL_ADDR2);
+ }
+}
+
static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev)
{
u32 val;
@@ -338,6 +359,9 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev)
0 << I2C_FIFO_CONTROL_RX_TRIG_SHIFT;
i2c_writel(i2c_dev, val, I2C_FIFO_CONTROL);
+ if (i2c_dev->is_slave)
+ tegra_i2c_slave_init(i2c_dev);
+
if (tegra_i2c_flush_fifos(i2c_dev))
err = -ETIMEDOUT;
@@ -585,11 +609,15 @@ static int tegra_i2c_probe(struct platform_device *pdev)
i2c_dev->cont_id = pdev->id;
i2c_dev->dev = &pdev->dev;
i2c_dev->bus_clk_rate = pdata ? pdata->bus_clk_rate : 100000;
+ i2c_dev->slave_addr = pdata->slave_addr;
if (pdev->id == 3)
i2c_dev->is_dvc = 1;
init_completion(&i2c_dev->msg_complete);
+ if (irq == INT_I2C || irq == INT_I2C2 || irq == INT_I2C3)
+ i2c_dev->is_slave = true;
+
platform_set_drvdata(pdev, i2c_dev);
ret = tegra_i2c_init(i2c_dev);
diff --git a/include/linux/i2c-tegra.h b/include/linux/i2c-tegra.h
index 8ee5b37..c15c166 100644
--- a/include/linux/i2c-tegra.h
+++ b/include/linux/i2c-tegra.h
@@ -22,6 +22,7 @@ struct tegra_i2c_platform_data {
unsigned long bus_clk_rate;
int retries;
int timeout; /* in jiffies */
+ u16 slave_addr;
};
#endif /* _LINUX_I2C_TEGRA_H */
--
1.7.0
Hi, all
Could anyone review these changes?
Thanks
Wei.
-----Original Message-----
From: Wei Ni
Sent: Wednesday, April 20, 2011 8:09 PM
To: [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]
Cc: Wei Ni
Subject: [PATCH 0/2] i2c: tegra: add some new features for tegra i2c
From: Wei Ni <[email protected]>
*** BLURB HERE ***
Wei Ni (2):
i2c: tegra: Retry transfer when unexpected/no_ack status is detected
i2c: tegra: use new i2c slave controller
drivers/i2c/busses/i2c-tegra.c | 57 +++++++++++++++++++++++++++++++++++++--
include/linux/i2c-tegra.h | 3 ++
2 files changed, 57 insertions(+), 3 deletions(-)
Wei Ni wrote at Wednesday, April 27, 2011 4:26 AM:
> Hi, all
> Could anyone review these changes?
Wei,
It looks like some of the patches I recently posted address the same
issues as the patches you had already posted. Sorry for the potential
conflicts.
Can you please take a look at the patches I posted and comment on which
of those are still relevant given your patches. Even for the cases where
we both posted patches to address the same issue (e.g. use new slave
mode), there are differences in the patches. I simply took the changes
from the chromeos-2.6.37 kernel and cherry-picked them into the mainline
kernel. Are the changes you posted re-written to address issues that
weren't solved in the ChromeOS kernel?
Thanks for any feedback on this.
>
> Thanks
> Wei.
>
> -----Original Message-----
> From: Wei Ni
> Sent: Wednesday, April 20, 2011 8:09 PM
> To: [email protected]; [email protected];
> [email protected]; [email protected]; linux-
> [email protected]; [email protected]
> Cc: Wei Ni
> Subject: [PATCH 0/2] i2c: tegra: add some new features for tegra i2c
>
> From: Wei Ni <[email protected]>
>
> *** BLURB HERE ***
>
> Wei Ni (2):
> i2c: tegra: Retry transfer when unexpected/no_ack status is detected
> i2c: tegra: use new i2c slave controller
>
> drivers/i2c/busses/i2c-tegra.c | 57
> +++++++++++++++++++++++++++++++++++++--
> include/linux/i2c-tegra.h | 3 ++
> 2 files changed, 57 insertions(+), 3 deletions(-)
--
nvpublic
Hi, Stephen
I think your patches address the different issues with my patches.
My patches are used for retry transfer and new slave controller.
Thanks
Wei.
-----Original Message-----
From: Stephen Warren
Sent: Thursday, April 28, 2011 12:29 AM
To: Wei Ni
Cc: [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; Olof Johansson ([email protected])
Subject: RE: [PATCH 0/2] i2c: tegra: add some new features for tegra i2c
Wei Ni wrote at Wednesday, April 27, 2011 4:26 AM:
> Hi, all
> Could anyone review these changes?
Wei,
It looks like some of the patches I recently posted address the same
issues as the patches you had already posted. Sorry for the potential
conflicts.
Can you please take a look at the patches I posted and comment on which
of those are still relevant given your patches. Even for the cases where
we both posted patches to address the same issue (e.g. use new slave
mode), there are differences in the patches. I simply took the changes
from the chromeos-2.6.37 kernel and cherry-picked them into the mainline
kernel. Are the changes you posted re-written to address issues that
weren't solved in the ChromeOS kernel?
Thanks for any feedback on this.
>
> Thanks
> Wei.
>
> -----Original Message-----
> From: Wei Ni
> Sent: Wednesday, April 20, 2011 8:09 PM
> To: [email protected]; [email protected];
> [email protected]; [email protected]; linux-
> [email protected]; [email protected]
> Cc: Wei Ni
> Subject: [PATCH 0/2] i2c: tegra: add some new features for tegra i2c
>
> From: Wei Ni <[email protected]>
>
> *** BLURB HERE ***
>
> Wei Ni (2):
> i2c: tegra: Retry transfer when unexpected/no_ack status is detected
> i2c: tegra: use new i2c slave controller
>
> drivers/i2c/busses/i2c-tegra.c | 57
> +++++++++++++++++++++++++++++++++++++--
> include/linux/i2c-tegra.h | 3 ++
> 2 files changed, 57 insertions(+), 3 deletions(-)
--
nvpublic
Wei Ni wrote at Friday, April 29, 2011 12:08 AM:
> Stephen Warren wrote at Thursday, April 28, 2011 12:29 AM:
> >
> > Wei Ni wrote at Wednesday, April 27, 2011 4:26 AM:
> > > Hi, all
> > > Could anyone review these changes?
> >
> > Wei,
> >
> > It looks like some of the patches I recently posted address the same
> > issues as the patches you had already posted. Sorry for the potential
> > conflicts.
>
> Hi, Stephen
> I think your patches address the different issues with my patches.
> My patches are used for retry transfer and new slave controller.
Wei, aren't the following two patches basically the same thing,
except that yours also sets the slave address register, and is a bit
more wordy:
http://www.spinics.net/lists/linux-i2c/msg05464.html
http://www.spinics.net/lists/linux-i2c/msg05437.html
Upon further inspection, I don't think any of the other patches I
posted conflict with the other patch you posted.
> > Can you please take a look at the patches I posted and comment on which
> > of those are still relevant given your patches. Even for the cases where
> > we both posted patches to address the same issue (e.g. use new slave
> > mode), there are differences in the patches. I simply took the changes
> > from the chromeos-2.6.37 kernel and cherry-picked them into the mainline
> > kernel. Are the changes you posted re-written to address issues that
> > weren't solved in the ChromeOS kernel?
> >
> > Thanks for any feedback on this.
Wei Ni wrote at Wednesday, April 20, 2011 8:09 PM:
> From: Wei Ni <[email protected]>
>
> *** BLURB HERE ***
>
> Wei Ni (2):
> i2c: tegra: Retry transfer when unexpected/no_ack status is detected
> i2c: tegra: use new i2c slave controller
>
> drivers/i2c/busses/i2c-tegra.c | 57 +++++++++++++++++++++++++++++++++++++--
> include/linux/i2c-tegra.h | 3 ++
> 2 files changed, 57 insertions(+), 3 deletions(-)
--
nvpublic
Hi, Stephen
I think if doesn't need to apply the slave address codes, we can use your patch.
Thanks
Wei.
-----Original Message-----
From: Stephen Warren
Sent: Friday, April 29, 2011 11:20 PM
To: Wei Ni
Cc: [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; Olof Johansson ([email protected])
Subject: RE: [PATCH 0/2] i2c: tegra: add some new features for tegra i2c
Wei Ni wrote at Friday, April 29, 2011 12:08 AM:
> Stephen Warren wrote at Thursday, April 28, 2011 12:29 AM:
> >
> > Wei Ni wrote at Wednesday, April 27, 2011 4:26 AM:
> > > Hi, all
> > > Could anyone review these changes?
> >
> > Wei,
> >
> > It looks like some of the patches I recently posted address the same
> > issues as the patches you had already posted. Sorry for the potential
> > conflicts.
>
> Hi, Stephen
> I think your patches address the different issues with my patches.
> My patches are used for retry transfer and new slave controller.
Wei, aren't the following two patches basically the same thing,
except that yours also sets the slave address register, and is a bit
more wordy:
http://www.spinics.net/lists/linux-i2c/msg05464.html
http://www.spinics.net/lists/linux-i2c/msg05437.html
Upon further inspection, I don't think any of the other patches I
posted conflict with the other patch you posted.
> > Can you please take a look at the patches I posted and comment on which
> > of those are still relevant given your patches. Even for the cases where
> > we both posted patches to address the same issue (e.g. use new slave
> > mode), there are differences in the patches. I simply took the changes
> > from the chromeos-2.6.37 kernel and cherry-picked them into the mainline
> > kernel. Are the changes you posted re-written to address issues that
> > weren't solved in the ChromeOS kernel?
> >
> > Thanks for any feedback on this.
Wei Ni wrote at Wednesday, April 20, 2011 8:09 PM:
> From: Wei Ni <[email protected]>
>
> *** BLURB HERE ***
>
> Wei Ni (2):
> i2c: tegra: Retry transfer when unexpected/no_ack status is detected
> i2c: tegra: use new i2c slave controller
>
> drivers/i2c/busses/i2c-tegra.c | 57 +++++++++++++++++++++++++++++++++++++--
> include/linux/i2c-tegra.h | 3 ++
> 2 files changed, 57 insertions(+), 3 deletions(-)
--
nvpublic
Wei, Stephen,
> Hi, Stephen
> I think if doesn't need to apply the slave address codes, we can use your
> patch.
we use the slave address as part of our nvec mfd driver in the ac100 project, so
it would be nice to have this merged. Is there any other implemenation for a
driver which actually use "is_slave"? (beside the one from the older android
kernels)?
Regards,
Marc
> Thanks
> Wei.
>
> -----Original Message-----
> From: Stephen Warren
> Sent: Friday, April 29, 2011 11:20 PM
> To: Wei Ni
> Cc: [email protected]; [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected]; Olof Johansson
> ([email protected]) Subject: RE: [PATCH 0/2] i2c: tegra: add some new
> features for tegra i2c
>
> Wei Ni wrote at Friday, April 29, 2011 12:08 AM:
> > Stephen Warren wrote at Thursday, April 28, 2011 12:29 AM:
> > > Wei Ni wrote at Wednesday, April 27, 2011 4:26 AM:
> > > > Hi, all
> > > > Could anyone review these changes?
> > >
> > > Wei,
> > >
> > > It looks like some of the patches I recently posted address the same
> > > issues as the patches you had already posted. Sorry for the potential
> > > conflicts.
> >
> > Hi, Stephen
> > I think your patches address the different issues with my patches.
> > My patches are used for retry transfer and new slave controller.
>
> Wei, aren't the following two patches basically the same thing,
> except that yours also sets the slave address register, and is a bit
> more wordy:
>
> http://www.spinics.net/lists/linux-i2c/msg05464.html
> http://www.spinics.net/lists/linux-i2c/msg05437.html
>
> Upon further inspection, I don't think any of the other patches I
> posted conflict with the other patch you posted.
>
> > > Can you please take a look at the patches I posted and comment on which
> > > of those are still relevant given your patches. Even for the cases
> > > where we both posted patches to address the same issue (e.g. use new
> > > slave mode), there are differences in the patches. I simply took the
> > > changes from the chromeos-2.6.37 kernel and cherry-picked them into
> > > the mainline kernel. Are the changes you posted re-written to address
> > > issues that weren't solved in the ChromeOS kernel?
> > >
> > > Thanks for any feedback on this.
>
> Wei Ni wrote at Wednesday, April 20, 2011 8:09 PM:
> > From: Wei Ni <[email protected]>
> >
> > *** BLURB HERE ***
> >
> > Wei Ni (2):
> > i2c: tegra: Retry transfer when unexpected/no_ack status is detected
> > i2c: tegra: use new i2c slave controller
> >
> > drivers/i2c/busses/i2c-tegra.c | 57
> > +++++++++++++++++++++++++++++++++++++-- include/linux/i2c-tegra.h
> > | 3 ++
> > 2 files changed, 57 insertions(+), 3 deletions(-)
--
Dipl. Phys. Marc Dietrich
Institut f?r Angewandte Physik
- AG Kleink?hler -
Justus-Liebig-Universit?t Gie?en
Heinrich-Buff-Ring 16
D-35392 Gie?en
Germany
Tel. +49 641 99 33462
Fax. +49 641 99 33409
email: [email protected]
www: http://www.uni-giessen.de/cms/iap/
Hi, Marc
I think no other implementation.
Thanks
Wei.
-----Original Message-----
From: Marc Dietrich [mailto:[email protected]]
Sent: Wednesday, May 04, 2011 4:28 PM
To: Wei Ni
Cc: Stephen Warren; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; Olof Johansson ([email protected])
Subject: Re: [PATCH 0/2] i2c: tegra: add some new features for tegra i2c
Wei, Stephen,
> Hi, Stephen
> I think if doesn't need to apply the slave address codes, we can use your
> patch.
we use the slave address as part of our nvec mfd driver in the ac100 project, so
it would be nice to have this merged. Is there any other implemenation for a
driver which actually use "is_slave"? (beside the one from the older android
kernels)?
Regards,
Marc
> Thanks
> Wei.
>
> -----Original Message-----
> From: Stephen Warren
> Sent: Friday, April 29, 2011 11:20 PM
> To: Wei Ni
> Cc: [email protected]; [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected]; Olof Johansson
> ([email protected]) Subject: RE: [PATCH 0/2] i2c: tegra: add some new
> features for tegra i2c
>
> Wei Ni wrote at Friday, April 29, 2011 12:08 AM:
> > Stephen Warren wrote at Thursday, April 28, 2011 12:29 AM:
> > > Wei Ni wrote at Wednesday, April 27, 2011 4:26 AM:
> > > > Hi, all
> > > > Could anyone review these changes?
> > >
> > > Wei,
> > >
> > > It looks like some of the patches I recently posted address the same
> > > issues as the patches you had already posted. Sorry for the potential
> > > conflicts.
> >
> > Hi, Stephen
> > I think your patches address the different issues with my patches.
> > My patches are used for retry transfer and new slave controller.
>
> Wei, aren't the following two patches basically the same thing,
> except that yours also sets the slave address register, and is a bit
> more wordy:
>
> http://www.spinics.net/lists/linux-i2c/msg05464.html
> http://www.spinics.net/lists/linux-i2c/msg05437.html
>
> Upon further inspection, I don't think any of the other patches I
> posted conflict with the other patch you posted.
>
> > > Can you please take a look at the patches I posted and comment on which
> > > of those are still relevant given your patches. Even for the cases
> > > where we both posted patches to address the same issue (e.g. use new
> > > slave mode), there are differences in the patches. I simply took the
> > > changes from the chromeos-2.6.37 kernel and cherry-picked them into
> > > the mainline kernel. Are the changes you posted re-written to address
> > > issues that weren't solved in the ChromeOS kernel?
> > >
> > > Thanks for any feedback on this.
>
> Wei Ni wrote at Wednesday, April 20, 2011 8:09 PM:
> > From: Wei Ni <[email protected]>
> >
> > *** BLURB HERE ***
> >
> > Wei Ni (2):
> > i2c: tegra: Retry transfer when unexpected/no_ack status is detected
> > i2c: tegra: use new i2c slave controller
> >
> > drivers/i2c/busses/i2c-tegra.c | 57
> > +++++++++++++++++++++++++++++++++++++-- include/linux/i2c-tegra.h
> > | 3 ++
> > 2 files changed, 57 insertions(+), 3 deletions(-)
--
Dipl. Phys. Marc Dietrich
Institut f?r Angewandte Physik
- AG Kleink?hler -
Justus-Liebig-Universit?t Gie?en
Heinrich-Buff-Ring 16
D-35392 Gie?en
Germany
Tel. +49 641 99 33462
Fax. +49 641 99 33409
email: [email protected]
www: http://www.uni-giessen.de/cms/iap/