|
@@ -3037,11 +3037,13 @@ static int skl_tplg_get_int_tkn(struct device *dev,
|
|
struct snd_soc_tplg_vendor_value_elem *tkn_elem,
|
|
struct snd_soc_tplg_vendor_value_elem *tkn_elem,
|
|
struct skl *skl)
|
|
struct skl *skl)
|
|
{
|
|
{
|
|
- int tkn_count = 0, ret;
|
|
|
|
|
|
+ int tkn_count = 0, ret, size;
|
|
static int mod_idx, res_val_idx, intf_val_idx, dir, pin_idx;
|
|
static int mod_idx, res_val_idx, intf_val_idx, dir, pin_idx;
|
|
struct skl_module_res *res = NULL;
|
|
struct skl_module_res *res = NULL;
|
|
struct skl_module_iface *fmt = NULL;
|
|
struct skl_module_iface *fmt = NULL;
|
|
struct skl_module *mod = NULL;
|
|
struct skl_module *mod = NULL;
|
|
|
|
+ static struct skl_astate_param *astate_table;
|
|
|
|
+ static int astate_cfg_idx, count;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
if (skl->modules) {
|
|
if (skl->modules) {
|
|
@@ -3074,6 +3076,46 @@ static int skl_tplg_get_int_tkn(struct device *dev,
|
|
mod_idx = tkn_elem->value;
|
|
mod_idx = tkn_elem->value;
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
+ case SKL_TKN_U32_ASTATE_COUNT:
|
|
|
|
+ if (astate_table != NULL) {
|
|
|
|
+ dev_err(dev, "More than one entry for A-State count");
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (tkn_elem->value > SKL_MAX_ASTATE_CFG) {
|
|
|
|
+ dev_err(dev, "Invalid A-State count %d\n",
|
|
|
|
+ tkn_elem->value);
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ size = tkn_elem->value * sizeof(struct skl_astate_param) +
|
|
|
|
+ sizeof(count);
|
|
|
|
+ skl->cfg.astate_cfg = devm_kzalloc(dev, size, GFP_KERNEL);
|
|
|
|
+ if (!skl->cfg.astate_cfg)
|
|
|
|
+ return -ENOMEM;
|
|
|
|
+
|
|
|
|
+ astate_table = skl->cfg.astate_cfg->astate_table;
|
|
|
|
+ count = skl->cfg.astate_cfg->count = tkn_elem->value;
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case SKL_TKN_U32_ASTATE_IDX:
|
|
|
|
+ if (tkn_elem->value >= count) {
|
|
|
|
+ dev_err(dev, "Invalid A-State index %d\n",
|
|
|
|
+ tkn_elem->value);
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ astate_cfg_idx = tkn_elem->value;
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case SKL_TKN_U32_ASTATE_KCPS:
|
|
|
|
+ astate_table[astate_cfg_idx].kcps = tkn_elem->value;
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case SKL_TKN_U32_ASTATE_CLK_SRC:
|
|
|
|
+ astate_table[astate_cfg_idx].clk_src = tkn_elem->value;
|
|
|
|
+ break;
|
|
|
|
+
|
|
case SKL_TKN_U8_IN_PIN_TYPE:
|
|
case SKL_TKN_U8_IN_PIN_TYPE:
|
|
case SKL_TKN_U8_OUT_PIN_TYPE:
|
|
case SKL_TKN_U8_OUT_PIN_TYPE:
|
|
case SKL_TKN_U8_IN_QUEUE_COUNT:
|
|
case SKL_TKN_U8_IN_QUEUE_COUNT:
|