xref: /qemu/include/hw/gpio/bcm2838_gpio.h (revision 23c82c1daf30b3ed8d988f3f1d7fbb0557059ac6)
1*23c82c1dSSergey Kambalin /*
2*23c82c1dSSergey Kambalin  * Raspberry Pi (BCM2838) GPIO Controller
3*23c82c1dSSergey Kambalin  * This implementation is based on bcm2835_gpio (hw/gpio/bcm2835_gpio.c)
4*23c82c1dSSergey Kambalin  *
5*23c82c1dSSergey Kambalin  * Copyright (c) 2022 Auriga LLC
6*23c82c1dSSergey Kambalin  *
7*23c82c1dSSergey Kambalin  * Authors:
8*23c82c1dSSergey Kambalin  *  Lotosh, Aleksey <aleksey.lotosh@auriga.com>
9*23c82c1dSSergey Kambalin  *
10*23c82c1dSSergey Kambalin  * This work is licensed under the terms of the GNU GPL, version 2 or later.
11*23c82c1dSSergey Kambalin  * See the COPYING file in the top-level directory.
12*23c82c1dSSergey Kambalin  */
13*23c82c1dSSergey Kambalin 
14*23c82c1dSSergey Kambalin #ifndef BCM2838_GPIO_H
15*23c82c1dSSergey Kambalin #define BCM2838_GPIO_H
16*23c82c1dSSergey Kambalin 
17*23c82c1dSSergey Kambalin #include "hw/sysbus.h"
18*23c82c1dSSergey Kambalin #include "qom/object.h"
19*23c82c1dSSergey Kambalin 
20*23c82c1dSSergey Kambalin #define TYPE_BCM2838_GPIO "bcm2838-gpio"
21*23c82c1dSSergey Kambalin OBJECT_DECLARE_SIMPLE_TYPE(BCM2838GpioState, BCM2838_GPIO)
22*23c82c1dSSergey Kambalin 
23*23c82c1dSSergey Kambalin #define BCM2838_GPIO_REGS_SIZE 0x1000
24*23c82c1dSSergey Kambalin #define BCM2838_GPIO_NUM       58
25*23c82c1dSSergey Kambalin #define GPIO_PUP_PDN_CNTRL_NUM 4
26*23c82c1dSSergey Kambalin 
27*23c82c1dSSergey Kambalin struct BCM2838GpioState {
28*23c82c1dSSergey Kambalin     SysBusDevice parent_obj;
29*23c82c1dSSergey Kambalin 
30*23c82c1dSSergey Kambalin     MemoryRegion iomem;
31*23c82c1dSSergey Kambalin 
32*23c82c1dSSergey Kambalin 
33*23c82c1dSSergey Kambalin     uint8_t fsel[BCM2838_GPIO_NUM];
34*23c82c1dSSergey Kambalin     uint32_t lev0, lev1;
35*23c82c1dSSergey Kambalin     uint8_t sd_fsel;
36*23c82c1dSSergey Kambalin     qemu_irq out[BCM2838_GPIO_NUM];
37*23c82c1dSSergey Kambalin     uint32_t pup_cntrl_reg[GPIO_PUP_PDN_CNTRL_NUM];
38*23c82c1dSSergey Kambalin };
39*23c82c1dSSergey Kambalin 
40*23c82c1dSSergey Kambalin #endif
41