1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * Copyright (C) 2012 Samsung Electronics 4 * Rajeshwari Shinde <rajeshwari.s@samsung.com> 5 */ 6 7#include <common.h> 8#include <command.h> 9#include <dm.h> 10#include <fdtdec.h> 11#include <sound.h> 12#include <asm/global_data.h> 13 14DECLARE_GLOBAL_DATA_PTR; 15 16/* Initilaise sound subsystem */ 17static int do_init(struct cmd_tbl *cmdtp, int flag, int argc, 18 char *const argv[]) 19{ 20 struct udevice *dev; 21 int ret; 22 23 ret = uclass_first_device_err(UCLASS_SOUND, &dev); 24 if (!ret) 25 ret = sound_setup(dev); 26 if (ret) { 27 printf("Initialise Audio driver failed (ret=%d)\n", ret); 28 return CMD_RET_FAILURE; 29 } 30 31 return 0; 32} 33 34/* play sound from buffer */ 35static int do_play(struct cmd_tbl *cmdtp, int flag, int argc, 36 char *const argv[]) 37{ 38 struct udevice *dev; 39 int ret = 0; 40 int msec = 1000; 41 int freq = 400; 42 bool first = true; 43 44 ret = uclass_first_device_err(UCLASS_SOUND, &dev); 45 if (ret) 46 goto err; 47 --argc; 48 ++argv; 49 while (argc || first) { 50 first = false; 51 if (argc) { 52 msec = dectoul(argv[0], NULL); 53 --argc; 54 ++argv; 55 } 56 if (argc) { 57 freq = dectoul(argv[0], NULL); 58 --argc; 59 ++argv; 60 } 61 ret = sound_beep(dev, msec, freq); 62 if (ret) 63 goto err; 64 } 65 return 0; 66 67err: 68 printf("Sound device failed to play (err=%d)\n", ret); 69 return CMD_RET_FAILURE; 70} 71 72static struct cmd_tbl cmd_sound_sub[] = { 73 U_BOOT_CMD_MKENT(init, 0, 1, do_init, "", ""), 74 U_BOOT_CMD_MKENT(play, INT_MAX, 1, do_play, "", ""), 75}; 76 77/* process sound command */ 78static int do_sound(struct cmd_tbl *cmdtp, int flag, int argc, 79 char *const argv[]) 80{ 81 struct cmd_tbl *c; 82 83 if (argc < 1) 84 return CMD_RET_USAGE; 85 86 /* Strip off leading 'sound' command argument */ 87 argc--; 88 argv++; 89 90 c = find_cmd_tbl(argv[0], &cmd_sound_sub[0], ARRAY_SIZE(cmd_sound_sub)); 91 92 if (c) 93 return c->cmd(cmdtp, flag, argc, argv); 94 else 95 return CMD_RET_USAGE; 96} 97 98U_BOOT_CMD( 99 sound, INT_MAX, 1, do_sound, 100 "sound sub-system", 101 "init - initialise the sound driver\n" 102 "sound play [[[-q|-s] len [freq]] ...] - play sounds\n" 103 " len - duration in ms\n" 104 " freq - frequency in Hz\n" 105); 106