1*5349a46bSYannickV /*- 2*5349a46bSYannickV * SPDX-License-Identifier: BSD-2-Clause 3*5349a46bSYannickV * 4*5349a46bSYannickV * Copyright (c) 2026 Beckhoff Automation GmbH & Co. KG 5*5349a46bSYannickV */ 6*5349a46bSYannickV 7*5349a46bSYannickV #ifndef _DEV_GPIO_INTEL_INTELGPIO_H_ 8*5349a46bSYannickV #define _DEV_GPIO_INTEL_INTELGPIO_H_ 9*5349a46bSYannickV 10*5349a46bSYannickV #include <sys/param.h> 11*5349a46bSYannickV #include <sys/bus.h> 12*5349a46bSYannickV #include <sys/gpio.h> 13*5349a46bSYannickV #include <sys/kernel.h> 14*5349a46bSYannickV 15*5349a46bSYannickV #include <contrib/dev/acpica/include/acpi.h> 16*5349a46bSYannickV 17*5349a46bSYannickV #define INTELGPIO_PADBAR_REG 0x00c 18*5349a46bSYannickV #define INTELGPIO_PAD_SIZE 16 19*5349a46bSYannickV 20*5349a46bSYannickV #define INTELGPIO_PADCFG0_GPIOTXSTATE (1 << 0) 21*5349a46bSYannickV #define INTELGPIO_PADCFG0_GPIORXSTATE (1 << 1) 22*5349a46bSYannickV #define INTELGPIO_PADCFG0_GPIOTXDIS (1 << 8) 23*5349a46bSYannickV #define INTELGPIO_PADCFG0_GPIORXDIS (1 << 9) 24*5349a46bSYannickV #define INTELGPIO_PADCFG0_PMODE_MASK (0x7 << 10) 25*5349a46bSYannickV #define INTELGPIO_PADCFG0_PMODE_GPIO 0 26*5349a46bSYannickV 27*5349a46bSYannickV #define INTELGPIO_GPIO_NOMAP (-1) 28*5349a46bSYannickV #define INTELGPIO_MAX_COMMUNITIES 8 29*5349a46bSYannickV 30*5349a46bSYannickV struct intelgpio_padgroup { 31*5349a46bSYannickV int first_pad; 32*5349a46bSYannickV int npads; 33*5349a46bSYannickV int gpio_base; 34*5349a46bSYannickV const char *name; 35*5349a46bSYannickV }; 36*5349a46bSYannickV 37*5349a46bSYannickV struct intelgpio_community { 38*5349a46bSYannickV int ngroups; 39*5349a46bSYannickV const struct intelgpio_padgroup *groups; 40*5349a46bSYannickV }; 41*5349a46bSYannickV 42*5349a46bSYannickV struct intelgpio_platform { 43*5349a46bSYannickV const struct intelgpio_community *communities; 44*5349a46bSYannickV int ncommunities; 45*5349a46bSYannickV char **hids; 46*5349a46bSYannickV const char *desc; 47*5349a46bSYannickV }; 48*5349a46bSYannickV 49*5349a46bSYannickV struct intelgpio_softc { 50*5349a46bSYannickV device_t sc_dev; 51*5349a46bSYannickV device_t sc_busdev; 52*5349a46bSYannickV struct mtx sc_mtx; 53*5349a46bSYannickV const struct intelgpio_platform *sc_plat; 54*5349a46bSYannickV 55*5349a46bSYannickV struct resource *sc_mem_res[INTELGPIO_MAX_COMMUNITIES]; 56*5349a46bSYannickV uint32_t sc_padbar[INTELGPIO_MAX_COMMUNITIES]; 57*5349a46bSYannickV }; 58*5349a46bSYannickV 59*5349a46bSYannickV DECLARE_CLASS(intelgpio_driver); 60*5349a46bSYannickV 61*5349a46bSYannickV int intelgpio_probe(device_t dev, const struct intelgpio_platform *plat); 62*5349a46bSYannickV int intelgpio_attach(device_t dev, const struct intelgpio_platform *plat); 63*5349a46bSYannickV 64*5349a46bSYannickV #endif /* _DEV_GPIO_INTEL_INTELGPIO_H_ */ 65