123c82c1dSSergey Kambalin /* 223c82c1dSSergey Kambalin * Raspberry Pi (BCM2838) GPIO Controller 323c82c1dSSergey Kambalin * This implementation is based on bcm2835_gpio (hw/gpio/bcm2835_gpio.c) 423c82c1dSSergey Kambalin * 523c82c1dSSergey Kambalin * Copyright (c) 2022 Auriga LLC 623c82c1dSSergey Kambalin * 723c82c1dSSergey Kambalin * Authors: 823c82c1dSSergey Kambalin * Lotosh, Aleksey <aleksey.lotosh@auriga.com> 923c82c1dSSergey Kambalin * 1023c82c1dSSergey Kambalin * This work is licensed under the terms of the GNU GPL, version 2 or later. 1123c82c1dSSergey Kambalin * See the COPYING file in the top-level directory. 1223c82c1dSSergey Kambalin */ 1323c82c1dSSergey Kambalin 1423c82c1dSSergey Kambalin #ifndef BCM2838_GPIO_H 1523c82c1dSSergey Kambalin #define BCM2838_GPIO_H 1623c82c1dSSergey Kambalin 17*b54a9a56SSergey Kambalin #include "hw/sd/sd.h" 1823c82c1dSSergey Kambalin #include "hw/sysbus.h" 1923c82c1dSSergey Kambalin #include "qom/object.h" 2023c82c1dSSergey Kambalin 2123c82c1dSSergey Kambalin #define TYPE_BCM2838_GPIO "bcm2838-gpio" 2223c82c1dSSergey Kambalin OBJECT_DECLARE_SIMPLE_TYPE(BCM2838GpioState, BCM2838_GPIO) 2323c82c1dSSergey Kambalin 2423c82c1dSSergey Kambalin #define BCM2838_GPIO_REGS_SIZE 0x1000 2523c82c1dSSergey Kambalin #define BCM2838_GPIO_NUM 58 2623c82c1dSSergey Kambalin #define GPIO_PUP_PDN_CNTRL_NUM 4 2723c82c1dSSergey Kambalin 2823c82c1dSSergey Kambalin struct BCM2838GpioState { 2923c82c1dSSergey Kambalin SysBusDevice parent_obj; 3023c82c1dSSergey Kambalin 3123c82c1dSSergey Kambalin MemoryRegion iomem; 3223c82c1dSSergey Kambalin 33*b54a9a56SSergey Kambalin /* SDBus selector */ 34*b54a9a56SSergey Kambalin SDBus sdbus; 35*b54a9a56SSergey Kambalin SDBus *sdbus_sdhci; 36*b54a9a56SSergey Kambalin SDBus *sdbus_sdhost; 3723c82c1dSSergey Kambalin 3823c82c1dSSergey Kambalin uint8_t fsel[BCM2838_GPIO_NUM]; 3923c82c1dSSergey Kambalin uint32_t lev0, lev1; 4023c82c1dSSergey Kambalin uint8_t sd_fsel; 4123c82c1dSSergey Kambalin qemu_irq out[BCM2838_GPIO_NUM]; 4223c82c1dSSergey Kambalin uint32_t pup_cntrl_reg[GPIO_PUP_PDN_CNTRL_NUM]; 4323c82c1dSSergey Kambalin }; 4423c82c1dSSergey Kambalin 4523c82c1dSSergey Kambalin #endif 46