1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
2150c2493STom Warren /*
3150c2493STom Warren  * Copyright (c) 2011, Google Inc. All rights reserved.
4150c2493STom Warren  */
5150c2493STom Warren 
6150c2493STom Warren #ifndef _TEGRA_GPIO_H_
7150c2493STom Warren #define _TEGRA_GPIO_H_
8150c2493STom Warren 
901a97a11SStephen Warren #include <dt-bindings/gpio/tegra-gpio.h>
1001a97a11SStephen Warren 
112fccd2d9SSimon Glass #define TEGRA_GPIOS_PER_PORT	8
122fccd2d9SSimon Glass #define TEGRA_PORTS_PER_BANK	4
13150c2493STom Warren #define MAX_NUM_GPIOS           (TEGRA_GPIO_PORTS * TEGRA_GPIO_BANKS * 8)
14150c2493STom Warren #define GPIO_NAME_SIZE		20	/* gpio_request max label len */
15150c2493STom Warren 
16150c2493STom Warren #define GPIO_BANK(x)		((x) >> 5)
17150c2493STom Warren #define GPIO_PORT(x)		(((x) >> 3) & 0x3)
18150c2493STom Warren #define GPIO_FULLPORT(x)	((x) >> 3)
19150c2493STom Warren #define GPIO_BIT(x)		((x) & 0x7)
20150c2493STom Warren 
21eceb3f26SStephen Warren enum tegra_gpio_init {
22eceb3f26SStephen Warren 	TEGRA_GPIO_INIT_IN,
23eceb3f26SStephen Warren 	TEGRA_GPIO_INIT_OUT0,
24eceb3f26SStephen Warren 	TEGRA_GPIO_INIT_OUT1,
25eceb3f26SStephen Warren };
26eceb3f26SStephen Warren 
27eceb3f26SStephen Warren struct tegra_gpio_config {
28eceb3f26SStephen Warren 	u32 gpio:16;
29eceb3f26SStephen Warren 	u32 init:2;
30eceb3f26SStephen Warren };
31eceb3f26SStephen Warren 
322fccd2d9SSimon Glass /**
33eceb3f26SStephen Warren  * Configure a list of GPIOs
34eceb3f26SStephen Warren  *
35eceb3f26SStephen Warren  * @param config	List of GPIO configurations
36eceb3f26SStephen Warren  * @param len		Number of config items in list
37eceb3f26SStephen Warren  */
38eceb3f26SStephen Warren void gpio_config_table(const struct tegra_gpio_config *config, int len);
39eceb3f26SStephen Warren 
40150c2493STom Warren #endif	/* TEGRA_GPIO_H_ */
41