diff --git a/kernel/spec-i2c.c b/kernel/spec-i2c.c index e2aedb59a94c2278c1153a06408d163792a16e69..9a25aa938be0d9336eac5b7068254998c2d63f91 100644 --- a/kernel/spec-i2c.c +++ b/kernel/spec-i2c.c @@ -15,6 +15,7 @@ #include <linux/time.h> #include <linux/pci.h> #include <linux/slab.h> +#include <linux/delay.h> #include <linux/fmc.h> #include "spec.h" #include "hw/wrc_syscon_regs.h" @@ -45,6 +46,7 @@ static void set_sda(struct fmc_device *fmc, int val) fmc_writel(fmc, SYSC_GPSR_FMC_SDA, SYSC_REG_GPSR); else fmc_writel(fmc, SYSC_GPCR_FMC_SDA, SYSC_REG_GPCR); + ndelay(1250); /* 400kHz -> 2.5us/loop */ } static void set_scl(struct fmc_device *fmc, int val) @@ -53,6 +55,7 @@ static void set_scl(struct fmc_device *fmc, int val) fmc_writel(fmc, SYSC_GPSR_FMC_SCL, SYSC_REG_GPSR); else fmc_writel(fmc, SYSC_GPCR_FMC_SCL, SYSC_REG_GPCR); + ndelay(1250); /* 400kHz -> 2.5us/loop */ } static int get_sda(struct fmc_device *fmc)