|
@@ -247,180 +247,81 @@ void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode);
|
|
|
|
|
|
/* GPIO pins per bank */
|
|
|
#define GPIO_PER_BANK 8
|
|
|
-
|
|
|
-#define exynos4_gpio_part1_get_nr(bank, pin) \
|
|
|
- ((((((unsigned int) &(((struct exynos4_gpio_part1 *) \
|
|
|
- EXYNOS4_GPIO_PART1_BASE)->bank)) \
|
|
|
- - EXYNOS4_GPIO_PART1_BASE) / sizeof(struct s5p_gpio_bank)) \
|
|
|
- * GPIO_PER_BANK) + pin)
|
|
|
-
|
|
|
-#define EXYNOS4_GPIO_PART1_MAX ((sizeof(struct exynos4_gpio_part1) \
|
|
|
- / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
|
|
|
-
|
|
|
-#define exynos4_gpio_part2_get_nr(bank, pin) \
|
|
|
- (((((((unsigned int) &(((struct exynos4_gpio_part2 *) \
|
|
|
- EXYNOS4_GPIO_PART2_BASE)->bank)) \
|
|
|
- - EXYNOS4_GPIO_PART2_BASE) / sizeof(struct s5p_gpio_bank)) \
|
|
|
- * GPIO_PER_BANK) + pin) + EXYNOS4_GPIO_PART1_MAX)
|
|
|
-
|
|
|
-#define exynos4x12_gpio_part1_get_nr(bank, pin) \
|
|
|
- ((((((unsigned int) &(((struct exynos4x12_gpio_part1 *) \
|
|
|
- EXYNOS4X12_GPIO_PART1_BASE)->bank)) \
|
|
|
- - EXYNOS4X12_GPIO_PART1_BASE) / sizeof(struct s5p_gpio_bank)) \
|
|
|
- * GPIO_PER_BANK) + pin)
|
|
|
-
|
|
|
-#define EXYNOS4X12_GPIO_PART1_MAX ((sizeof(struct exynos4x12_gpio_part1) \
|
|
|
- / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
|
|
|
-
|
|
|
-#define exynos4x12_gpio_part2_get_nr(bank, pin) \
|
|
|
- (((((((unsigned int) &(((struct exynos4x12_gpio_part2 *) \
|
|
|
- EXYNOS4X12_GPIO_PART2_BASE)->bank)) \
|
|
|
- - EXYNOS4X12_GPIO_PART2_BASE) / sizeof(struct s5p_gpio_bank)) \
|
|
|
- * GPIO_PER_BANK) + pin) + EXYNOS4X12_GPIO_PART1_MAX)
|
|
|
-
|
|
|
-#define EXYNOS4X12_GPIO_PART2_MAX ((sizeof(struct exynos4x12_gpio_part2) \
|
|
|
- / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
|
|
|
-
|
|
|
-#define exynos4x12_gpio_part3_get_nr(bank, pin) \
|
|
|
- (((((((unsigned int) &(((struct exynos4x12_gpio_part3 *) \
|
|
|
- EXYNOS4X12_GPIO_PART3_BASE)->bank)) \
|
|
|
- - EXYNOS4X12_GPIO_PART3_BASE) / sizeof(struct s5p_gpio_bank)) \
|
|
|
- * GPIO_PER_BANK) + pin) + EXYNOS4X12_GPIO_PART2_MAX)
|
|
|
-
|
|
|
-#define exynos5_gpio_part1_get_nr(bank, pin) \
|
|
|
- ((((((unsigned int) &(((struct exynos5_gpio_part1 *) \
|
|
|
- EXYNOS5_GPIO_PART1_BASE)->bank)) \
|
|
|
- - EXYNOS5_GPIO_PART1_BASE) / sizeof(struct s5p_gpio_bank)) \
|
|
|
- * GPIO_PER_BANK) + pin)
|
|
|
-
|
|
|
-#define EXYNOS5_GPIO_PART1_MAX ((sizeof(struct exynos5_gpio_part1) \
|
|
|
- / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
|
|
|
-
|
|
|
-#define exynos5_gpio_part2_get_nr(bank, pin) \
|
|
|
- (((((((unsigned int) &(((struct exynos5_gpio_part2 *) \
|
|
|
- EXYNOS5_GPIO_PART2_BASE)->bank)) \
|
|
|
- - EXYNOS5_GPIO_PART2_BASE) / sizeof(struct s5p_gpio_bank)) \
|
|
|
- * GPIO_PER_BANK) + pin) + EXYNOS5_GPIO_PART1_MAX)
|
|
|
-
|
|
|
-#define EXYNOS5_GPIO_PART2_MAX ((sizeof(struct exynos5_gpio_part2) \
|
|
|
- / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
|
|
|
-
|
|
|
-#define exynos5_gpio_part3_get_nr(bank, pin) \
|
|
|
- (((((((unsigned int) &(((struct exynos5_gpio_part3 *) \
|
|
|
- EXYNOS5_GPIO_PART3_BASE)->bank)) \
|
|
|
- - EXYNOS5_GPIO_PART3_BASE) / sizeof(struct s5p_gpio_bank)) \
|
|
|
- * GPIO_PER_BANK) + pin) + EXYNOS5_GPIO_PART2_MAX)
|
|
|
-
|
|
|
-
|
|
|
-/* EXYNOS5420 */
|
|
|
-#define exynos5420_gpio_part1_get_nr(bank, pin) \
|
|
|
- ((((((unsigned int) &(((struct exynos5420_gpio_part1 *)\
|
|
|
- EXYNOS5420_GPIO_PART1_BASE)->bank)) \
|
|
|
- - EXYNOS5420_GPIO_PART1_BASE) / sizeof(struct s5p_gpio_bank)) \
|
|
|
- * GPIO_PER_BANK) + pin)
|
|
|
-
|
|
|
-#define EXYNOS5420_GPIO_PART1_MAX ((sizeof(struct exynos5420_gpio_part1) \
|
|
|
- / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
|
|
|
-
|
|
|
-#define exynos5420_gpio_part2_get_nr(bank, pin) \
|
|
|
- (((((((unsigned int) &(((struct exynos5420_gpio_part2 *)\
|
|
|
- EXYNOS5420_GPIO_PART2_BASE)->bank)) \
|
|
|
- - EXYNOS5420_GPIO_PART2_BASE) / sizeof(struct s5p_gpio_bank)) \
|
|
|
- * GPIO_PER_BANK) + pin) + EXYNOS5420_GPIO_PART1_MAX)
|
|
|
-
|
|
|
-#define EXYNOS5420_GPIO_PART2_MAX ((sizeof(struct exynos5420_gpio_part2) \
|
|
|
- / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
|
|
|
-
|
|
|
-#define exynos5420_gpio_part3_get_nr(bank, pin) \
|
|
|
- (((((((unsigned int) &(((struct exynos5420_gpio_part3 *)\
|
|
|
- EXYNOS5420_GPIO_PART3_BASE)->bank)) \
|
|
|
- - EXYNOS5420_GPIO_PART3_BASE) / sizeof(struct s5p_gpio_bank)) \
|
|
|
- * GPIO_PER_BANK) + pin) + EXYNOS5420_GPIO_PART2_MAX)
|
|
|
-
|
|
|
-#define EXYNOS5420_GPIO_PART3_MAX ((sizeof(struct exynos5420_gpio_part3) \
|
|
|
- / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
|
|
|
-
|
|
|
-#define exynos5420_gpio_part4_get_nr(bank, pin) \
|
|
|
- (((((((unsigned int) &(((struct exynos5420_gpio_part4 *)\
|
|
|
- EXYNOS5420_GPIO_PART4_BASE)->bank)) \
|
|
|
- - EXYNOS5420_GPIO_PART4_BASE) / sizeof(struct s5p_gpio_bank)) \
|
|
|
- * GPIO_PER_BANK) + pin) + EXYNOS5420_GPIO_PART3_MAX)
|
|
|
-
|
|
|
-#define EXYNOS5420_GPIO_PART4_MAX ((sizeof(struct exynos5420_gpio_part4) \
|
|
|
- / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
|
|
|
-
|
|
|
-#define EXYNOS5420_GPIO_PART5_MAX ((sizeof(struct exynos5420_gpio_part5) \
|
|
|
- / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
|
|
|
-
|
|
|
-static inline unsigned int s5p_gpio_base(int nr)
|
|
|
+#define S5P_GPIO_PART_SHIFT (24)
|
|
|
+#define S5P_GPIO_PART_MASK (0xff)
|
|
|
+#define S5P_GPIO_BANK_SHIFT (8)
|
|
|
+#define S5P_GPIO_BANK_MASK (0xffff)
|
|
|
+#define S5P_GPIO_PIN_MASK (0xff)
|
|
|
+
|
|
|
+#define S5P_GPIO_SET_PART(x) \
|
|
|
+ (((x) & S5P_GPIO_PART_MASK) << S5P_GPIO_PART_SHIFT)
|
|
|
+
|
|
|
+#define S5P_GPIO_GET_PART(x) \
|
|
|
+ (((x) >> S5P_GPIO_PART_SHIFT) & S5P_GPIO_PART_MASK)
|
|
|
+
|
|
|
+#define S5P_GPIO_SET_PIN(x) \
|
|
|
+ ((x) & S5P_GPIO_PIN_MASK)
|
|
|
+
|
|
|
+#define EXYNOS4_GPIO_SET_BANK(part, bank) \
|
|
|
+ ((((unsigned)&(((struct exynos4_gpio_part##part *) \
|
|
|
+ EXYNOS4_GPIO_PART##part##_BASE)->bank) \
|
|
|
+ - EXYNOS4_GPIO_PART##part##_BASE) \
|
|
|
+ & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
|
|
|
+
|
|
|
+#define EXYNOS4X12_GPIO_SET_BANK(part, bank) \
|
|
|
+ ((((unsigned)&(((struct exynos4x12_gpio_part##part *) \
|
|
|
+ EXYNOS4X12_GPIO_PART##part##_BASE)->bank) \
|
|
|
+ - EXYNOS4X12_GPIO_PART##part##_BASE) \
|
|
|
+ & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
|
|
|
+
|
|
|
+#define EXYNOS5_GPIO_SET_BANK(part, bank) \
|
|
|
+ ((((unsigned)&(((struct exynos5420_gpio_part##part *) \
|
|
|
+ EXYNOS5420_GPIO_PART##part##_BASE)->bank) \
|
|
|
+ - EXYNOS5_GPIO_PART##part##_BASE) \
|
|
|
+ & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
|
|
|
+
|
|
|
+#define EXYNOS5420_GPIO_SET_BANK(part, bank) \
|
|
|
+ ((((unsigned)&(((struct exynos5420_gpio_part##part *) \
|
|
|
+ EXYNOS5420_GPIO_PART##part##_BASE)->bank) \
|
|
|
+ - EXYNOS5420_GPIO_PART##part##_BASE) \
|
|
|
+ & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
|
|
|
+
|
|
|
+#define exynos4_gpio_get(part, bank, pin) \
|
|
|
+ (S5P_GPIO_SET_PART(part) | \
|
|
|
+ EXYNOS4_GPIO_SET_BANK(part, bank) | \
|
|
|
+ S5P_GPIO_SET_PIN(pin))
|
|
|
+
|
|
|
+#define exynos4x12_gpio_get(part, bank, pin) \
|
|
|
+ (S5P_GPIO_SET_PART(part) | \
|
|
|
+ EXYNOS4X12_GPIO_SET_BANK(part, bank) | \
|
|
|
+ S5P_GPIO_SET_PIN(pin))
|
|
|
+
|
|
|
+#define exynos5420_gpio_get(part, bank, pin) \
|
|
|
+ (S5P_GPIO_SET_PART(part) | \
|
|
|
+ EXYNOS5420_GPIO_SET_BANK(part, bank) | \
|
|
|
+ S5P_GPIO_SET_PIN(pin))
|
|
|
+
|
|
|
+#define exynos5_gpio_get(part, bank, pin) \
|
|
|
+ (S5P_GPIO_SET_PART(part) | \
|
|
|
+ EXYNOS5_GPIO_SET_BANK(part, bank) | \
|
|
|
+ S5P_GPIO_SET_PIN(pin))
|
|
|
+
|
|
|
+static inline unsigned int s5p_gpio_base(int gpio)
|
|
|
{
|
|
|
- if (cpu_is_exynos5()) {
|
|
|
- if (proid_is_exynos5420()) {
|
|
|
- if (nr < EXYNOS5420_GPIO_PART1_MAX)
|
|
|
- return EXYNOS5420_GPIO_PART1_BASE;
|
|
|
- else if (nr < EXYNOS5420_GPIO_PART2_MAX)
|
|
|
- return EXYNOS5420_GPIO_PART2_BASE;
|
|
|
- else if (nr < EXYNOS5420_GPIO_PART3_MAX)
|
|
|
- return EXYNOS5420_GPIO_PART3_BASE;
|
|
|
- else
|
|
|
- return EXYNOS5420_GPIO_PART4_BASE;
|
|
|
- } else {
|
|
|
- if (nr < EXYNOS5_GPIO_PART1_MAX)
|
|
|
- return EXYNOS5_GPIO_PART1_BASE;
|
|
|
- else if (nr < EXYNOS5_GPIO_PART2_MAX)
|
|
|
- return EXYNOS5_GPIO_PART2_BASE;
|
|
|
- else
|
|
|
- return EXYNOS5_GPIO_PART3_BASE;
|
|
|
- }
|
|
|
- } else if (cpu_is_exynos4()) {
|
|
|
- if (nr < EXYNOS4_GPIO_PART1_MAX)
|
|
|
- return EXYNOS4_GPIO_PART1_BASE;
|
|
|
- else
|
|
|
- return EXYNOS4_GPIO_PART2_BASE;
|
|
|
+ unsigned gpio_part = S5P_GPIO_GET_PART(gpio);
|
|
|
+
|
|
|
+ switch (gpio_part) {
|
|
|
+ case 1:
|
|
|
+ return samsung_get_base_gpio_part1();
|
|
|
+ case 2:
|
|
|
+ return samsung_get_base_gpio_part2();
|
|
|
+ case 3:
|
|
|
+ return samsung_get_base_gpio_part3();
|
|
|
+ case 4:
|
|
|
+ return samsung_get_base_gpio_part4();
|
|
|
+ default:
|
|
|
+ return 0;
|
|
|
}
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static inline unsigned int s5p_gpio_part_max(int nr)
|
|
|
-{
|
|
|
- if (cpu_is_exynos5()) {
|
|
|
- if (proid_is_exynos5420()) {
|
|
|
- if (nr < EXYNOS5420_GPIO_PART1_MAX)
|
|
|
- return 0;
|
|
|
- else if (nr < EXYNOS5420_GPIO_PART2_MAX)
|
|
|
- return EXYNOS5420_GPIO_PART1_MAX;
|
|
|
- else if (nr < EXYNOS5420_GPIO_PART3_MAX)
|
|
|
- return EXYNOS5420_GPIO_PART2_MAX;
|
|
|
- else if (nr < EXYNOS5420_GPIO_PART4_MAX)
|
|
|
- return EXYNOS5420_GPIO_PART3_MAX;
|
|
|
- else
|
|
|
- return EXYNOS5420_GPIO_PART4_MAX;
|
|
|
- } else {
|
|
|
- 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 (proid_is_exynos4412()) {
|
|
|
- if (nr < EXYNOS4X12_GPIO_PART1_MAX)
|
|
|
- return 0;
|
|
|
- else if (nr < EXYNOS4X12_GPIO_PART2_MAX)
|
|
|
- return EXYNOS4X12_GPIO_PART1_MAX;
|
|
|
- else
|
|
|
- return EXYNOS4X12_GPIO_PART2_MAX;
|
|
|
- } else {
|
|
|
- if (nr < EXYNOS4_GPIO_PART1_MAX)
|
|
|
- return 0;
|
|
|
- else
|
|
|
- return EXYNOS4_GPIO_PART1_MAX;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
}
|
|
|
#endif
|
|
|
|