uboot/cmd/sound.c
<<
>>
Prefs
   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