1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #ifndef __SOC_NVIDIA_TEGRA_GPIO_H__
4 #define __SOC_NVIDIA_TEGRA_GPIO_H__
12 #define GPIO_PINMUX_SHIFT 16
13 #define GPIO(name) ((gpio_t)(GPIO_##name##_INDEX | \
14 (PINMUX_GPIO_##name << GPIO_PINMUX_SHIFT)))
16 /* Functions to modify specific GPIO control values. */
22 void gpio_set_mode(gpio_t gpio
, enum gpio_mode
);
23 int gpio_get_mode(gpio_t gpio
);
25 // Lock a GPIO with extreme caution since they can't be unlocked.
26 void gpio_set_lock(gpio_t gpio
);
27 int gpio_get_lock(gpio_t gpio
);
29 void gpio_set_out_enable(gpio_t gpio
, int enable
);
30 int gpio_get_out_enable(gpio_t gpio
);
32 int gpio_get_out_value(gpio_t gpio
);
34 int gpio_get_int_status(gpio_t gpio
);
36 void gpio_set_int_enable(gpio_t gpio
, int enable
);
37 int gpio_get_int_enable(gpio_t gpio
);
39 void gpio_set_int_level(gpio_t gpio
, int high_rise
, int edge
, int delta
);
40 void gpio_get_int_level(gpio_t gpio
, int *high_rise
, int *edge
, int *delta
);
42 void gpio_set_int_clear(gpio_t gpio
);
44 void gpio_output_open_drain(gpio_t gpio
, int value
);
46 /* Hardware definitions. */
49 GPIO_GPIOS_PER_PORT
= 8,
50 GPIO_PORTS_PER_BANK
= 4,
53 GPIO_GPIOS_PER_BANK
= GPIO_GPIOS_PER_PORT
* GPIO_PORTS_PER_BANK
,
54 GPIO_GPIOS
= GPIO_BANKS
* GPIO_GPIOS_PER_BANK
57 static inline int gpio_index_to_bank(int index
)
59 return index
/ GPIO_GPIOS_PER_BANK
;
62 static inline int gpio_index_to_port(int index
)
64 return (index
% GPIO_GPIOS_PER_BANK
) / GPIO_GPIOS_PER_PORT
;
67 static inline int gpio_to_bit(int index
)
69 return index
% GPIO_GPIOS_PER_PORT
;
74 u32 config
[GPIO_PORTS_PER_BANK
];
75 u32 out_enable
[GPIO_PORTS_PER_BANK
];
76 u32 out_value
[GPIO_PORTS_PER_BANK
];
77 u32 in_value
[GPIO_PORTS_PER_BANK
];
78 u32 int_status
[GPIO_PORTS_PER_BANK
];
79 u32 int_enable
[GPIO_PORTS_PER_BANK
];
80 u32 int_level
[GPIO_PORTS_PER_BANK
];
81 u32 int_clear
[GPIO_PORTS_PER_BANK
];
84 u32 config_mask
[GPIO_PORTS_PER_BANK
];
85 u32 out_enable_mask
[GPIO_PORTS_PER_BANK
];
86 u32 out_value_mask
[GPIO_PORTS_PER_BANK
];
87 u32 in_value_mask
[GPIO_PORTS_PER_BANK
];
88 u32 int_status_mask
[GPIO_PORTS_PER_BANK
];
89 u32 int_enable_mask
[GPIO_PORTS_PER_BANK
];
90 u32 int_level_mask
[GPIO_PORTS_PER_BANK
];
91 u32 int_clear_mask
[GPIO_PORTS_PER_BANK
];
94 #endif /* __SOC_NVIDIA_TEGRA_GPIO_H__ */