diff options
Diffstat (limited to 'arch/arm/cpu/armv7/exynos/pinmux.c')
| -rw-r--r-- | arch/arm/cpu/armv7/exynos/pinmux.c | 62 | 
1 files changed, 62 insertions, 0 deletions
| diff --git a/arch/arm/cpu/armv7/exynos/pinmux.c b/arch/arm/cpu/armv7/exynos/pinmux.c index f02f441a8..b47996574 100644 --- a/arch/arm/cpu/armv7/exynos/pinmux.c +++ b/arch/arm/cpu/armv7/exynos/pinmux.c @@ -385,6 +385,68 @@ static int exynos4_pinmux_config(int peripheral, int flags)  	return 0;  } +static void exynos4_i2c_config(int peripheral, int flags) +{ +	struct exynos4_gpio_part1 *gpio1 = +		(struct exynos4_gpio_part1 *) samsung_get_base_gpio_part1(); + +	switch (peripheral) { +	case PERIPH_ID_I2C0: +		s5p_gpio_cfg_pin(&gpio1->d1, 0, GPIO_FUNC(0x2)); +		s5p_gpio_cfg_pin(&gpio1->d1, 1, GPIO_FUNC(0x2)); +		break; +	case PERIPH_ID_I2C1: +		s5p_gpio_cfg_pin(&gpio1->d1, 2, GPIO_FUNC(0x2)); +		s5p_gpio_cfg_pin(&gpio1->d1, 3, GPIO_FUNC(0x2)); +		break; +	case PERIPH_ID_I2C2: +		s5p_gpio_cfg_pin(&gpio1->a0, 6, GPIO_FUNC(0x3)); +		s5p_gpio_cfg_pin(&gpio1->a0, 7, GPIO_FUNC(0x3)); +		break; +	case PERIPH_ID_I2C3: +		s5p_gpio_cfg_pin(&gpio1->a1, 2, GPIO_FUNC(0x3)); +		s5p_gpio_cfg_pin(&gpio1->a1, 3, GPIO_FUNC(0x3)); +		break; +	case PERIPH_ID_I2C4: +		s5p_gpio_cfg_pin(&gpio1->b, 2, GPIO_FUNC(0x3)); +		s5p_gpio_cfg_pin(&gpio1->b, 3, GPIO_FUNC(0x3)); +		break; +	case PERIPH_ID_I2C5: +		s5p_gpio_cfg_pin(&gpio1->b, 6, GPIO_FUNC(0x3)); +		s5p_gpio_cfg_pin(&gpio1->b, 7, GPIO_FUNC(0x3)); +		break; +	case PERIPH_ID_I2C6: +		s5p_gpio_cfg_pin(&gpio1->c1, 3, GPIO_FUNC(0x4)); +		s5p_gpio_cfg_pin(&gpio1->c1, 4, GPIO_FUNC(0x4)); +		break; +	case PERIPH_ID_I2C7: +		s5p_gpio_cfg_pin(&gpio1->d0, 2, GPIO_FUNC(0x3)); +		s5p_gpio_cfg_pin(&gpio1->d0, 3, GPIO_FUNC(0x3)); +		break; +	} +} + +static int exynos4_pinmux_config(int peripheral, int flags) +{ +	switch (peripheral) { +	case PERIPH_ID_I2C0: +	case PERIPH_ID_I2C1: +	case PERIPH_ID_I2C2: +	case PERIPH_ID_I2C3: +	case PERIPH_ID_I2C4: +	case PERIPH_ID_I2C5: +	case PERIPH_ID_I2C6: +	case PERIPH_ID_I2C7: +		exynos4_i2c_config(peripheral, flags); +		break; +	default: +		debug("%s: invalid peripheral %d", __func__, peripheral); +		return -1; +	} + +	return 0; +} +  int exynos_pinmux_config(int peripheral, int flags)  {  	if (cpu_is_exynos5()) |