13374752fSBo-Chen Chen /* 2*4cb9f2a5SCathy Xu * Copyright (c) 2020-2024, MediaTek Inc. All rights reserved. 33374752fSBo-Chen Chen * 43374752fSBo-Chen Chen * SPDX-License-Identifier: BSD-3-Clause 53374752fSBo-Chen Chen */ 63374752fSBo-Chen Chen 73374752fSBo-Chen Chen #ifndef MT_GPIO_COMMON_H 83374752fSBo-Chen Chen #define MT_GPIO_COMMON_H 93374752fSBo-Chen Chen 103374752fSBo-Chen Chen #include <stdbool.h> 113374752fSBo-Chen Chen #include <stdint.h> 123374752fSBo-Chen Chen 133374752fSBo-Chen Chen #include <plat/common/common_def.h> 143374752fSBo-Chen Chen 153374752fSBo-Chen Chen /* Error Code No. */ 163374752fSBo-Chen Chen #define RSUCCESS 0 173374752fSBo-Chen Chen #define ERACCESS 1 183374752fSBo-Chen Chen #define ERINVAL 2 193374752fSBo-Chen Chen #define ERWRAPPER 3 203374752fSBo-Chen Chen #define MAX_GPIO_PIN MT_GPIO_BASE_MAX 213374752fSBo-Chen Chen 223374752fSBo-Chen Chen /* GPIO MODE CONTROL VALUE*/ 233374752fSBo-Chen Chen typedef enum { 243374752fSBo-Chen Chen GPIO_MODE_UNSUPPORTED = -1, 253374752fSBo-Chen Chen GPIO_MODE_GPIO = 0, 263374752fSBo-Chen Chen GPIO_MODE_00 = 0, 273374752fSBo-Chen Chen GPIO_MODE_01, 283374752fSBo-Chen Chen GPIO_MODE_02, 293374752fSBo-Chen Chen GPIO_MODE_03, 303374752fSBo-Chen Chen GPIO_MODE_04, 313374752fSBo-Chen Chen GPIO_MODE_05, 323374752fSBo-Chen Chen GPIO_MODE_06, 333374752fSBo-Chen Chen GPIO_MODE_07, 343374752fSBo-Chen Chen 353374752fSBo-Chen Chen GPIO_MODE_MAX, 363374752fSBo-Chen Chen GPIO_MODE_DEFAULT = GPIO_MODE_00, 373374752fSBo-Chen Chen } GPIO_MODE; 383374752fSBo-Chen Chen 393374752fSBo-Chen Chen /* GPIO DIRECTION */ 403374752fSBo-Chen Chen typedef enum { 413374752fSBo-Chen Chen MT_GPIO_DIR_UNSUPPORTED = -1, 423374752fSBo-Chen Chen MT_GPIO_DIR_OUT = 0, 433374752fSBo-Chen Chen MT_GPIO_DIR_IN = 1, 443374752fSBo-Chen Chen MT_GPIO_DIR_MAX, 453374752fSBo-Chen Chen MT_GPIO_DIR_DEFAULT = MT_GPIO_DIR_IN, 463374752fSBo-Chen Chen } GPIO_DIR; 473374752fSBo-Chen Chen 483374752fSBo-Chen Chen /* GPIO PULL ENABLE*/ 493374752fSBo-Chen Chen typedef enum { 503374752fSBo-Chen Chen MT_GPIO_PULL_EN_UNSUPPORTED = -1, 513374752fSBo-Chen Chen MT_GPIO_PULL_DISABLE = 0, 523374752fSBo-Chen Chen MT_GPIO_PULL_ENABLE = 1, 533374752fSBo-Chen Chen MT_GPIO_PULL_ENABLE_R0 = 2, 543374752fSBo-Chen Chen MT_GPIO_PULL_ENABLE_R1 = 3, 553374752fSBo-Chen Chen MT_GPIO_PULL_ENABLE_R0R1 = 4, 563374752fSBo-Chen Chen 573374752fSBo-Chen Chen MT_GPIO_PULL_EN_MAX, 583374752fSBo-Chen Chen MT_GPIO_PULL_EN_DEFAULT = MT_GPIO_PULL_ENABLE, 593374752fSBo-Chen Chen } GPIO_PULL_EN; 603374752fSBo-Chen Chen 613374752fSBo-Chen Chen /* GPIO PULL-UP/PULL-DOWN*/ 623374752fSBo-Chen Chen typedef enum { 633374752fSBo-Chen Chen MT_GPIO_PULL_UNSUPPORTED = -1, 643374752fSBo-Chen Chen MT_GPIO_PULL_NONE = 0, 653374752fSBo-Chen Chen MT_GPIO_PULL_UP = 1, 663374752fSBo-Chen Chen MT_GPIO_PULL_DOWN = 2, 673374752fSBo-Chen Chen MT_GPIO_PULL_MAX, 683374752fSBo-Chen Chen MT_GPIO_PULL_DEFAULT = MT_GPIO_PULL_DOWN 693374752fSBo-Chen Chen } GPIO_PULL; 703374752fSBo-Chen Chen 713374752fSBo-Chen Chen /* GPIO OUTPUT */ 723374752fSBo-Chen Chen typedef enum { 733374752fSBo-Chen Chen MT_GPIO_OUT_UNSUPPORTED = -1, 743374752fSBo-Chen Chen MT_GPIO_OUT_ZERO = 0, 753374752fSBo-Chen Chen MT_GPIO_OUT_ONE = 1, 763374752fSBo-Chen Chen 773374752fSBo-Chen Chen MT_GPIO_OUT_MAX, 783374752fSBo-Chen Chen MT_GPIO_OUT_DEFAULT = MT_GPIO_OUT_ZERO, 793374752fSBo-Chen Chen MT_GPIO_DATA_OUT_DEFAULT = MT_GPIO_OUT_ZERO, /*compatible with DCT*/ 803374752fSBo-Chen Chen } GPIO_OUT; 813374752fSBo-Chen Chen 823374752fSBo-Chen Chen /* GPIO INPUT */ 833374752fSBo-Chen Chen typedef enum { 843374752fSBo-Chen Chen MT_GPIO_IN_UNSUPPORTED = -1, 853374752fSBo-Chen Chen MT_GPIO_IN_ZERO = 0, 863374752fSBo-Chen Chen MT_GPIO_IN_ONE = 1, 873374752fSBo-Chen Chen 883374752fSBo-Chen Chen MT_GPIO_IN_MAX, 893374752fSBo-Chen Chen } GPIO_IN; 903374752fSBo-Chen Chen 913374752fSBo-Chen Chen #define PIN(_id, _flag, _bit, _base, _offset) { \ 923374752fSBo-Chen Chen .id = _id, \ 933374752fSBo-Chen Chen .flag = _flag, \ 943374752fSBo-Chen Chen .bit = _bit, \ 953374752fSBo-Chen Chen .base = _base, \ 963374752fSBo-Chen Chen .offset = _offset, \ 973374752fSBo-Chen Chen } 983374752fSBo-Chen Chen 993374752fSBo-Chen Chen struct mt_pin_info { 100*4cb9f2a5SCathy Xu uint16_t id; 1013374752fSBo-Chen Chen uint8_t flag; 1023374752fSBo-Chen Chen uint8_t bit; 1033374752fSBo-Chen Chen uint16_t base; 1043374752fSBo-Chen Chen uint16_t offset; 1053374752fSBo-Chen Chen }; 1063374752fSBo-Chen Chen 107ec4cfb91SJianguo Zhang int mt_gpio_init(void); 1083374752fSBo-Chen Chen uintptr_t mt_gpio_find_reg_addr(uint32_t pin); 1093374752fSBo-Chen Chen #endif /* MT_GPIO_COMMON_H */ 110