switch (priv->format & SND_SOC_DAIFMT_FORMAT_MASK) { case SND_SOC_DAIFMT_RIGHT_J: switch (params_width(params)) { case 24:
val = 2; break; case 16:
val = 3; break; default: return -EINVAL;
} break; case SND_SOC_DAIFMT_I2S: switch (params_width(params)) { case 16: case 24: case 32:
val = 0; break; default: return -EINVAL;
} break; case SND_SOC_DAIFMT_LEFT_J: switch (params_width(params)) { case 16: case 24: case 32:
val = 1; break; default: return -EINVAL;
} break; default:
dev_err(component->dev, "Invalid DAI format\n"); return -EINVAL;
}
ret = regmap_update_bits(priv->regmap, PCM1789_FMT_CONTROL,
PCM1789_FMT_MASK, val); if (ret < 0) return ret;
/* Perform a software reset to remove codec from desynchronized state */ if (regmap_update_bits(priv->regmap, PCM1789_MUTE_CONTROL,
0x3 << PCM1789_MUTE_SRET, 0) < 0)
dev_err(priv->dev, "Error while setting SRET");
}
staticint pcm1789_trigger(struct snd_pcm_substream *substream, int cmd, struct snd_soc_dai *dai)
{ struct snd_soc_component *component = dai->component; struct pcm1789_private *priv = snd_soc_component_get_drvdata(component); int ret = 0;
switch (cmd) { case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
schedule_work(&priv->work); break; case SNDRV_PCM_TRIGGER_STOP: case SNDRV_PCM_TRIGGER_SUSPEND: case SNDRV_PCM_TRIGGER_PAUSE_PUSH: break; default:
ret = -EINVAL;
}
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.