xref: /dflybsd-src/sys/bus/gpio/gpio_intel/gpio_intel_var.h (revision c9955ddcf88eef025ad2700358e13e835e3ca1e8)
185e653c7SImre Vadász #ifndef _GPIO_INTEL_VAR_H
285e653c7SImre Vadász #define _GPIO_INTEL_VAR_H
385e653c7SImre Vadász 
485e653c7SImre Vadász struct pinrange {
585e653c7SImre Vadász 	int start;
685e653c7SImre Vadász 	int end;
785e653c7SImre Vadász };
885e653c7SImre Vadász 
985e653c7SImre Vadász struct pin_intr_map {
1085e653c7SImre Vadász 	int pin;
113a060f5eSImre Vadász 	int intidx;
1285e653c7SImre Vadász 	void *arg;
1385e653c7SImre Vadász 	driver_intr_t *handler;
143094cc64SImre Vadász 	int is_level;
152cd90b92SImre Vadász 	uint32_t orig_intcfg;
1644007317SImre Vadász 	uint32_t orig_gpiocfg;
1785e653c7SImre Vadász };
1885e653c7SImre Vadász 
19*d56572d4SImre Vadász struct pin_io_map {
20*d56572d4SImre Vadász 	int pin;
21*d56572d4SImre Vadász 	int flags;
22*d56572d4SImre Vadász };
23*d56572d4SImre Vadász 
2485e653c7SImre Vadász struct gpio_intel_softc {
2585e653c7SImre Vadász 	device_t dev;
2685e653c7SImre Vadász 	struct resource *mem_res;
2785e653c7SImre Vadász 	struct resource *irq_res;
2885e653c7SImre Vadász 	void		*intrhand;
2985e653c7SImre Vadász 	struct lock	lk;
3085e653c7SImre Vadász 	struct pinrange *ranges;
3185e653c7SImre Vadász 	struct pin_intr_map intrmaps[16];
32*d56572d4SImre Vadász 	struct pin_io_map iomaps[128];
3385e653c7SImre Vadász 	struct gpio_intel_fns *fns;
3485e653c7SImre Vadász };
3585e653c7SImre Vadász 
3685e653c7SImre Vadász typedef	void(*gpio_intel_init_fn)(struct gpio_intel_softc *sc);
3785e653c7SImre Vadász typedef	int(*gpio_intel_map_intr_fn)(struct gpio_intel_softc *sc,
380b0166b0SImre Vadász 	    uint16_t pin, int trigger, int polarity, int termination);
3985e653c7SImre Vadász typedef	void(*gpio_intel_unmap_intr_fn)(struct gpio_intel_softc *sc,
403a060f5eSImre Vadász 	    struct pin_intr_map *map);
413a060f5eSImre Vadász typedef	void(*gpio_intel_enable_intr_fn)(struct gpio_intel_softc *sc,
423a060f5eSImre Vadász 	    struct pin_intr_map *map);
433a060f5eSImre Vadász typedef	void(*gpio_intel_disable_intr_fn)(struct gpio_intel_softc *sc,
443a060f5eSImre Vadász 	    struct pin_intr_map *map);
45*d56572d4SImre Vadász typedef int(*gpio_intel_check_io_pin_fn)(struct gpio_intel_softc *sc,
46*d56572d4SImre Vadász 	    uint16_t pin, int flags);
4785e653c7SImre Vadász typedef	void(*gpio_intel_write_pin_fn)(struct gpio_intel_softc *sc,
4885e653c7SImre Vadász 	    uint16_t pin, int value);
4985e653c7SImre Vadász typedef	int(*gpio_intel_read_pin_fn)(struct gpio_intel_softc *sc,
5085e653c7SImre Vadász 	    uint16_t pin);
5185e653c7SImre Vadász 
5285e653c7SImre Vadász struct gpio_intel_fns {
5385e653c7SImre Vadász 	gpio_intel_init_fn	init;
5485e653c7SImre Vadász 	driver_intr_t		*intr;
5585e653c7SImre Vadász 	gpio_intel_map_intr_fn	map_intr;
5685e653c7SImre Vadász 	gpio_intel_unmap_intr_fn unmap_intr;
573a060f5eSImre Vadász 	gpio_intel_enable_intr_fn enable_intr;
583a060f5eSImre Vadász 	gpio_intel_disable_intr_fn disable_intr;
59*d56572d4SImre Vadász 	gpio_intel_check_io_pin_fn check_io_pin;
6085e653c7SImre Vadász 	gpio_intel_write_pin_fn	write_pin;
6185e653c7SImre Vadász 	gpio_intel_read_pin_fn	read_pin;
6285e653c7SImre Vadász };
6385e653c7SImre Vadász 
6485e653c7SImre Vadász int	gpio_cherryview_matchuid(struct gpio_intel_softc *sc);
6585e653c7SImre Vadász 
6685e653c7SImre Vadász #endif
67