xref: /openbmc/u-boot/cmd/sound.c (revision d4901898)
183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
22e192b24SSimon Glass /*
32e192b24SSimon Glass  * Copyright (C) 2012 Samsung Electronics
42e192b24SSimon Glass  * Rajeshwari Shinde <rajeshwari.s@samsung.com>
52e192b24SSimon Glass  */
62e192b24SSimon Glass 
72e192b24SSimon Glass #include <common.h>
82e192b24SSimon Glass #include <command.h>
9*d4901898SSimon Glass #include <dm.h>
102e192b24SSimon Glass #include <fdtdec.h>
112e192b24SSimon Glass #include <sound.h>
122e192b24SSimon Glass 
132e192b24SSimon Glass DECLARE_GLOBAL_DATA_PTR;
142e192b24SSimon Glass 
152e192b24SSimon Glass /* Initilaise sound subsystem */
162e192b24SSimon Glass static int do_init(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
172e192b24SSimon Glass {
18*d4901898SSimon Glass #ifdef CONFIG_DM_SOUND
19*d4901898SSimon Glass 	struct udevice *dev;
20*d4901898SSimon Glass #endif
212e192b24SSimon Glass 	int ret;
222e192b24SSimon Glass 
23*d4901898SSimon Glass #ifdef CONFIG_DM_SOUND
24*d4901898SSimon Glass 	ret = uclass_first_device_err(UCLASS_SOUND, &dev);
25*d4901898SSimon Glass 	if (!ret)
26*d4901898SSimon Glass 		ret = sound_setup(dev);
27*d4901898SSimon Glass #else
282e192b24SSimon Glass 	ret = sound_init(gd->fdt_blob);
29*d4901898SSimon Glass #endif
302e192b24SSimon Glass 	if (ret) {
31*d4901898SSimon Glass 		printf("Initialise Audio driver failed (ret=%d)\n", ret);
322e192b24SSimon Glass 		return CMD_RET_FAILURE;
332e192b24SSimon Glass 	}
342e192b24SSimon Glass 
352e192b24SSimon Glass 	return 0;
362e192b24SSimon Glass }
372e192b24SSimon Glass 
382e192b24SSimon Glass /* play sound from buffer */
392e192b24SSimon Glass static int do_play(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
402e192b24SSimon Glass {
41*d4901898SSimon Glass #ifdef CONFIG_DM_SOUND
42*d4901898SSimon Glass 	struct udevice *dev;
43*d4901898SSimon Glass #endif
442e192b24SSimon Glass 	int ret = 0;
452e192b24SSimon Glass 	int msec = 1000;
462e192b24SSimon Glass 	int freq = 400;
472e192b24SSimon Glass 
482e192b24SSimon Glass 	if (argc > 1)
492e192b24SSimon Glass 		msec = simple_strtoul(argv[1], NULL, 10);
502e192b24SSimon Glass 	if (argc > 2)
512e192b24SSimon Glass 		freq = simple_strtoul(argv[2], NULL, 10);
522e192b24SSimon Glass 
53*d4901898SSimon Glass #ifdef CONFIG_DM_SOUND
54*d4901898SSimon Glass 	ret = uclass_first_device_err(UCLASS_SOUND, &dev);
55*d4901898SSimon Glass 	if (!ret)
56*d4901898SSimon Glass 		ret = sound_beep(dev, msec, freq);
57*d4901898SSimon Glass #else
582e192b24SSimon Glass 	ret = sound_play(msec, freq);
59*d4901898SSimon Glass #endif
602e192b24SSimon Glass 	if (ret) {
61*d4901898SSimon Glass 		printf("Sound device failed to play (err=%d)\n", ret);
622e192b24SSimon Glass 		return CMD_RET_FAILURE;
632e192b24SSimon Glass 	}
642e192b24SSimon Glass 
652e192b24SSimon Glass 	return 0;
662e192b24SSimon Glass }
672e192b24SSimon Glass 
682e192b24SSimon Glass static cmd_tbl_t cmd_sound_sub[] = {
692e192b24SSimon Glass 	U_BOOT_CMD_MKENT(init, 0, 1, do_init, "", ""),
702e192b24SSimon Glass 	U_BOOT_CMD_MKENT(play, 2, 1, do_play, "", ""),
712e192b24SSimon Glass };
722e192b24SSimon Glass 
732e192b24SSimon Glass /* process sound command */
742e192b24SSimon Glass static int do_sound(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
752e192b24SSimon Glass {
762e192b24SSimon Glass 	cmd_tbl_t *c;
772e192b24SSimon Glass 
782e192b24SSimon Glass 	if (argc < 1)
792e192b24SSimon Glass 		return CMD_RET_USAGE;
802e192b24SSimon Glass 
812e192b24SSimon Glass 	/* Strip off leading 'sound' command argument */
822e192b24SSimon Glass 	argc--;
832e192b24SSimon Glass 	argv++;
842e192b24SSimon Glass 
852e192b24SSimon Glass 	c = find_cmd_tbl(argv[0], &cmd_sound_sub[0], ARRAY_SIZE(cmd_sound_sub));
862e192b24SSimon Glass 
872e192b24SSimon Glass 	if (c)
882e192b24SSimon Glass 		return c->cmd(cmdtp, flag, argc, argv);
892e192b24SSimon Glass 	else
902e192b24SSimon Glass 		return CMD_RET_USAGE;
912e192b24SSimon Glass }
922e192b24SSimon Glass 
932e192b24SSimon Glass U_BOOT_CMD(
942e192b24SSimon Glass 	sound, 4, 1, do_sound,
952e192b24SSimon Glass 	"sound sub-system",
962e192b24SSimon Glass 	"init - initialise the sound driver\n"
972e192b24SSimon Glass 	"sound play [len] [freq] - play a sound for len ms at freq hz\n"
982e192b24SSimon Glass );
99