1*2e192b24SSimon Glass /* 2*2e192b24SSimon Glass * Copyright (C) 2012 Samsung Electronics 3*2e192b24SSimon Glass * Rajeshwari Shinde <rajeshwari.s@samsung.com> 4*2e192b24SSimon Glass * 5*2e192b24SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 6*2e192b24SSimon Glass */ 7*2e192b24SSimon Glass 8*2e192b24SSimon Glass #include <common.h> 9*2e192b24SSimon Glass #include <command.h> 10*2e192b24SSimon Glass #include <fdtdec.h> 11*2e192b24SSimon Glass #include <sound.h> 12*2e192b24SSimon Glass 13*2e192b24SSimon Glass DECLARE_GLOBAL_DATA_PTR; 14*2e192b24SSimon Glass 15*2e192b24SSimon Glass /* Initilaise sound subsystem */ 16*2e192b24SSimon Glass static int do_init(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) 17*2e192b24SSimon Glass { 18*2e192b24SSimon Glass int ret; 19*2e192b24SSimon Glass 20*2e192b24SSimon Glass ret = sound_init(gd->fdt_blob); 21*2e192b24SSimon Glass if (ret) { 22*2e192b24SSimon Glass printf("Initialise Audio driver failed\n"); 23*2e192b24SSimon Glass return CMD_RET_FAILURE; 24*2e192b24SSimon Glass } 25*2e192b24SSimon Glass 26*2e192b24SSimon Glass return 0; 27*2e192b24SSimon Glass } 28*2e192b24SSimon Glass 29*2e192b24SSimon Glass /* play sound from buffer */ 30*2e192b24SSimon Glass static int do_play(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) 31*2e192b24SSimon Glass { 32*2e192b24SSimon Glass int ret = 0; 33*2e192b24SSimon Glass int msec = 1000; 34*2e192b24SSimon Glass int freq = 400; 35*2e192b24SSimon Glass 36*2e192b24SSimon Glass if (argc > 1) 37*2e192b24SSimon Glass msec = simple_strtoul(argv[1], NULL, 10); 38*2e192b24SSimon Glass if (argc > 2) 39*2e192b24SSimon Glass freq = simple_strtoul(argv[2], NULL, 10); 40*2e192b24SSimon Glass 41*2e192b24SSimon Glass ret = sound_play(msec, freq); 42*2e192b24SSimon Glass if (ret) { 43*2e192b24SSimon Glass printf("play failed"); 44*2e192b24SSimon Glass return CMD_RET_FAILURE; 45*2e192b24SSimon Glass } 46*2e192b24SSimon Glass 47*2e192b24SSimon Glass return 0; 48*2e192b24SSimon Glass } 49*2e192b24SSimon Glass 50*2e192b24SSimon Glass static cmd_tbl_t cmd_sound_sub[] = { 51*2e192b24SSimon Glass U_BOOT_CMD_MKENT(init, 0, 1, do_init, "", ""), 52*2e192b24SSimon Glass U_BOOT_CMD_MKENT(play, 2, 1, do_play, "", ""), 53*2e192b24SSimon Glass }; 54*2e192b24SSimon Glass 55*2e192b24SSimon Glass /* process sound command */ 56*2e192b24SSimon Glass static int do_sound(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) 57*2e192b24SSimon Glass { 58*2e192b24SSimon Glass cmd_tbl_t *c; 59*2e192b24SSimon Glass 60*2e192b24SSimon Glass if (argc < 1) 61*2e192b24SSimon Glass return CMD_RET_USAGE; 62*2e192b24SSimon Glass 63*2e192b24SSimon Glass /* Strip off leading 'sound' command argument */ 64*2e192b24SSimon Glass argc--; 65*2e192b24SSimon Glass argv++; 66*2e192b24SSimon Glass 67*2e192b24SSimon Glass c = find_cmd_tbl(argv[0], &cmd_sound_sub[0], ARRAY_SIZE(cmd_sound_sub)); 68*2e192b24SSimon Glass 69*2e192b24SSimon Glass if (c) 70*2e192b24SSimon Glass return c->cmd(cmdtp, flag, argc, argv); 71*2e192b24SSimon Glass else 72*2e192b24SSimon Glass return CMD_RET_USAGE; 73*2e192b24SSimon Glass } 74*2e192b24SSimon Glass 75*2e192b24SSimon Glass U_BOOT_CMD( 76*2e192b24SSimon Glass sound, 4, 1, do_sound, 77*2e192b24SSimon Glass "sound sub-system", 78*2e192b24SSimon Glass "init - initialise the sound driver\n" 79*2e192b24SSimon Glass "sound play [len] [freq] - play a sound for len ms at freq hz\n" 80*2e192b24SSimon Glass ); 81