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