12cfe870aSOleksandr Tymoshenko /*- 22cfe870aSOleksandr Tymoshenko * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 32cfe870aSOleksandr Tymoshenko * 42cfe870aSOleksandr Tymoshenko * Copyright (c) 2020 Oleksandr Tymoshenko <gonzo@FreeBSD.org> 52cfe870aSOleksandr Tymoshenko * 62cfe870aSOleksandr Tymoshenko * Redistribution and use in source and binary forms, with or without 72cfe870aSOleksandr Tymoshenko * modification, are permitted provided that the following conditions 82cfe870aSOleksandr Tymoshenko * are met: 92cfe870aSOleksandr Tymoshenko * 1. Redistributions of source code must retain the above copyright 102cfe870aSOleksandr Tymoshenko * notice, this list of conditions and the following disclaimer. 112cfe870aSOleksandr Tymoshenko * 2. Redistributions in binary form must reproduce the above copyright 122cfe870aSOleksandr Tymoshenko * notice, this list of conditions and the following disclaimer in the 132cfe870aSOleksandr Tymoshenko * documentation and/or other materials provided with the distribution. 142cfe870aSOleksandr Tymoshenko * 152cfe870aSOleksandr Tymoshenko * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 162cfe870aSOleksandr Tymoshenko * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 172cfe870aSOleksandr Tymoshenko * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 182cfe870aSOleksandr Tymoshenko * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 192cfe870aSOleksandr Tymoshenko * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 202cfe870aSOleksandr Tymoshenko * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 212cfe870aSOleksandr Tymoshenko * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 222cfe870aSOleksandr Tymoshenko * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 232cfe870aSOleksandr Tymoshenko * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 242cfe870aSOleksandr Tymoshenko * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 252cfe870aSOleksandr Tymoshenko * SUCH DAMAGE. 262cfe870aSOleksandr Tymoshenko * 272cfe870aSOleksandr Tymoshenko * $FreeBSD$ 282cfe870aSOleksandr Tymoshenko */ 292cfe870aSOleksandr Tymoshenko 302cfe870aSOleksandr Tymoshenko #include <sys/cdefs.h> 312cfe870aSOleksandr Tymoshenko __FBSDID("$FreeBSD$"); 322cfe870aSOleksandr Tymoshenko 332cfe870aSOleksandr Tymoshenko #include <sys/param.h> 342cfe870aSOleksandr Tymoshenko #include <sys/systm.h> 352cfe870aSOleksandr Tymoshenko #include <sys/bus.h> 362cfe870aSOleksandr Tymoshenko #include <sys/kernel.h> 372cfe870aSOleksandr Tymoshenko #include <sys/lock.h> 382cfe870aSOleksandr Tymoshenko #include <sys/module.h> 392cfe870aSOleksandr Tymoshenko #include <sys/mutex.h> 402cfe870aSOleksandr Tymoshenko #include <sys/rman.h> 412cfe870aSOleksandr Tymoshenko #include <sys/resource.h> 422cfe870aSOleksandr Tymoshenko #include <machine/bus.h> 432cfe870aSOleksandr Tymoshenko 442cfe870aSOleksandr Tymoshenko #include <dev/ofw/ofw_bus.h> 452cfe870aSOleksandr Tymoshenko #include <dev/ofw/ofw_bus_subr.h> 462cfe870aSOleksandr Tymoshenko 472cfe870aSOleksandr Tymoshenko #include "opt_snd.h" 482cfe870aSOleksandr Tymoshenko #include <dev/sound/pcm/sound.h> 492cfe870aSOleksandr Tymoshenko #include <dev/sound/fdt/audio_dai.h> 502cfe870aSOleksandr Tymoshenko #include "audio_dai_if.h" 512cfe870aSOleksandr Tymoshenko 522cfe870aSOleksandr Tymoshenko static struct ofw_compat_data compat_data[] = { 532cfe870aSOleksandr Tymoshenko { "dummy-codec", 1}, 542cfe870aSOleksandr Tymoshenko { NULL, 0 } 552cfe870aSOleksandr Tymoshenko }; 562cfe870aSOleksandr Tymoshenko 572cfe870aSOleksandr Tymoshenko struct dummy_codec_softc { 582cfe870aSOleksandr Tymoshenko device_t dev; 592cfe870aSOleksandr Tymoshenko }; 602cfe870aSOleksandr Tymoshenko 612cfe870aSOleksandr Tymoshenko static int dummy_codec_probe(device_t dev); 622cfe870aSOleksandr Tymoshenko static int dummy_codec_attach(device_t dev); 632cfe870aSOleksandr Tymoshenko static int dummy_codec_detach(device_t dev); 642cfe870aSOleksandr Tymoshenko 652cfe870aSOleksandr Tymoshenko static int 662cfe870aSOleksandr Tymoshenko dummy_codec_probe(device_t dev) 672cfe870aSOleksandr Tymoshenko { 682cfe870aSOleksandr Tymoshenko if (!ofw_bus_status_okay(dev)) 692cfe870aSOleksandr Tymoshenko return (ENXIO); 702cfe870aSOleksandr Tymoshenko 712cfe870aSOleksandr Tymoshenko if (!ofw_bus_search_compatible(dev, compat_data)->ocd_data) 722cfe870aSOleksandr Tymoshenko return (ENXIO); 732cfe870aSOleksandr Tymoshenko 742cfe870aSOleksandr Tymoshenko device_set_desc(dev, "Dummy Codec"); 752cfe870aSOleksandr Tymoshenko return (BUS_PROBE_DEFAULT); 762cfe870aSOleksandr Tymoshenko } 772cfe870aSOleksandr Tymoshenko 782cfe870aSOleksandr Tymoshenko static int 792cfe870aSOleksandr Tymoshenko dummy_codec_attach(device_t dev) 802cfe870aSOleksandr Tymoshenko { 812cfe870aSOleksandr Tymoshenko struct dummy_codec_softc *sc; 822cfe870aSOleksandr Tymoshenko phandle_t node; 832cfe870aSOleksandr Tymoshenko 842cfe870aSOleksandr Tymoshenko sc = device_get_softc(dev); 852cfe870aSOleksandr Tymoshenko sc->dev = dev; 862cfe870aSOleksandr Tymoshenko 872cfe870aSOleksandr Tymoshenko node = ofw_bus_get_node(dev); 882cfe870aSOleksandr Tymoshenko OF_device_register_xref(OF_xref_from_node(node), dev); 892cfe870aSOleksandr Tymoshenko 902cfe870aSOleksandr Tymoshenko return (0); 912cfe870aSOleksandr Tymoshenko } 922cfe870aSOleksandr Tymoshenko 932cfe870aSOleksandr Tymoshenko static int 942cfe870aSOleksandr Tymoshenko dummy_codec_detach(device_t dev) 952cfe870aSOleksandr Tymoshenko { 962cfe870aSOleksandr Tymoshenko 972cfe870aSOleksandr Tymoshenko return (0); 982cfe870aSOleksandr Tymoshenko } 992cfe870aSOleksandr Tymoshenko 1002cfe870aSOleksandr Tymoshenko static int 1012cfe870aSOleksandr Tymoshenko dummy_codec_dai_init(device_t dev, uint32_t format) 1022cfe870aSOleksandr Tymoshenko { 1032cfe870aSOleksandr Tymoshenko 1042cfe870aSOleksandr Tymoshenko return (0); 1052cfe870aSOleksandr Tymoshenko } 1062cfe870aSOleksandr Tymoshenko 1072cfe870aSOleksandr Tymoshenko static device_method_t dummy_codec_methods[] = { 1082cfe870aSOleksandr Tymoshenko /* Device interface */ 1092cfe870aSOleksandr Tymoshenko DEVMETHOD(device_probe, dummy_codec_probe), 1102cfe870aSOleksandr Tymoshenko DEVMETHOD(device_attach, dummy_codec_attach), 1112cfe870aSOleksandr Tymoshenko DEVMETHOD(device_detach, dummy_codec_detach), 1122cfe870aSOleksandr Tymoshenko 1132cfe870aSOleksandr Tymoshenko DEVMETHOD(audio_dai_init, dummy_codec_dai_init), 1142cfe870aSOleksandr Tymoshenko 1152cfe870aSOleksandr Tymoshenko DEVMETHOD_END 1162cfe870aSOleksandr Tymoshenko }; 1172cfe870aSOleksandr Tymoshenko 1182cfe870aSOleksandr Tymoshenko static driver_t dummy_codec_driver = { 1192cfe870aSOleksandr Tymoshenko "dummycodec", 1202cfe870aSOleksandr Tymoshenko dummy_codec_methods, 1212cfe870aSOleksandr Tymoshenko sizeof(struct dummy_codec_softc), 1222cfe870aSOleksandr Tymoshenko }; 1232cfe870aSOleksandr Tymoshenko 124*3390adfeSJohn Baldwin DRIVER_MODULE(dummy_codec, simplebus, dummy_codec_driver, 0, 0); 1252cfe870aSOleksandr Tymoshenko SIMPLEBUS_PNP_INFO(compat_data); 126