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