73 lines
2.8 KiB
C
73 lines
2.8 KiB
C
/*
|
|
* Xilinx Processor System MIO / EMIO GPIO controller driver
|
|
*
|
|
* Driver private data declarations, GPIO bank module
|
|
*
|
|
* Copyright (c) 2022, Weidmueller Interface GmbH & Co. KG
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef _ZEPHYR_DRIVERS_GPIO_GPIO_XLNX_PS_BANK_H_
|
|
#define _ZEPHYR_DRIVERS_GPIO_GPIO_XLNX_PS_BANK_H_
|
|
|
|
/*
|
|
* Register address calculation macros
|
|
* Register address offsets: comp. Zynq-7000 TRM, ug585, chap. B.19
|
|
*/
|
|
#define GPIO_XLNX_PS_BANK_MASK_DATA_LSW_REG (dev_conf->base_addr\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x8))
|
|
#define GPIO_XLNX_PS_BANK_MASK_DATA_MSW_REG ((dev_conf->base_addr + 0x04)\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x8))
|
|
#define GPIO_XLNX_PS_BANK_DATA_REG ((dev_conf->base_addr + 0x40)\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x4))
|
|
#define GPIO_XLNX_PS_BANK_DATA_RO_REG ((dev_conf->base_addr + 0x60)\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x4))
|
|
#define GPIO_XLNX_PS_BANK_DIRM_REG ((dev_conf->base_addr + 0x204)\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x40))
|
|
#define GPIO_XLNX_PS_BANK_OEN_REG ((dev_conf->base_addr + 0x208)\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x40))
|
|
#define GPIO_XLNX_PS_BANK_INT_MASK_REG ((dev_conf->base_addr + 0x20C)\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x40))
|
|
#define GPIO_XLNX_PS_BANK_INT_EN_REG ((dev_conf->base_addr + 0x210)\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x40))
|
|
#define GPIO_XLNX_PS_BANK_INT_DIS_REG ((dev_conf->base_addr + 0x214)\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x40))
|
|
#define GPIO_XLNX_PS_BANK_INT_STAT_REG ((dev_conf->base_addr + 0x218)\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x40))
|
|
#define GPIO_XLNX_PS_BANK_INT_TYPE_REG ((dev_conf->base_addr + 0x21C)\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x40))
|
|
#define GPIO_XLNX_PS_BANK_INT_POLARITY_REG ((dev_conf->base_addr + 0x220)\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x40))
|
|
#define GPIO_XLNX_PS_BANK_INT_ANY_REG ((dev_conf->base_addr + 0x224)\
|
|
+ ((uint32_t)dev_conf->bank_index * 0x40))
|
|
|
|
/**
|
|
* @brief Run-time modifiable device data structure.
|
|
*
|
|
* This struct contains all data of a PS MIO / EMIO GPIO bank
|
|
* which is modifiable at run-time, such as the configuration
|
|
* parameters and current values of each individual pin belonging
|
|
* to the respective bank.
|
|
*/
|
|
struct gpio_xlnx_ps_bank_dev_data {
|
|
struct gpio_driver_data common;
|
|
sys_slist_t callbacks;
|
|
};
|
|
|
|
/**
|
|
* @brief Constant device configuration data structure.
|
|
*
|
|
* This struct contains all data of a PS MIO / EMIO GPIO bank
|
|
* which is required for proper operation (such as base memory
|
|
* addresses etc.) which don't have to and therefore cannot be
|
|
* modified at run-time.
|
|
*/
|
|
struct gpio_xlnx_ps_bank_dev_cfg {
|
|
struct gpio_driver_config common;
|
|
|
|
uint32_t base_addr;
|
|
uint8_t bank_index;
|
|
};
|
|
|
|
#endif /* _ZEPHYR_DRIVERS_GPIO_GPIO_XLNX_PS_BANK_H_ */
|