1 1.2 riastrad /* $NetBSD: umcpmio.h,v 1.2 2025/03/17 18:24:08 riastradh Exp $ */ 2 1.1 brad 3 1.1 brad /* 4 1.1 brad * Copyright (c) 2024 Brad Spencer <brad (at) anduin.eldar.org> 5 1.1 brad * 6 1.1 brad * Permission to use, copy, modify, and distribute this software for any 7 1.1 brad * purpose with or without fee is hereby granted, provided that the above 8 1.1 brad * copyright notice and this permission notice appear in all copies. 9 1.1 brad * 10 1.1 brad * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 1.1 brad * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 1.1 brad * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 1.1 brad * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 1.1 brad * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 1.1 brad * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 1.1 brad * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 1.1 brad */ 18 1.1 brad 19 1.1 brad #ifndef _UMCPMIO_H_ 20 1.1 brad #define _UMCPMIO_H_ 21 1.1 brad 22 1.1 brad #include <sys/param.h> 23 1.2 riastrad #include <sys/types.h> 24 1.2 riastrad 25 1.2 riastrad #include <sys/condvar.h> 26 1.1 brad #include <sys/conf.h> 27 1.2 riastrad #include <sys/device.h> 28 1.2 riastrad #include <sys/file.h> 29 1.2 riastrad #include <sys/gpio.h> 30 1.2 riastrad #include <sys/kauth.h> 31 1.1 brad #include <sys/kernel.h> 32 1.1 brad #include <sys/kmem.h> 33 1.2 riastrad #include <sys/lwp.h> 34 1.2 riastrad #include <sys/mutex.h> 35 1.1 brad #include <sys/sysctl.h> 36 1.2 riastrad #include <sys/systm.h> 37 1.1 brad #include <sys/tty.h> 38 1.1 brad #include <sys/vnode.h> 39 1.1 brad 40 1.1 brad #include <dev/gpio/gpiovar.h> 41 1.1 brad 42 1.2 riastrad #include <dev/hid/hid.h> 43 1.2 riastrad 44 1.1 brad #include <dev/i2c/i2cvar.h> 45 1.1 brad 46 1.2 riastrad #include <dev/usb/uhidev.h> 47 1.2 riastrad #include <dev/usb/usbdevs.h> 48 1.1 brad #include <dev/usb/usbdi.h> 49 1.1 brad #include <dev/usb/usbdi_util.h> 50 1.1 brad 51 1.1 brad #define UMCPMIO_VREF_NAME 7 52 1.1 brad #define UMCPMIO_CD_NAME 7 53 1.1 brad #define UMCPMIO_DC_NAME 4 54 1.1 brad 55 1.1 brad #define MCP2221_NPINS 4 56 1.1 brad #define UMCPMIO_NUM_DEVS 4 57 1.1 brad 58 1.1 brad enum umcpmio_minor_devs { 59 1.1 brad CONTROL_DEV = 0, 60 1.1 brad GP1_DEV = 1, 61 1.1 brad GP2_DEV = 2, 62 1.1 brad GP3_DEV = 3, 63 1.1 brad }; 64 1.1 brad 65 1.1 brad struct umcpmio_irq { 66 1.1 brad int (*sc_gpio_irqfunc)(void *); 67 1.1 brad void *sc_gpio_irqarg; 68 1.1 brad }; 69 1.1 brad 70 1.1 brad struct umcpmio_softc { 71 1.1 brad device_t sc_dev; 72 1.1 brad struct uhidev *sc_hdev; 73 1.1 brad struct usbd_device *sc_udev; 74 1.1 brad 75 1.1 brad struct sysctllog *sc_umcpmiolog; 76 1.1 brad bool sc_dumpbuffer; 77 1.1 brad 78 1.1 brad int sc_cv_wait; 79 1.1 brad int sc_response_errcnt; 80 1.1 brad int sc_busy_delay; 81 1.1 brad int sc_retry_busy_read; 82 1.1 brad int sc_retry_busy_write; 83 1.1 brad 84 1.1 brad kmutex_t sc_action_mutex; 85 1.1 brad 86 1.1 brad kcondvar_t sc_res_cv; 87 1.1 brad kmutex_t sc_res_mutex; 88 1.1 brad bool sc_res_ready; 89 1.1 brad uint8_t *sc_res_buffer; 90 1.1 brad 91 1.1 brad device_t sc_gpio_dev; 92 1.1 brad struct gpio_chipset_tag sc_gpio_gc; 93 1.1 brad gpio_pin_t sc_gpio_pins[MCP2221_NPINS]; 94 1.1 brad struct umcpmio_irq sc_gpio_irqs[1]; 95 1.1 brad int sc_irq_poll; 96 1.1 brad 97 1.1 brad struct i2c_controller sc_i2c_tag; 98 1.1 brad device_t sc_i2c_dev; 99 1.1 brad bool sc_reportreadnostop; 100 1.1 brad 101 1.1 brad bool sc_dev_open[UMCPMIO_NUM_DEVS]; 102 1.1 brad 103 1.1 brad char sc_dying; 104 1.1 brad }; 105 1.1 brad 106 1.1 brad struct umcpmio_sysctl_name { 107 1.1 brad const char *text; 108 1.1 brad }; 109 1.1 brad 110 1.2 riastrad #endif /* _UMCPMIO_H_ */ 111