| #ifndef _DWGPIO_H |
| #define _DWGPIO_H |
| |
| /** @file |
| * |
| * Synopsys DesignWare GPIO driver |
| * |
| */ |
| |
| FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); |
| |
| /** Maximum number of GPIOs per port */ |
| #define DWGPIO_MAX_COUNT 32 |
| |
| /** Software port |
| * |
| * This is the register bank containing the DR, DDR, and CTL bits. |
| */ |
| #define DWGPIO_SWPORT( x ) ( 0x00 + ( (x) * 0x0c ) ) |
| |
| /** Data register |
| * |
| * Bits written to this register are output if the corresponding DDR |
| * bit is set to 1 (output) and the corresponding CTL bit is set to 0 |
| * (software control). |
| * |
| * Bits read from this register reflect the most recently written |
| * value, and do not reflect the actual status of the GPIO pin. |
| */ |
| #define DWGPIO_SWPORT_DR 0x00 |
| |
| /** Data direction register |
| * |
| * The GPIO is an output if the corresponding bit in this register is |
| * set to 1. |
| */ |
| #define DWGPIO_SWPORT_DDR 0x04 |
| |
| /** Control register |
| * |
| * The GPIO is under software control (i.e. is functioning as a GPIO, |
| * rather than being controlled by a separate functional block) if the |
| * corresponding bit in this register is set to 0. |
| */ |
| #define DWGPIO_SWPORT_CTL 0x08 |
| |
| /** External port |
| * |
| * Bits read from this register reflect the current status of the GPIO |
| * pin. |
| */ |
| #define DWGPIO_EXT_PORT( x ) ( 0x50 + ( (x) * 0x04 ) ) |
| |
| /** A DesignWare GPIO port group */ |
| struct dwgpio_group { |
| /** Registers */ |
| void *regs; |
| }; |
| |
| /** A DesignWare GPIO port */ |
| struct dwgpio { |
| /** Device name */ |
| const char *name; |
| /** Port index */ |
| unsigned int port; |
| /** Software port registers */ |
| void *swport; |
| /** External port register */ |
| void *ext; |
| |
| /** Original data register value */ |
| uint32_t dr; |
| /** Original data direction register value */ |
| uint32_t ddr; |
| /** Original control register value */ |
| uint32_t ctl; |
| }; |
| |
| #endif /* _DWGPIO_H */ |