19d2cb8e8SSimon Glass /* 29d2cb8e8SSimon Glass * Copyright (c) 2011 The Chromium OS Authors. 35f533aebSJoe Hershberger * Copyright (c) 2011, NVIDIA Corp. All rights reserved. 4*1a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 59d2cb8e8SSimon Glass */ 69d2cb8e8SSimon Glass 75f533aebSJoe Hershberger #ifndef _ASM_GENERIC_GPIO_H_ 85f533aebSJoe Hershberger #define _ASM_GENERIC_GPIO_H_ 95f533aebSJoe Hershberger 109d2cb8e8SSimon Glass /* 119d2cb8e8SSimon Glass * Generic GPIO API for U-Boot 129d2cb8e8SSimon Glass * 139d2cb8e8SSimon Glass * GPIOs are numbered from 0 to GPIO_COUNT-1 which value is defined 149d2cb8e8SSimon Glass * by the SOC/architecture. 159d2cb8e8SSimon Glass * 169d2cb8e8SSimon Glass * Each GPIO can be an input or output. If an input then its value can 179d2cb8e8SSimon Glass * be read as 0 or 1. If an output then its value can be set to 0 or 1. 189d2cb8e8SSimon Glass * If you try to write an input then the value is undefined. If you try 199d2cb8e8SSimon Glass * to read an output, barring something very unusual, you will get 209d2cb8e8SSimon Glass * back the value of the output that you previously set. 219d2cb8e8SSimon Glass * 229d2cb8e8SSimon Glass * In some cases the operation may fail, for example if the GPIO number 239d2cb8e8SSimon Glass * is out of range, or the GPIO is not available because its pin is 249d2cb8e8SSimon Glass * being used by another function. In that case, functions may return 259d2cb8e8SSimon Glass * an error value of -1. 269d2cb8e8SSimon Glass */ 279d2cb8e8SSimon Glass 289d2cb8e8SSimon Glass /** 2994740e47SNikita Kiryanov * Request a gpio. This should be called before any of the other functions 3094740e47SNikita Kiryanov * are used on this gpio. 319d2cb8e8SSimon Glass * 3294740e47SNikita Kiryanov * @param gp GPIO number 3394740e47SNikita Kiryanov * @param label User label for this GPIO 349d2cb8e8SSimon Glass * @return 0 if ok, -1 on error 359d2cb8e8SSimon Glass */ 365f533aebSJoe Hershberger int gpio_request(unsigned gpio, const char *label); 375f533aebSJoe Hershberger 385f533aebSJoe Hershberger /** 395f533aebSJoe Hershberger * Stop using the GPIO. This function should not alter pin configuration. 405f533aebSJoe Hershberger * 415f533aebSJoe Hershberger * @param gpio GPIO number 425f533aebSJoe Hershberger * @return 0 if ok, -1 on error 435f533aebSJoe Hershberger */ 445f533aebSJoe Hershberger int gpio_free(unsigned gpio); 455f533aebSJoe Hershberger 465f533aebSJoe Hershberger /** 475f533aebSJoe Hershberger * Make a GPIO an input. 485f533aebSJoe Hershberger * 495f533aebSJoe Hershberger * @param gpio GPIO number 505f533aebSJoe Hershberger * @return 0 if ok, -1 on error 515f533aebSJoe Hershberger */ 525f533aebSJoe Hershberger int gpio_direction_input(unsigned gpio); 539d2cb8e8SSimon Glass 549d2cb8e8SSimon Glass /** 559d2cb8e8SSimon Glass * Make a GPIO an output, and set its value. 569d2cb8e8SSimon Glass * 575f533aebSJoe Hershberger * @param gpio GPIO number 589d2cb8e8SSimon Glass * @param value GPIO value (0 for low or 1 for high) 599d2cb8e8SSimon Glass * @return 0 if ok, -1 on error 609d2cb8e8SSimon Glass */ 615f533aebSJoe Hershberger int gpio_direction_output(unsigned gpio, int value); 629d2cb8e8SSimon Glass 639d2cb8e8SSimon Glass /** 649d2cb8e8SSimon Glass * Get a GPIO's value. This will work whether the GPIO is an input 659d2cb8e8SSimon Glass * or an output. 669d2cb8e8SSimon Glass * 675f533aebSJoe Hershberger * @param gpio GPIO number 689d2cb8e8SSimon Glass * @return 0 if low, 1 if high, -1 on error 699d2cb8e8SSimon Glass */ 705f533aebSJoe Hershberger int gpio_get_value(unsigned gpio); 719d2cb8e8SSimon Glass 729d2cb8e8SSimon Glass /** 735f533aebSJoe Hershberger * Set an output GPIO's value. The GPIO must already be an output or 749d2cb8e8SSimon Glass * this function may have no effect. 759d2cb8e8SSimon Glass * 765f533aebSJoe Hershberger * @param gpio GPIO number 779d2cb8e8SSimon Glass * @param value GPIO value (0 for low or 1 for high) 789d2cb8e8SSimon Glass * @return 0 if ok, -1 on error 799d2cb8e8SSimon Glass */ 805f533aebSJoe Hershberger int gpio_set_value(unsigned gpio, int value); 815f533aebSJoe Hershberger #endif /* _ASM_GENERIC_GPIO_H_ */ 82