1 /* $OpenBSD: qcdwusb.c,v 1.2 2023/09/22 01:10:44 jsg Exp $ */ 2 /* 3 * Copyright (c) 2017, 2018 Mark Kettenis <kettenis@openbsd.org> 4 * Copyright (c) 2020, 2022 Patrick Wildt <patrick@blueri.se> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 #include <sys/param.h> 20 #include <sys/systm.h> 21 #include <sys/device.h> 22 23 #include <machine/bus.h> 24 #include <machine/fdt.h> 25 #include <machine/simplebusvar.h> 26 27 #include <dev/ofw/openfirm.h> 28 #include <dev/ofw/ofw_clock.h> 29 #include <dev/ofw/ofw_power.h> 30 #include <dev/ofw/fdt.h> 31 32 struct qcdwusb_softc { 33 struct simplebus_softc sc_sbus; 34 }; 35 36 int qcdwusb_match(struct device *, void *, void *); 37 void qcdwusb_attach(struct device *, struct device *, void *); 38 39 const struct cfattach qcdwusb_ca = { 40 sizeof(struct qcdwusb_softc), qcdwusb_match, qcdwusb_attach 41 }; 42 43 struct cfdriver qcdwusb_cd = { 44 NULL, "qcdwusb", DV_DULL 45 }; 46 47 int 48 qcdwusb_match(struct device *parent, void *match, void *aux) 49 { 50 struct fdt_attach_args *faa = aux; 51 52 return OF_is_compatible(faa->fa_node, "qcom,dwc3"); 53 } 54 55 void 56 qcdwusb_attach(struct device *parent, struct device *self, void *aux) 57 { 58 struct qcdwusb_softc *sc = (struct qcdwusb_softc *)self; 59 struct fdt_attach_args *faa = aux; 60 61 power_domain_enable(faa->fa_node); 62 clock_enable_all(faa->fa_node); 63 reset_deassert_all(faa->fa_node); 64 65 simplebus_attach(parent, &sc->sc_sbus.sc_dev, faa); 66 } 67