mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
gpio:fix: Proper handling of GPIO subsystem parts at Samsung devices
Now proper GPIO parts numbering is handled at Samsung devices. This fix is necessary for code using GPIO located at other banks than first. Test HW: - Exynos4210 - Trats - S5PC110 - goni Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
This commit is contained in:
parent
ccfa398547
commit
822593f028
3 changed files with 29 additions and 3 deletions
|
@ -207,6 +207,25 @@ static inline unsigned int s5p_gpio_base(int nr)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline unsigned int s5p_gpio_part_max(int nr)
|
||||
{
|
||||
if (cpu_is_exynos5()) {
|
||||
if (nr < EXYNOS5_GPIO_PART1_MAX)
|
||||
return 0;
|
||||
else if (nr < EXYNOS5_GPIO_PART2_MAX)
|
||||
return EXYNOS5_GPIO_PART1_MAX;
|
||||
else
|
||||
return EXYNOS5_GPIO_PART2_MAX;
|
||||
|
||||
} else if (cpu_is_exynos4()) {
|
||||
if (nr < EXYNOS4_GPIO_PART1_MAX)
|
||||
return 0;
|
||||
else
|
||||
return EXYNOS4_GPIO_PART1_MAX;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Pin configurations */
|
||||
|
|
|
@ -143,7 +143,12 @@ static inline unsigned int s5p_gpio_base(int nr)
|
|||
return S5PC110_GPIO_BASE;
|
||||
}
|
||||
|
||||
#define s5pc110_gpio_get_nr(bank, pin) \
|
||||
static inline unsigned int s5p_gpio_part_max(int nr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define s5pc110_gpio_get_nr(bank, pin) \
|
||||
((((((unsigned int)&(((struct s5pc110_gpio *)S5PC110_GPIO_BASE)->bank))\
|
||||
- S5PC110_GPIO_BASE) / sizeof(struct s5p_gpio_bank)) \
|
||||
* GPIO_PER_BANK) + pin)
|
||||
|
|
|
@ -144,9 +144,11 @@ void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode)
|
|||
|
||||
struct s5p_gpio_bank *s5p_gpio_get_bank(unsigned gpio)
|
||||
{
|
||||
int bank = gpio / GPIO_PER_BANK;
|
||||
bank *= sizeof(struct s5p_gpio_bank);
|
||||
int bank;
|
||||
unsigned g = gpio - s5p_gpio_part_max(gpio);
|
||||
|
||||
bank = g / GPIO_PER_BANK;
|
||||
bank *= sizeof(struct s5p_gpio_bank);
|
||||
return (struct s5p_gpio_bank *) (s5p_gpio_base(gpio) + bank);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue