Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.17.
  1// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
  2/*
  3 * Copyright 2021 NXP
  4 *
  5 */
  6#include <linux/kernel.h>
  7#include <linux/fsl/mc.h>
  8
  9#include "fsl-mc-private.h"
 10
 11static int fsl_mc_get_open_cmd_id(const char *type)
 12{
 13	static const struct {
 14		int cmd_id;
 15		const char *type;
 16	} dev_ids[] = {
 17		{ DPRTC_CMDID_OPEN, "dprtc" },
 18		{ DPRC_CMDID_OPEN, "dprc" },
 19		{ DPNI_CMDID_OPEN, "dpni" },
 20		{ DPIO_CMDID_OPEN, "dpio" },
 21		{ DPSW_CMDID_OPEN, "dpsw" },
 22		{ DPBP_CMDID_OPEN, "dpbp" },
 23		{ DPCON_CMDID_OPEN, "dpcon" },
 24		{ DPMCP_CMDID_OPEN, "dpmcp" },
 25		{ DPMAC_CMDID_OPEN, "dpmac" },
 26		{ DPSECI_CMDID_OPEN, "dpseci" },
 27		{ DPDMUX_CMDID_OPEN, "dpdmux" },
 28		{ DPDCEI_CMDID_OPEN, "dpdcei" },
 29		{ DPAIOP_CMDID_OPEN, "dpaiop" },
 30		{ DPCI_CMDID_OPEN, "dpci" },
 31		{ DPDMAI_CMDID_OPEN, "dpdmai" },
 32		{ DPDBG_CMDID_OPEN, "dpdbg" },
 33		{ 0, NULL }
 34	};
 35	int i;
 36
 37	for (i = 0; dev_ids[i].type; i++)
 38		if (!strcmp(dev_ids[i].type, type))
 39			return dev_ids[i].cmd_id;
 40
 41	return -1;
 42}
 43
 44int fsl_mc_obj_open(struct fsl_mc_io *mc_io,
 45		    u32 cmd_flags,
 46		    int obj_id,
 47		    char *obj_type,
 48		    u16 *token)
 49{
 50	struct fsl_mc_command cmd = { 0 };
 51	struct fsl_mc_obj_cmd_open *cmd_params;
 52	int err = 0;
 53	int cmd_id = fsl_mc_get_open_cmd_id(obj_type);
 54
 55	if (cmd_id == -1)
 56		return -ENODEV;
 57
 58	/* prepare command */
 59	cmd.header = mc_encode_cmd_header(cmd_id, cmd_flags, 0);
 60	cmd_params = (struct fsl_mc_obj_cmd_open *)cmd.params;
 61	cmd_params->obj_id = cpu_to_le32(obj_id);
 62
 63	/* send command to mc*/
 64	err = mc_send_command(mc_io, &cmd);
 65	if (err)
 66		return err;
 67
 68	/* retrieve response parameters */
 69	*token = mc_cmd_hdr_read_token(&cmd);
 70
 71	return err;
 72}
 73EXPORT_SYMBOL_GPL(fsl_mc_obj_open);
 74
 75int fsl_mc_obj_close(struct fsl_mc_io *mc_io,
 76		     u32 cmd_flags,
 77		     u16 token)
 78{
 79	struct fsl_mc_command cmd = { 0 };
 80
 81	/* prepare command */
 82	cmd.header = mc_encode_cmd_header(OBJ_CMDID_CLOSE, cmd_flags,
 83					  token);
 84
 85	/* send command to mc*/
 86	return mc_send_command(mc_io, &cmd);
 87}
 88EXPORT_SYMBOL_GPL(fsl_mc_obj_close);
 89
 90int fsl_mc_obj_reset(struct fsl_mc_io *mc_io,
 91		     u32 cmd_flags,
 92		     u16 token)
 93{
 94	struct fsl_mc_command cmd = { 0 };
 95
 96	/* prepare command */
 97	cmd.header = mc_encode_cmd_header(OBJ_CMDID_RESET, cmd_flags,
 98					  token);
 99
100	/* send command to mc*/
101	return mc_send_command(mc_io, &cmd);
102}
103EXPORT_SYMBOL_GPL(fsl_mc_obj_reset);