xref: /freebsd/sys/dev/sound/fdt/dummy_codec.c (revision 3390adfe4200c19fe86fa690c9e77f9b58d7288a)
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