xref: /qemu/include/hw/gpio/bcm2838_gpio.h (revision 158a054c4d1a40179f5e83cd7e1cfe65de457b92)
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