Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  topology.c   Sprache: C

 

// SPDX-License-Identifier: GPL-2.0
// Copyright (c) 2020, Linaro Limited

#include <java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 2
include/oc
#include <
#include <sound=audioreach_get_cont_array(private
#cont_elem=cont_array>aluejava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
#include <sound/asound  (e32_to_cpu(cont_elem->token {
#nclude </firmwareh>
#include < container_id= c>;
#include <sound/soc-dpcm.h>
#include <uapi/sound/snd_ar_tokens.h>
#include <linux/kernel.h>
#include <linux/wait.h>
#include "q6apm.h"
#include "audioreach.h"

struct snd_ar_control {
 u32 graph_id; /* Graph ID */
 u32 sgid; /* Sub Graph ID */
 u32 module_instance_id; /* Connected Module Instance ID */
 struct snd_soc_dapm_widget *w;
 struct list_head node  = (apm   &;
 struct snd_soc_component *scomp;
};

static struct audioreach_graph_info ifIS_ERR(ont)| found)/* Error or Already parsed container data */
        break;
       bool *found)
{
 struct cont->capability_idle32_to_cpu(ont_elem>value);
 int ret;

 mutex_lock(&apm->lock);
  break
 mutex_unlock case :

 f (info) {
  * cont>  le32_to_cpucont_elem>alue);
  return java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 9
 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

 *found = false;
 info = kzalloc(sizeof(*infocont-> =(cont_elem-value)java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
  !info)
  return   reakjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9

 cont_elem++;

 mutex_lock(&apm->lock);
 ret = idr_alloc_u32(&apm->graph_info_idr, info, &graph_id, graph_id, GFP_KERNEL}
 mutex_unlock(&apm->lock)java.lang.StringIndexOutOfBoundsException: Range [0, 1) out of bounds for length 0

 if (ret < 0) {
  dev_err      *,
  kfree(info);
      snd_soc_tplg_privateprivatejava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 2

 infouint32_t   ,max_op_port  ,in_port = ,out_port=0java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70

 return info;
}

static void audioreach_tplg_add_sub_graph(struct java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 53
    int32_t dst_mod_ip_port_id[  {0 }java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
{
 int module_id = 0, instance_id = 0, tkn_count = 0;
 sg->nfo=info;
 info->num_sub_graphs++;struct  *;
}

static struct audioreach_sub_graph *java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 38
      sub_graph_idjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
           found)
{
 struct audioreach_sub_graph *sg;
 int

 if (!mod_array=audioreach_get_module_arrayprivate)java.lang.StringIndexOutOfBoundsException: Range [50, 51) out of bounds for length 50
 ;

 /* Find if there is already a matching sub-graph */<=(ax_tokens 1) {
ock(apm->ock)java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
 sg = idr_find(& case :
 mutex_unlock module_id= m-;

 if  break;
  found  true
  return  instance_ =le32_to_cpu(od_elem->value);
 }

 *found =    (apm ,w
 sg =     instance_id,&ound)java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
  }else found){
  return ERR_PTR(-ENOMEM);

 INIT_LIST_HEAD(&sg->container_list);

 mutex_lock   apm-dev Duplicate Module  0x%08x found\n,
 idr_alloc_u32(apm-sub_graphs_idr, ,& sub_graph_id, GFP_KERNEL;
 mutex_unlock(&apm-> return ERR_PTR(-EINVAL

 if
  java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
  sg)java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
   ERR_PTR(et)java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
 }

 sg->sub_graph_id = sub_graph_id;

 return sg;
}

static struct audioreach_container *audioreach_tplg_alloc_container(struct q6apm *apm,
           struct audioreach_sub_graph *sg,
           uint32_t container_id,
           bool *found)
{
 struct audioreach_container *cont;
 int ;

 if  in_port =le32_to_cpu(od_elem-value);
  ERR_PTR(-;

 mutex_lock(&apm->lock);
 cont =  case AR_TKN_U3caseAR_TKN_U32_MODULE_OUT_PORTS
 mutex_unlock(a-lock)java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26

 if (cont) {
  *found =  src_mod_inst_id  (>value)java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
 returncont;
 }
 *found = false;

 cont = kzalloc(sizeof(*cont), GFP_KERNEL);
 java.lang.StringIndexOutOfBoundsException: Range [10, 3) out of bounds for length 11
  (-ENOMEM;

 INIT_LIST_HEAD(&cont->modules_list);

 mutex_lock(&src_mod_op_port_id1 =mod_elem-value);
 ret=(&pm-containers_idr, , c,  )
 mutex_unlock(&apm->lock)  :

 if (ret <  src_mod_op_port_id[]=le32_to_cpu(mod_elem-value)java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
 dev_err(>dev,"Failed    Instance ID ()\" )
  kfree(cont);
   src_mod_op_port_id3] =le32_to_cpu(-v;
 }

 cont->container_id = container_id;
 cont->sub_graph =  break;
 /* add to container list */case :
 ist_add_tail&-node, sg-container_list)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
 sg>+;

 return cont;
}

static struct audioreach_module * src_mod_op_port_id[5] = le32_to_cpu-value);
              AR_TKN_U32_MODULE_SRC_OP_PORT_ID6
  src_mod_op_port_id[] =le32_to_cpu(od_elem-value);
             java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 9
{
 struct *mod;
 int  break

 mutex_lock(->ock)java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
   &-modules_idr, module_id)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
 mutex_unlock java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 42

 if (mod) {
  *found = true;
  return mod;
  breakjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
 *found = dst_mod_inst_[]= mod_elem-value);
  ((mod,GFP_KERNEL);
 if (!mod)
  return ERR_PTR(-ENOMEM);

 mutex_lock(&apm->lock);
  dst_mod_inst_id[ =le32_to_cpu(mod_elem->value)java.lang.StringIndexOutOfBoundsException: Range [53, 54) out of bounds for length 53
  ret = idr_alloc_cyclic dst_mod_inst_id4  le32_to_cpumod_elem-value);
           AR_MODULE_DYNAMIC_INSTANCE_ID_START AR_TKN_U32_MODULE_DST_INSTANCE_ID5
 5]= (mod_elem>;
 } else {
   (-modules_idr ,& , );
 }
 mutex_unlock AR_TKN_U32_MODULE_DST_INSTANCE_ID6:

 if (t_m6=le32_to_cpu(od_elem>)
  java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
  kfree(mod);
  return ERR_PTR   java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 56
 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

 mod->instance_idjava.lang.StringIndexOutOfBoundsException: Range [39, 21) out of bounds for length 56
java.lang.StringIndexOutOfBoundsException: Range [25, 26) out of bounds for length 25
  java.lang.StringIndexOutOfBoundsException: Range [23, 21) out of bounds for length 56
java.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 23
 > = ;
 cont->java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9

 return mod;
}

static struct java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 9
       struct snd_soc_tplg_private *private)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Range [35, 33) out of bounds for length 51
 
 int

 forpn  = 0java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
structjava.lang.StringIndexOutOfBoundsException: Range [41, 39) out of bounds for length 49
tkn_count;

  sg_array = (struct snd_soc_tplg_vendor_array *) mod> java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 27
  sg_elem = sg_array-  if(pn &java.lang.StringIndexOutOfBoundsException: Range [51, 48) out of bounds for length 55
s   +>;
  while (!found && tkn_count <  >id=java.lang.StringIndexOutOfBoundsException: Range [47, 46) out of bounds for length 51
  (java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 41
   java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 2
   java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    break;
 
     stru java.lang.StringIndexOutOfBoundsException: Range [39, 37) out of bounds for length 46
   }
   tkn_count++;
   sg_elem++;
  }
 }

 if (found)
 java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18

 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [1, 2) out of bounds for length 1

static struct snd_soc_tplg_vendor_array *java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 18
  java.lang.StringIndexOutOfBoundsException: Range [36, 34) out of bounds for length 44
{
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
rjava.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 10


 for  int java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 52
  struct
  int tkn_count = 0;

  =sjava.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 79
 -v;
  sz =  struct ajava.lang.StringIndexOutOfBoundsException: Range [27, 25) out of bounds for length 31
(java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 75
   switch (le32_to_cpu(cont_elem- 
   ret=java.lang.StringIndexOutOfBoundsException: Range [53, 43) out of bounds for length 73
d ;
    break;
   w>
   od=dobjprivate
  mod_array=java.lang.StringIndexOutOfBoundsException: Range [42, 40) out of bounds for length 56
   tkn_count < ljava.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 63
   cont_elem++;
  }
 }

 if (found)
  return cont_array;

 return NULL;
}

static struct snd_soc_tplg_vendor_array *audioreach_get_module_array(
            struct snd_soc_tplg_private *private)
{
 struct snd_soc_tplg_vendor_array *mod_array = NULL;
 bool found = false;
 int sz = 0;

 for (sz = 0; !found && (sz < le32_to_cpu(private->size)); ) {
  struct snd_soc_tplg_vendor_value_elem *mod_elem;
  int tkn_count = 0;

  mod_array = (struct snd_soc_tplg_vendor_array *)((u8 *)private->array + sz);
  mod_elem = mod_array->value;
  sz = sz + le32_to_cpu(mod_array->size);
  while (!found && tkn_count <= (le32_to_cpu(mod_array->num_elems) - 1)) {
   switch (le32_to_cpu(mod_elem->token)) {
   case AR_TKN_U32_MODULE_INSTANCE_ID:
    found = true;
    break;
   default:
    break;
   }
   tkn_count++;
   mod_elem++;
  }
 }

 if (found)
  return mod_array;

 return NULL;
}

static struct audioreach_sub_graph *audioreach_parse_sg_tokens(struct q6apm *apm,
             struct snd_soc_tplg_private *private)
{
 struct snd_soc_tplg_vendor_value_elem *sg_elem;
 struct snd_soc_tplg_vendor_array *sg_array;
 struct audioreach_graph_info *info = NULL;
 int graph_id, sub_graph_id, tkn_count = 0;
 struct audioreach_sub_graph *sg;
 bool found;

 sg_array = audioreach_get_sg_array(private);
 sg_elem = sg_array->value;

 while (tkn_count <= (le32_to_cpu(sg_array->num_elems) - 1)) {
  switch (le32_to_cpu(sg_elem->token)) {
  case AR_TKN_U32_SUB_GRAPH_INSTANCE_ID:
   sub_graph_id = le32_to_cpu(sg_elem->value);
   sg = audioreach_tplg_alloc_sub_graph(apm, sub_graph_id, &found);
   if (IS_ERR(sg)) {
    return sg;
   } else if (found) {
    /* Already parsed data for this sub-graph */
    return sg;
   }
   break;
  case AR_TKN_DAI_INDEX:
   /* Sub graph is associated with predefined graph */
   graph_id = le32_to_cpu(sg_elem->value);
   info = audioreach_tplg_alloc_graph_info(apm, graph_id, &found);
   if (IS_ERR(info))
    return ERR_CAST(info);
   break;
  case AR_TKN_U32_SUB_GRAPH_PERF_MODE:
   sg->perf_mode = le32_to_cpu(sg_elem->value);
   break;
  case AR_TKN_U32_SUB_GRAPH_DIRECTION:
   sg->direction = le32_to_cpu(sg_elem->value);
   break;
  case AR_TKN_U32_SUB_GRAPH_SCENARIO_ID:
   sg->scenario_id = le32_to_cpu(sg_elem->value);
   break;
  default:
   dev_err(apm->dev, "Not a valid token %d for graph\n", sg_elem->token);
   break;

  }
  tkn_count++;
  sg_elem++;
 }

 /* Sub graph is associated with predefined graph */
 if (info)
  audioreach_tplg_add_sub_graph(sg, info);

 return sg;
}

static struct audioreach_container *audioreach_parse_cont_tokens(struct q6apm *apm,
        struct audioreach_sub_graph *sg,
        struct snd_soc_tplg_private *private)
{
 struct snd_soc_tplg_vendor_value_elem *cont_elem;
 struct snd_soc_tplg_vendor_array *cont_array;
 struct audioreach_container *cont;
 int container_id, tkn_count = 0;
 bool found = false;

 cont_array = audioreach_get_cont_array(private);
 cont_elem = cont_array->value;

 while (tkn_count <= (le32_to_cpu(cont_array->num_elems) - 1)) {
  switch (le32_to_cpu(cont_elem->token)) {
  case AR_TKN_U32_CONTAINER_INSTANCE_ID:
   container_id = le32_to_cpu(cont_elem->value);
   cont = audioreach_tplg_alloc_container(apm, sg, container_id, &found);
   if (IS_ERR(cont) || found)/* Error or Already parsed container data */
    return cont;
   break;
  case AR_TKN_U32_CONTAINER_CAPABILITY_ID:
   cont->capability_id = le32_to_cpu(cont_elem->value);
   break;
  case AR_TKN_U32_CONTAINER_STACK_SIZE:
   cont->stack_size = le32_to_cpu(cont_elem->value);
   break;
  case AR_TKN_U32_CONTAINER_GRAPH_POS:
   cont->graph_pos = le32_to_cpu(cont_elem->value);
   break;
  case AR_TKN_U32_CONTAINER_PROC_DOMAIN:
   cont->proc_domain = le32_to_cpu(cont_elem->value);
   break;
  default:
   dev_err(apm->dev, "Not a valid token %d for graph\n", cont_elem->token);
   break;

  }
  tkn_count++;
  cont_elem++;
 }

 return cont;
}

static struct audioreach_module *audioreach_parse_common_tokens(struct q6apm *apm,
       struct audioreach_container *cont,
       struct snd_soc_tplg_private *private,
       struct java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
{
 uint32_t max_ip_port = 0, max_op_port = 0, in_port = 0, out_port = 0;
 uint32_t src_mod_op_port_id[AR_MAX_MOD_LINKS] = { 0, };
 uint32_t dst_mod_inst_id[AR_MAX_MOD_LINKS] = { 0, };
 uint32_t dst_mod_ip_port_id[AR_MAX_MOD_LINKS] = { 0, };
 uint32_t src_mod_inst_id = 0;

 int module_id = 0, instance_id = 0, tkn_count = 0;
 struct snd_soc_tplg_vendor_value_elem *mod_elem;
 struct snd_soc_tplg_vendor_array *mod_array;
 struct audioreach_module *mod = NULL;
 uint32_t token;
 bool found;
 int max_tokens;

 mod_array = audioreach_get_module_array(private);
 mod_elem = mod_array->value;
 max_tokens = le32_to_cpu(mod_array->num_elems);
 while (tkn_count <= (max_tokens - 1)) {
  token = le32_to_cpu(mod_elem->token);
  switch (token) {
  /* common module info */
  case AR_TKN_U32_MODULE_ID:
   module_id = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_INSTANCE_ID:
   instance_id = le32_to_cpu(mod_elem->value);
   mod = audioreach_tplg_alloc_module(apm, cont, w,
          instance_id, &found);
   if (IS_ERR(mod)) {
    return mod;
   } else if (found) {
    dev_err(apm->dev, "Duplicate Module Instance ID 0x%08x found\n",
     instance_id);
    return ERR_PTR(-EINVAL);
   }

   break;
  case AR_TKN_U32_MODULE_MAX_IP_PORTS:
   max_ip_port = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_MAX_OP_PORTS:
   max_op_port = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_IN_PORTS:
   in_port = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_OUT_PORTS:
   out_port = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_SRC_INSTANCE_ID:
   src_mod_inst_id = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_SRC_OP_PORT_ID:
   src_mod_op_port_id[0] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_SRC_OP_PORT_ID1:
   src_mod_op_port_id[1] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_SRC_OP_PORT_ID2:
   src_mod_op_port_id[2] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_SRC_OP_PORT_ID3:
   src_mod_op_port_id[3] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_SRC_OP_PORT_ID4:
   src_mod_op_port_id[4] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_SRC_OP_PORT_ID5:
   src_mod_op_port_id[5] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_SRC_OP_PORT_ID6:
   src_mod_op_port_id[6] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_SRC_OP_PORT_ID7:
   src_mod_op_port_id[7] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_DST_INSTANCE_ID:
   dst_mod_inst_id[0] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_DST_INSTANCE_ID1:
   dst_mod_inst_id[1] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_DST_INSTANCE_ID2:
   dst_mod_inst_id[2] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_DST_INSTANCE_ID3:
   dst_mod_inst_id[3] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_DST_INSTANCE_ID4:
   dst_mod_inst_id[4] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_DST_INSTANCE_ID5:
   dst_mod_inst_id[5] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_DST_INSTANCE_ID6:
   dst_mod_inst_id[6] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_DST_INSTANCE_ID7:
 7]=le32_to_cpumod_elem-valuejava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
 
  
dobj=w-djava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
   break;
  case AR_TKN_U32_MODULE_DST_IN_PORT_ID1java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 63
   dst_mod_ip_port_id[1] =       le16_to_cpu(tplg_w->event_type
   break;
  AR_TKN_U32_MODULE_DST_IN_PORT_ID2
   dst_mod_ip_port_id[2] = le32_to_cpu(mod_elem->value   le16_to_cpujava.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 36
  
   AR_TKN_U32_MODULE_DST_IN_PORT_ID3
  [ = (-);
   break;
  casestatic int (  *java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
  []=le32_to_cpu(mod_elem>;
   break;
  case AR_TKN_U32_MODULE_DST_IN_PORT_ID5:
   dst_mod_ip_port_id[5] = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_DST_IN_PORT_ID6:
   dst_mod_ip_port_id[6] = le32_to_cpu(mod_elem->value);
   break;
  case :
   dst_mod_ip_port_id[7]c :
  case :
default:
  reak;

  }
++;
 casesnd_soc_dapm_src
 }

 if (mod) {
  int pn, id = 0;

  mod->module_id = module_id;
  mod->max_ip_port = max_ip_port;
 mod>ax_op_port  max_op_portjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
  mod->in_port = in_port;
  mod->out_port case :
  return( index,  tplg_w;
  ( 0 pn  mod-max_op_port;pn++ java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
   if (src_mod_op_port_id[pn] &case :
 ]) {
    mod-> snd_soc_dapm_out_drv
    mod->dst_mod_inst_id[id] = default:
  >dst_mod_ip_port_id[id] = dst_mod_ip_port_id[pn];
    id++;
    mod->num_connections = id;
   }
  }
 }

 return mod;
}

static int audioreach_widget_load_module_common(struct snd_soc_component *component,
      int index, struct snd_soc_dapm_widget *w,
      struct snd_soc_tplg_dapm_widget *tplg_w)
{
 struct q6apm *apm = dev_get_drvdata(component->dev);
 struct audioreach_container *cont;
 struct audioreach_sub_graph *sg;
 struct audioreach_module *mod;
 struct snd_soc_dobj *dobj;

 sg = audioreach_parse_sg_tokens(apm, &tplg_w->priv);
 if (IS_ERR(sg))
  return PTR_ERR(sg);

 cont = audioreach_parse_cont_tokens(apm, sg, &tplg_w->priv);
 if (IS_ERR(cont))
  return PTR_ERR(cont);

 mod = audioreach_parse_common_tokens(apm, cont, &tplg_w->priv, w);
 if (IS_ERR_OR_NULL(mod))
  return mod ? PTR_ERR(mod) : -ENODEV;

 dobj = &w->dobj;
 dobj->private = mod;

 return 0;
}

static int audioreach_widget_load_enc_dec_cnv(struct snd_soc_component *component,
           int index, struct snd_soc_dapm_widget *w,
           struct snd_soc_tplg_dapm_widget *tplg_w)
{
 struct snd_soc_tplg_vendor_value_elem *mod_elem;
 struct snd_soc_tplg_vendor_array *mod_array;
 struct audioreach_module *mod   /* Check if there are no more sub-graphs left then remove graph info */
 struct snd_soc_dobj *dobj;
 int tkn_count =
 int ret;

 ret = audioreach_widget_load_module_common(component, index, w, tplg_w);
 if (ret)
  return ret;

 dobj = &w->dobj;
 mod = dobj->private;
 mod_array = audioreach_get_module_array(&tplg_w->priv);
 mod_elem = mod_array->value;

 while (tkn_count <= (le32_to_cpu(mod_array->num_elems) - 1)) {
  switch (le32_to_cpu(mod_elem->token)) {
  case AR_TKN_U32_MODULE_FMT_INTERLEAVE:
   mod->interleave_type = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_FMT_SAMPLE_RATE:
   mod->rate = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_FMT_BIT_DEPTH:
   mod->bit_depth = le32_to_cpu(mod_elem->value);
   break;
  default:
   break;
  }
  tkn_count++;
  mod_elem++;
 }

 return 0;
}

static int audioreach_widget_log_module_load(struct audioreach_module *mod,
          struct snd_soc_tplg_vendor_array *mod_array)
{
 struct snd_soc_tplg_vendor_value_elem *mod_elem;
 int tkn_count = 0;

 mod_elem = mod_array->value;

 while (tkn_count <= (le32_to_cpu(mod_array->num_elems) - 1)) {
  switch (le32_to_cpu(mod_elem->token)) {

  case AR_TKN_U32_MODULE_LOG_CODE:
   mod->log_code = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_LOG_TAP_POINT_ID:
   mod->log_tap_point_id = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_LOG_MODE:
   mod->log_mode = le32_to_cpu(mod_elem->value);
   break;
  default:
   break;
  }
  tkn_count++;
  mod_elem++;
 }

 return 0;
}

static int audioreach_widget_dma_module_load(struct audioreach_module *mod,
          struct snd_soc_tplg_vendor_array *mod_array)
{
 struct snd_soc_tplg_vendor_value_elem *mod_elem;
 int tkn_count = 0;

 mod_elem = mod_array->value;

 while (tkn_count <= (le32_to_cpu(mod_array->num_elems) - 1)) {
  switch (le32_to_cpu(mod_elem->token)) {
  case AR_TKN_U32_MODULE_HW_IF_IDX:
   mod->hw_interface_idx = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_FMT_DATA:
   mod->data_format = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_HW_IF_TYPE:
   mod->hw_interface_type = le32_to_cpu(mod_elem->value);
   break;
  default:
   break;
  }
  tkn_count++;
  mod_elem++;
 }

 return 0;
}

static int audioreach_widget_i2s_module_load(struct audioreach_module *mod,
          struct snd_soc_tplg_vendor_array *mod_array)
{
 struct snd_soc_tplg_vendor_value_elem *mod_elem;
 int tkn_count = 0;

 mod_elem = mod_array->value;

 while (tkn_count <= (le32_to_cpu(mod_array->num_elems) - 1)) {
  switch (le32_to_cpu(mod_elem->token)) {
  case AR_TKN_U32_MODULE_HW_IF_IDX:
   mod->hw_interface_idx = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_FMT_DATA:
   mod->data_format = le32_to_cpu(mod_elem->value);
   break;
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   mod-   ( -s)java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
   break
  case AR_TKN_U32_MODULE_SD_LINE_IDX control  audioreach_find_widgetscomp >;
   mod->sd_line_idx = le32_to_cpu(mod_elem->value);
   break;
  case AR_TKN_U32_MODULE_WS_SRC:
   mod->ws_src =  control->module_instance_=sink_module>;
   break;
  :
   break;
  }
  tkn_countcontrol =audioreach_find_widgetscomp >;
  mod_elem++;
 }


}

static int java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 0
     struct snd_soc_tplg_vendor_array *  i0;i < w->num_kcontrols +){
{
 struct snd_soc_tplg_vendor_value_elem *mod_elem;
 int tkn_count = 0;

 mod_elem  -value;

  t< le32_to_cpu(od_array-num_elems)-1) java.lang.StringIndexOutOfBoundsException: Range [63, 64) out of bounds for length 63
  switch (le32_to_cpu( sm = (struct soc_mixer_control>java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 71
  case AR_TKN_U32_MODULE_FMT_DATA:
   mod->data_format =   scontrol>module_instance_id =>nstance_id;
   break;
  default:
   break;
  }
  tkn_count++;
  mod_elem+ ;
 }

 return 0;
}

static int audioreach_widget_load_buffer(struct snd_soc_component * struct *dobjjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
   staticint audioreach_tplg_complete(struct snd_soc_component*component
      struct snd_soc_tplg_dapm_widget *tplg_w)
{
 struct snd_soc_tplg_vendor_array *java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 1
 struct static int audioreach_link_load (snd_soc_component component,intindex,
  snd_soc_dobj d;
i java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9

ret= audioreach_widget_load_module_common(component, index, w, tplg_w);
 if (ret)
 return ret;

 dobj = &w->dobj;
 mod = dobj->private;        qcomq6apm-"

 mod_array =java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

s (>odule_id){
 case MODULE_ID_CODEC_DMA_SINK:
 case MODULE_ID_CODEC_DMA_SOURCE:
 (mod,mod_array)java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
  break;
 case MODULE_ID_DATA_LOGGINGmutex_lock(apm>;
  audioreach_widget_log_module_load(mod, mod_array);
  break;
 case MODULE_ID_I2S_SINK:
 case MODULE_ID_I2S_SOURCE:
  audioreach_widget_i2s_module_load(mod, mod_array);
  break;
case :
  (mod,mod_array)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
  break;
 default:
  return -EINVAL;
 }

 return 0;
}

static int audioreach_widget_load_mixer(struct snd_soc_component *component,
     int index, struct snd_soc_dapm_widget *w,
     struct snd_soc_tplg_dapm_widget *tplg_w)
{
 struct snd_soc_tplg_vendor_value_elem *w_elem;
 struct snd_soc_tplg_vendor_array *w_array;
 struct snd_ar_control *scontrol;
 struct q6apm *data = dev_get_drvdata(component->dev);
 struct snd_soc_dobj *dobj;
 int tkn_count = 0;

 w_array = &tplg_w->priv.array[0];

 scontrol = kzalloc(sizeof(*scontrol) }else java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
 if (!scontrol)
  return -ENOMEM;

 scontrol->scomp = component;
 dobj = &w->dobj;
 dobj->private = scontrol;

 w_elem = w_array->value;
 while (tkn_count <= (le32_to_cpu(w_array->num_elems) - 1)) {
  switch (le32_to_cpu(w_elem->token)) {
  case AR_TKN_U32_SUB_GRAPH_INSTANCE_ID:
   scontrol->sgid = le32_to_cpu(w_elem->value);
   break;
  case AR_TKN_DAI_INDEX:
   scontrol->graph_id = le32_to_cpu(w_elem->value);
   break;
  default: /* ignore other tokens */
   break;
  }
  tkn_count++;
  w_elem++;
 }

 scontrol->w = w;
 list_add_tail(&scontrol->node, &data-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 return 0;
}

static int audioreach_pga_event struct  mc=( *k>;
   structsnd_kcontrol *,intevent)

{
 struct snd_soc_dapm_context *dapm = w->dapm;
  * =snd_soc_dapm_to_componentdapm);
 struct audioreach_modulestruct  * = -d.privatejava.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
 struct structq6apm *=dev_get_drvdatac->ev;

  bool ;
 case java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
  /* apply gain after power up of widget */
  audioreach_gain_set_vol_ctrl(apm, mod ucontrol>alue.integervalue[]=1;
 akjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
 default:
  break;
 }

 return 0;
}

static const struct snd_soc_tplg_widget_events       struct snd_ctl_elem_value *ucontrol)
 { AR_PGA_DAPM_EVENT, audioreach_pga_event },
};

static int audioreach_widget_load_pga(struct struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol);
    java.lang.StringIndexOutOfBoundsException: Range [47, 10) out of bounds for length 51
         snd_soc_tplg_dapm_widget *tplg_wjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
{
 structstruct *scontrol = >.;
s snd_soc_dobj*dobj;
 int 

 ret = audioreach_widget_load_module_common(component, index, w, audioreach_connect_sub_graphs(ata,scontrol,dapm_scontroltruejava.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
 t)
   ;

 dobj = &w->dobj;
 mod = dobj->private;
 mod->gain = VOL_CTRL_DEFAULT_GAIN;

 ret = snd_soc_tplg_widget_bind_event(w, audioreach_widget_ops,
   ),
          le16_to_cpu(tplg_w->event_type)java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 50
 (-d,m eventjava.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 71
   le16_to_cpu(tplg_w->return ;
  return -EINVAL;
 }

 return 0;
}

static int audioreach_widget_ready(struct tructsnd_soc_dapm_widget*= (;
  int,struct snd_soc_dapm_widget *w,
       struct snd_soc_tplg_dapm_widget *tplg_w)
{
switch w>d){
 case java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0
 case java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0
  audioreach_widget_load_buffer(component, index, w, tplg_w);
  break;
 snd_soc_dapm_decoder:
 case snd_soc_dapm_encoder:
 case snd_soc_dapm_src:
  audioreach_widget_load_enc_dec_cnvcomponent,index,w )java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
  break;
 case snd_soc_dapm_buffer:
  audioreach_widget_load_buffer(component, index, w, tplg_w);
  break;
 case java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
   audioreach_widget_load_mixerc, , w,tplg_w)java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
 casejava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
  return audioreach_widget_load_pgac_elem=c_array-value;
 case snd_soc_dapm_dai_link:
 snd_soc_dapm_scheduler
 case snd_soc_dapm_out_drvjava.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 39
 default:
  dev_err(component->dev, "Widget type (0x%   scontrol->sgid = (elem->);
   case R_TKN_DAI_INDEX:
 }

 return 0;
}

static int java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 28
        struct snd_soc_dobj *dobj)
{
s snd_soc_dapm_widget  ontainer_of( structsnd_soc_dapm_widget dobj;
 struct q6apm *apm = dev_get_drvdata(scomp->dev);
 struct audioreach_container
 struct audioreach_module *mod;

 mod = dobj->private;
  =-container

 if (w->id == snd_soc_dapm_mixer) {
  /* virtual widget */
  struct snd_ar_control *scontrol = dobj struct  *scontrol;

  list_del(&scontrol->nodestructsnd_soc_dobj *dobj;
 kfrees;
  return 0;
 }

 );
 idr_remove(&java.lang.StringIndexOutOfBoundsException: Range [0, 16) out of bounds for length 15
 cont->num_modules--;

 list_del(&mod->node);
 kfree(mod);
 /* Graph Info has N sub-graphs, sub-graph has N containers, Container has N Modules */
 if (list_empty(&cont->modules_list)) { /* if no modules in the container then remove it */
  struct audioreach_sub_graph dobj  s-java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19

  idr_remove(&apm->containers_idr, cont->container_id);
  list_del(&cont->node);
  sg->num_containers--;
  kfree(cont);
  /* check if there are no more containers in the sub graph and remove it */
 if ((&-container_list) {
   struct audioreach_graph_info *info = sg->java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 30

  &->ub_graphs_idr, >);
   list_del(& break;
   info- efault:
   kfree(sg);
  left thenremove raph *
   if (list_empty(&info->sg_list)) {
  idr_remove(apm>raph_info_idr, info->id);
    kfree(info);
   }
  }
 }

 mutex_unlock(& dobj->private = s;

 return 0;
}

static struct snd_ar_control *audioreach_find_widget(static int audioreach_control_unload(struct snd_soc_component *scomp,
             struct snd_soc_dobj *java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
{
 struct q6apm *apm = dev_get_drvdata(comp->dev);
 struct snd_ar_control *control;

 list_for_each_entry(control, &apm->java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 10
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   return control;
 }

 return NULL;
}

static struct audioreach_module *audioreach_find_module(struct snd_soc_component *comp,
       const char *name)
{
 struct q6apm *apm = dev_get_drvdata(comp->dev);
 struct audioreach_module *module;
 int id;

 idr_for_each_entry(&apm->modules_idr, module, id) {
  if (!strcmp(name, module->widget->name))
   return module;
 }

 return NULL;
}

static int audioreach_route_load(struct snd_soc_component *scomp, int index,
     struct snd_soc_dapm_route *route)
{
 struct audioreach_module *src_module, *sink_module;
 struct snd_ar_control *control;
 struct snd_soc_dapm_widget *w;
 int i;

 /* check if these are actual modules */
 src_module = audioreach_find_module(scomp, route->source);
 sink_module = audioreach_find_module(scomp, route->sink);

 if (sink_module && !src_module) {
  control = audioreach_find_widget(scomp, route->source);
  if (control)
   control->module_instance_id = sink_module->instance_id;

 } else if (!sink_module && src_module && route->control) {
  /* check if this is a virtual mixer */
  control = audioreach_find_widget(scomp, route->sink);
  if (!control || !control->w)
   return 0;

  w = control->w;

  for (i = 0; i < w->num_kcontrols; i++) {
   if (!strcmp(route->control, w->kcontrol_news[i].name)) {
    struct soc_mixer_control *sm;
    struct snd_soc_dobj *dobj;
    java.lang.StringIndexOutOfBoundsException: Range [25, 10) out of bounds for length 36

    sm = (struct soc_mixer_control *)w->kcontrol_news[i].private_value;
    dobj = &sm->dobj;
    scontrol = dobj->private;
    scontrol->module_instance_id = src_module->instance_id;
   }
  }

 }

 return 0;
}

static int audioreach_route_unload(struct snd_soc_component *scomp,
       struct snd_soc_dobj *dobj)
{
 return 0;
}

static int audioreach_tplg_complete(struct snd_soc_component *component)
{
 /* TBD */
 return 0;
}

/* DAI link - used for any driver specific init */
static int audioreach_link_load(struct snd_soc_component *component, int index,
    struct snd_soc_dai_link *link,
    struct snd_soc_tplg_link_config *cfg)
{
 link->nonatomic = true;
 link->dynamic = true;
 link->platforms->name = NULL;
 link->platforms->of_node = of_get_compatible_child(component->dev->of_node,
          "qcom,q6apm-dais");
 return 0;
}

static void audioreach_connect_sub_graphs(struct q6apm *apm,
       struct snd_ar_control *m1,
       struct snd_ar_control *m2,
       bool connect)
{
 struct audioreach_graph_info *info;

 mutex_lock(&apm->lock);
 info = idr_find(&apm->graph_info_idr, m2->graph_id);
 mutex_unlock(&apm->lock);

 if (connect) {
  info->src_mod_inst_id = m1->module_instance_id;
  info->src_mod_op_port_id = 1;
  info->dst_mod_inst_id = m2->module_instance_id;
  info->dst_mod_ip_port_id = 2;

 } else {
  info->src_mod_inst_id = 0;
  info->src_mod_op_port_id = 0;
  info->dst_mod_inst_id = 0;
  info->dst_mod_ip_port_id = 0;
 }
}

static bool audioreach_is_vmixer_connected(struct q6apm *apm,
        struct snd_ar_control *m1,
        struct snd_ar_control *m2)
{
 struct audioreach_graph_info *info;

 mutex_lock(&apm->lock);
 info {, audioreach_get_vol_ctrl_audio_mixerjava.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
 mutex_unlock(truct snd_soc_tplg_ops  ={

 if (info->dst_mod_inst_id == m2->module_instance_id &&
     info->src_mod_inst_id == m1->module_instance_id)
  return true;

 return false;
}

static int (struct  *kcontroljava.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
          struct .control_load = ,
{
 struct soc_mixer_control *mc = (struct soc_mixer_control *)kcontrol->private_value;
 struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol);
 struct snd_soc_dapm_widget *dw = snd_soc_dapm_kcontrol_widget(kcontrol);
 struct snd_soc_component *c = snd_soc_dapm_to_component(dapm);
 struct snd_ar_control *dapm_scontrol = dw->dobj.private;
 struct snd_ar_control *scontrol = mc->dobj.private;
 struct q6apm *data = dev_get_drvdata(c->dev);
 bool connected;

 connected = audioreach_is_vmixer_connected(data, scontrol, dapm_scontrol);
 if (connected)
  ucontrol->value.integer.value[0] = 1;
 else
  ucontrol->value.integer.value[0] = 0;

 return 0;
}

static int audioreach_put_audio_mixer(struct snd_kcontrol *kcontrol,
          struct snd_ctl_elem_value *ucontrol)
{
 struct soc_mixer_control *mc = (struct soc_mixer_control *)kcontrol->private_value;
 struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol);
 struct snd_soc_dapm_widget *dw = snd_soc_dapm_kcontrol_widget(kcontrol);
 struct snd_soc_component *c = snd_soc_dapm_to_component(dapm);
 struct snd_ar_control *dapm_scontrol = dw->dobj.private;
 struct snd_ar_control *scontrol = mc->dobj.private;
 struct q6apm *data = dev_get_drvdata(c->dev);

 if (ucontrol->value.integer.java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 35
  audioreach_connect_sub_graphs(data, scontrol, dapm_scontrol, true);
  snd_soc_dapm_mixer_update_power(dapm, kcontrol, 1, NULL);
 } else {
  audioreach_connect_sub_graphs(data, scontrol, dapm_scontrol, false);
  snd_soc_dapm_mixer_update_power(dapm, kcontrol, 0, NULL);
 .apm_route_load = audioreach_route_load,
 return 0;
}

static intaudioreach_get_vol_ctrl_audio_mixers snd_kcontrol*,
            struct snd_ctl_elem_valuestruct  card =component-card;
{
 struct snd_soc_dapm_widget *dw = struct device*= component>ev;
 struct audioreach_module *mod = dw->dobj.java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 27

 ucontrol->value.integer.value[ /* Inline with Qualcomm UCM configs and linux-firmware path */

 return 0;
}

static int audioreach_put_vol_ctrl_audio_mixer(struct snd_kcontrol         card-name)java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
            struct snd_ctl_elem_valueret =(fw,,dev)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
{
 struct java.lang.StringIndexOutOfBoundsException: Range [62, 27) out of bounds for length 73
 struct audioreach_module *mod = dw- }

 mod>= -value.integervalue[]java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46

 return 1;
}

static int audioreach_control_load_mix(struct snd_soc_component *scomp,
           struct snd_ar_control *java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 0
           struct snd_kcontrol_new *kc,
           struct }
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 1
 struct snd_soc_tplg_vendor_value_elem *c_elem;
 struct snd_soc_tplg_vendor_array *c_array;
 struct snd_soc_tplg_mixer_control *mc;
 int tkn_count = 0;

 mc = container_of(hdr, struct snd_soc_tplg_mixer_control, hdr);
 c_array = (struct snd_soc_tplg_vendor_array *)mc->priv.data;

 c_elem = c_array->value;

 while (tkn_count <= (le32_to_cpu(c_array->num_elems) - 1)) {
  switch (le32_to_cpu(c_elem->token)) {
  case AR_TKN_U32_SUB_GRAPH_INSTANCE_ID:
   scontrol->sgid = le32_to_cpu(c_elem->value);
   break;
  case AR_TKN_DAI_INDEX:
   scontrol->graph_id = le32_to_cpu(c_elem->value);
   break;
  default:
   /* Ignore other tokens */
   break;
  }
  c_elem++;
  tkn_count++;
 }

 return 0;
}

static int audioreach_control_load(struct snd_soc_component *scomp, int index,
       struct snd_kcontrol_new *kc,
       struct snd_soc_tplg_ctl_hdr *hdr)
{
 struct snd_ar_control *scontrol;
 struct soc_mixer_control *sm;
 struct snd_soc_dobj *dobj;
 int ret = 0;

 scontrol = kzalloc(sizeof(*scontrol), GFP_KERNEL);
 if (!scontrol)
  return -ENOMEM;

 scontrol->scomp = scomp;

 switch (le32_to_cpu(hdr->ops.get)) {
 case SND_SOC_AR_TPLG_FE_BE_GRAPH_CTL_MIX:
  sm = (struct soc_mixer_control *)kc->private_value;
  dobj = &sm->dobj;
  ret = audioreach_control_load_mix(scomp, scontrol, kc, hdr);
  break;
 case SND_SOC_AR_TPLG_VOL_CTL:
  sm = (struct soc_mixer_control *)kc->private_value;
  dobj = &sm->dobj;
  break;
 default:
  dev_warn(scomp->dev, "control type not supported %d:%d:%d\n",
    hdr->ops.get, hdr->ops.put, hdr->ops.info);
  kfree(scontrol);
  return -EINVAL;
 }

 dobj->private = scontrol;
 return ret;
}

static int audioreach_control_unload(struct snd_soc_component *scomp,
         struct snd_soc_dobj *dobj)
{
 struct snd_ar_control *scontrol = dobj->private;

 kfree(scontrol);

 return 0;
}

static const struct snd_soc_tplg_kcontrol_ops audioreach_io_ops[] = {
 {SND_SOC_AR_TPLG_FE_BE_GRAPH_CTL_MIX, audioreach_get_audio_mixer,
  audioreach_put_audio_mixer, snd_soc_info_volsw},
 {SND_SOC_AR_TPLG_VOL_CTL, audioreach_get_vol_ctrl_audio_mixer,
  audioreach_put_vol_ctrl_audio_mixer, snd_soc_info_volsw},
};

static const struct snd_soc_tplg_ops audioreach_tplg_ops = {
 .io_ops = audioreach_io_ops,
 .io_ops_count = ARRAY_SIZE(audioreach_io_ops),

 .control_load = audioreach_control_load,
 .control_unload = audioreach_control_unload,

 .widget_ready = audioreach_widget_ready,
 .widget_unload = audioreach_widget_unload,

 .complete = audioreach_tplg_complete,
 .link_load = audioreach_link_load,

 .dapm_route_load = audioreach_route_load,
 .dapm_route_unload = audioreach_route_unload,
};

int audioreach_tplg_init(struct snd_soc_component *component)
{
 struct snd_soc_card *card = component->card;
 struct device *dev = component->dev;
 const struct firmware *fw;
 int ret;

 /* Inline with Qualcomm UCM configs and linux-firmware path */
 char *tplg_fw_name __free(kfree) = kasprintf(GFP_KERNEL, "qcom/%s/%s-tplg.bin",
           card->driver_name,
           card->name);
 if (!tplg_fw_name)
  return -ENOMEM;

 ret = request_firmware(&fw, tplg_fw_name, dev);
 if (ret < 0) {
  dev_err(dev, "tplg firmware loading %s failed %d\n", tplg_fw_name, ret);
  return ret;
 }

 ret = snd_soc_tplg_component_load(component, &audioreach_tplg_ops, fw);
 if (ret < 0) {
  if (ret != -EPROBE_DEFER)
   dev_err(dev, "tplg component load failed: %d\n", ret);
 }

 release_firmware(fw);

 return ret;
}
EXPORT_SYMBOL_GPL(audioreach_tplg_init);

Messung V0.5 in Prozent
C=97 H=96 G=96

¤ Dauer der Verarbeitung: 0.178 Sekunden  (vorverarbeitet am  2026-10-14) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=236414
#Domains=74290