1/*
2 * Copyright 2017, Data61
3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO)
4 * ABN 41 687 119 230.
5 *
6 * This software may be distributed and modified according to the terms of
7 * the BSD 2-Clause license. Note that NO WARRANTY is provided.
8 * See "LICENSE_BSD2.txt" for details.
9 *
10 * @TAG(DATA61_BSD)
11 */
12
13#pragma once
14
15#include <utils/util.h>
16#include <platsupport/gpio.h>
17#include <platsupport/mux.h>
18
19/* GPIO IDs */
20#define GPIOID_GPIO0     GPIOID(GPIO_BANK1,  0)
21#define GPIOID_GPIO1     GPIOID(GPIO_BANK1,  1)
22#define GPIOID_GPIO2     GPIOID(GPIO_BANK1,  2)
23#define GPIOID_GPIO3     GPIOID(GPIO_BANK1,  3)
24#define GPIOID_GPIO4     GPIOID(GPIO_BANK1,  4)
25#define GPIOID_GPIO5     GPIOID(GPIO_BANK1,  5)
26#define GPIOID_GPIO6     GPIOID(GPIO_BANK1,  6)
27#define GPIOID_GPIO7     GPIOID(GPIO_BANK1,  7)
28#define GPIOID_GPIO8     GPIOID(GPIO_BANK1,  8)
29#define GPIOID_GPIO9     GPIOID(GPIO_BANK1,  9)
30#define GPIOID_GPIO16    GPIOID(GPIO_BANK7, 11)
31#define GPIOID_GPIO17    GPIOID(GPIO_BANK7, 12)
32#define GPIOID_GPIO18    GPIOID(GPIO_BANK7, 13)
33#define GPIOID_GPIO19    GPIOID(GPIO_BANK4,  5)
34#define GPIOID_NAND_D00  GPIOID(GPIO_BANK2,  0)
35#define GPIOID_NAND_D01  GPIOID(GPIO_BANK2,  1)
36#define GPIOID_NAND_D02  GPIOID(GPIO_BANK2,  2)
37#define GPIOID_NAND_D03  GPIOID(GPIO_BANK2,  3)
38#define GPIOID_NAND_D04  GPIOID(GPIO_BANK2,  4)
39#define GPIOID_NAND_D05  GPIOID(GPIO_BANK2,  5)
40#define GPIOID_NAND_D06  GPIOID(GPIO_BANK2,  6)
41#define GPIOID_NAND_D07  GPIOID(GPIO_BANK2,  7)
42
43#define MAX_GPIO_ID GPIOID_NAND_D07
44
45/* Aliases */
46#define KEY_VOL_UP  GPIOID_GPIO18
47#define KEY_HOME    GPIOID_NAND_D04
48#define KEY_SEARCH  GPIOID_NAND_D03
49#define KEY_BACK    GPIOID_NAND_D02
50#define KEY_MENU    GPIOID_NAND_D01
51#define KEY_VOL_DN  GPIOID_GPIO19
52
53enum gpio_port {
54    GPIO_BANK1,
55    GPIO_BANK2,
56    GPIO_BANK3,
57    GPIO_BANK4,
58    GPIO_BANK5,
59    GPIO_BANK6,
60    GPIO_BANK7,
61    GPIO_NBANKS
62};
63
64/**
65 * Initialise the exynos GPIO system given an exynos MUX subsystem
66 * @param[in] bankX      A virtual mapping for gpio bank X.
67 * @param[in] mux_sys    A handle to the mux subsystem. This subsystem
68 *                       must contain memory mapped IO for the MUX regions.
69 * @param[out] gpio_sys  A handle to a gpio subsystem to populate.
70 * @return               0 on success
71 */
72int imx6_gpio_sys_init(void *bank1, void *bank2, void *bank3,
73                       void *bank4, void *bank5, void *bank6,
74                       void *bank7,
75                       mux_sys_t *mux_sys, gpio_sys_t *gpio_sys);
76
77