drivers:i2c: Modify I2C driver for Exynos4
This patch modifies the S3C i2c driver to support both Exynos4 and Exynos5 Signed-off-by: Piotr Wilczek <p.wilczek@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> CC: Minkyu Kang <mk7.kang@samsung.com>
This commit is contained in:
parent
89bd58a1e9
commit
c86d9ed382
drivers/i2c
|
@ -27,7 +27,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#ifdef CONFIG_EXYNOS5
|
#if (defined CONFIG_EXYNOS4 || defined CONFIG_EXYNOS5)
|
||||||
#include <asm/arch/clk.h>
|
#include <asm/arch/clk.h>
|
||||||
#include <asm/arch/cpu.h>
|
#include <asm/arch/cpu.h>
|
||||||
#else
|
#else
|
||||||
|
@ -62,7 +62,7 @@
|
||||||
|
|
||||||
static unsigned int g_current_bus; /* Stores Current I2C Bus */
|
static unsigned int g_current_bus; /* Stores Current I2C Bus */
|
||||||
|
|
||||||
#ifndef CONFIG_EXYNOS5
|
#if !(defined CONFIG_EXYNOS4 || defined CONFIG_EXYNOS5)
|
||||||
static int GetI2CSDA(void)
|
static int GetI2CSDA(void)
|
||||||
{
|
{
|
||||||
struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio();
|
struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio();
|
||||||
|
@ -121,7 +121,12 @@ static void ReadWriteByte(struct s3c24x0_i2c *i2c)
|
||||||
|
|
||||||
static struct s3c24x0_i2c *get_base_i2c(void)
|
static struct s3c24x0_i2c *get_base_i2c(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_EXYNOS5
|
#ifdef CONFIG_EXYNOS4
|
||||||
|
struct s3c24x0_i2c *i2c = (struct s3c24x0_i2c *)(samsung_get_base_i2c()
|
||||||
|
+ (EXYNOS4_I2C_SPACING
|
||||||
|
* g_current_bus));
|
||||||
|
return i2c;
|
||||||
|
#elif defined CONFIG_EXYNOS5
|
||||||
struct s3c24x0_i2c *i2c = (struct s3c24x0_i2c *)(samsung_get_base_i2c()
|
struct s3c24x0_i2c *i2c = (struct s3c24x0_i2c *)(samsung_get_base_i2c()
|
||||||
+ (EXYNOS5_I2C_SPACING
|
+ (EXYNOS5_I2C_SPACING
|
||||||
* g_current_bus));
|
* g_current_bus));
|
||||||
|
@ -134,7 +139,7 @@ static struct s3c24x0_i2c *get_base_i2c(void)
|
||||||
static void i2c_ch_init(struct s3c24x0_i2c *i2c, int speed, int slaveadd)
|
static void i2c_ch_init(struct s3c24x0_i2c *i2c, int speed, int slaveadd)
|
||||||
{
|
{
|
||||||
ulong freq, pres = 16, div;
|
ulong freq, pres = 16, div;
|
||||||
#ifdef CONFIG_EXYNOS5
|
#if (defined CONFIG_EXYNOS4 || defined CONFIG_EXYNOS5)
|
||||||
freq = get_i2c_clk();
|
freq = get_i2c_clk();
|
||||||
#else
|
#else
|
||||||
freq = get_PCLK();
|
freq = get_PCLK();
|
||||||
|
@ -188,7 +193,7 @@ unsigned int i2c_get_bus_num(void)
|
||||||
void i2c_init(int speed, int slaveadd)
|
void i2c_init(int speed, int slaveadd)
|
||||||
{
|
{
|
||||||
struct s3c24x0_i2c *i2c;
|
struct s3c24x0_i2c *i2c;
|
||||||
#ifndef CONFIG_EXYNOS5
|
#if !(defined CONFIG_EXYNOS4 || defined CONFIG_EXYNOS5)
|
||||||
struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio();
|
struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio();
|
||||||
#endif
|
#endif
|
||||||
int i;
|
int i;
|
||||||
|
@ -204,7 +209,7 @@ void i2c_init(int speed, int slaveadd)
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_EXYNOS5
|
#if !(defined CONFIG_EXYNOS4 || defined CONFIG_EXYNOS5)
|
||||||
if ((readl(&i2c->iicstat) & I2CSTAT_BSY) || GetI2CSDA() == 0) {
|
if ((readl(&i2c->iicstat) & I2CSTAT_BSY) || GetI2CSDA() == 0) {
|
||||||
#ifdef CONFIG_S3C2410
|
#ifdef CONFIG_S3C2410
|
||||||
ulong old_gpecon = readl(&gpio->gpecon);
|
ulong old_gpecon = readl(&gpio->gpecon);
|
||||||
|
@ -248,7 +253,7 @@ void i2c_init(int speed, int slaveadd)
|
||||||
writel(old_gpecon, &gpio->pgcon);
|
writel(old_gpecon, &gpio->pgcon);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif /* #ifndef CONFIG_EXYNOS5 */
|
#endif /* #if !(defined CONFIG_EXYNOS4 || defined CONFIG_EXYNOS5) */
|
||||||
i2c_ch_init(i2c, speed, slaveadd);
|
i2c_ch_init(i2c, speed, slaveadd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue