xref: /freebsd/sys/dev/sound/fdt/dummy_codec.c (revision fdafd315ad0d0f28a11b9fb4476a9ab059c62b92)
12cfe870aSOleksandr Tymoshenko /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
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 
282cfe870aSOleksandr Tymoshenko #include <sys/param.h>
292cfe870aSOleksandr Tymoshenko #include <sys/systm.h>
302cfe870aSOleksandr Tymoshenko #include <sys/bus.h>
312cfe870aSOleksandr Tymoshenko #include <sys/kernel.h>
322cfe870aSOleksandr Tymoshenko #include <sys/lock.h>
332cfe870aSOleksandr Tymoshenko #include <sys/module.h>
342cfe870aSOleksandr Tymoshenko #include <sys/mutex.h>
352cfe870aSOleksandr Tymoshenko #include <sys/rman.h>
362cfe870aSOleksandr Tymoshenko #include <sys/resource.h>
372cfe870aSOleksandr Tymoshenko #include <machine/bus.h>
382cfe870aSOleksandr Tymoshenko 
392cfe870aSOleksandr Tymoshenko #include <dev/ofw/ofw_bus.h>
402cfe870aSOleksandr Tymoshenko #include <dev/ofw/ofw_bus_subr.h>
412cfe870aSOleksandr Tymoshenko 
422cfe870aSOleksandr Tymoshenko #include "opt_snd.h"
432cfe870aSOleksandr Tymoshenko #include <dev/sound/pcm/sound.h>
442cfe870aSOleksandr Tymoshenko #include <dev/sound/fdt/audio_dai.h>
452cfe870aSOleksandr Tymoshenko #include "audio_dai_if.h"
462cfe870aSOleksandr Tymoshenko 
472cfe870aSOleksandr Tymoshenko static struct ofw_compat_data compat_data[] = {
482cfe870aSOleksandr Tymoshenko 	{ "dummy-codec",	1},
492cfe870aSOleksandr Tymoshenko 	{ NULL,			0 }
502cfe870aSOleksandr Tymoshenko };
512cfe870aSOleksandr Tymoshenko 
522cfe870aSOleksandr Tymoshenko struct dummy_codec_softc {
532cfe870aSOleksandr Tymoshenko 	device_t	dev;
542cfe870aSOleksandr Tymoshenko };
552cfe870aSOleksandr Tymoshenko 
562cfe870aSOleksandr Tymoshenko static int dummy_codec_probe(device_t dev);
572cfe870aSOleksandr Tymoshenko static int dummy_codec_attach(device_t dev);
582cfe870aSOleksandr Tymoshenko static int dummy_codec_detach(device_t dev);
592cfe870aSOleksandr Tymoshenko 
602cfe870aSOleksandr Tymoshenko static int
dummy_codec_probe(device_t dev)612cfe870aSOleksandr Tymoshenko dummy_codec_probe(device_t dev)
622cfe870aSOleksandr Tymoshenko {
632cfe870aSOleksandr Tymoshenko 	if (!ofw_bus_status_okay(dev))
642cfe870aSOleksandr Tymoshenko 		return (ENXIO);
652cfe870aSOleksandr Tymoshenko 
662cfe870aSOleksandr Tymoshenko 	if (!ofw_bus_search_compatible(dev, compat_data)->ocd_data)
672cfe870aSOleksandr Tymoshenko 		return (ENXIO);
682cfe870aSOleksandr Tymoshenko 
692cfe870aSOleksandr Tymoshenko 	device_set_desc(dev, "Dummy Codec");
702cfe870aSOleksandr Tymoshenko 	return (BUS_PROBE_DEFAULT);
712cfe870aSOleksandr Tymoshenko }
722cfe870aSOleksandr Tymoshenko 
732cfe870aSOleksandr Tymoshenko static int
dummy_codec_attach(device_t dev)742cfe870aSOleksandr Tymoshenko dummy_codec_attach(device_t dev)
752cfe870aSOleksandr Tymoshenko {
762cfe870aSOleksandr Tymoshenko 	struct dummy_codec_softc *sc;
772cfe870aSOleksandr Tymoshenko 	phandle_t node;
782cfe870aSOleksandr Tymoshenko 
792cfe870aSOleksandr Tymoshenko 	sc = device_get_softc(dev);
802cfe870aSOleksandr Tymoshenko 	sc->dev = dev;
812cfe870aSOleksandr Tymoshenko 
822cfe870aSOleksandr Tymoshenko 	node = ofw_bus_get_node(dev);
832cfe870aSOleksandr Tymoshenko 	OF_device_register_xref(OF_xref_from_node(node), dev);
842cfe870aSOleksandr Tymoshenko 
852cfe870aSOleksandr Tymoshenko 	return (0);
862cfe870aSOleksandr Tymoshenko }
872cfe870aSOleksandr Tymoshenko 
882cfe870aSOleksandr Tymoshenko static int
dummy_codec_detach(device_t dev)892cfe870aSOleksandr Tymoshenko dummy_codec_detach(device_t dev)
902cfe870aSOleksandr Tymoshenko {
912cfe870aSOleksandr Tymoshenko 
922cfe870aSOleksandr Tymoshenko 	return (0);
932cfe870aSOleksandr Tymoshenko }
942cfe870aSOleksandr Tymoshenko 
952cfe870aSOleksandr Tymoshenko static int
dummy_codec_dai_init(device_t dev,uint32_t format)962cfe870aSOleksandr Tymoshenko dummy_codec_dai_init(device_t dev, uint32_t format)
972cfe870aSOleksandr Tymoshenko {
982cfe870aSOleksandr Tymoshenko 
992cfe870aSOleksandr Tymoshenko 	return (0);
1002cfe870aSOleksandr Tymoshenko }
1012cfe870aSOleksandr Tymoshenko 
1022cfe870aSOleksandr Tymoshenko static device_method_t dummy_codec_methods[] = {
1032cfe870aSOleksandr Tymoshenko 	/* Device interface */
1042cfe870aSOleksandr Tymoshenko 	DEVMETHOD(device_probe,		dummy_codec_probe),
1052cfe870aSOleksandr Tymoshenko 	DEVMETHOD(device_attach,	dummy_codec_attach),
1062cfe870aSOleksandr Tymoshenko 	DEVMETHOD(device_detach,	dummy_codec_detach),
1072cfe870aSOleksandr Tymoshenko 
1082cfe870aSOleksandr Tymoshenko 	DEVMETHOD(audio_dai_init,	dummy_codec_dai_init),
1092cfe870aSOleksandr Tymoshenko 
1102cfe870aSOleksandr Tymoshenko 	DEVMETHOD_END
1112cfe870aSOleksandr Tymoshenko };
1122cfe870aSOleksandr Tymoshenko 
1132cfe870aSOleksandr Tymoshenko static driver_t dummy_codec_driver = {
1142cfe870aSOleksandr Tymoshenko 	"dummycodec",
1152cfe870aSOleksandr Tymoshenko 	dummy_codec_methods,
1162cfe870aSOleksandr Tymoshenko 	sizeof(struct dummy_codec_softc),
1172cfe870aSOleksandr Tymoshenko };
1182cfe870aSOleksandr Tymoshenko 
1193390adfeSJohn Baldwin DRIVER_MODULE(dummy_codec, simplebus, dummy_codec_driver, 0, 0);
1202cfe870aSOleksandr Tymoshenko SIMPLEBUS_PNP_INFO(compat_data);
121