#define soc_component_ret_reg_rw(dai, ret, reg) _soc_component_ret_reg_rw(dai, __func__, ret, reg) staticinlineint _soc_component_ret_reg_rw(struct snd_soc_component *component, constchar *func, int ret, int reg)
{ return snd_soc_ret(component->dev, ret, "at %s() on %s for register: [0x%08x]\n",
func, component->name, reg);
}
staticinlineint soc_component_field_shift(struct snd_soc_component *component, unsignedint mask)
{ if (!mask) {
dev_err(component->dev, "ASoC: error field mask is zero for %s\n",
component->name); return0;
}
int snd_soc_component_init(struct snd_soc_component *component)
{ int ret = 0;
if (component->init)
ret = component->init(component);
return soc_component_ret(component, ret);
}
/** *snd_soc_component_set_sysclk-configureCOMPONENTsystemormasterclock. *@component:COMPONENT *@clk_id:DAIspecificclockID *@source:Sourcefortheclock *@freq:newclockfrequencyinHz *@dir:newclockdirection-input/output. * *ConfigurestheCODECmaster(MCLK)orsystem(SYSCLK)clocking.
*/ int snd_soc_component_set_sysclk(struct snd_soc_component *component, int clk_id, int source, unsignedint freq, int dir)
{ int ret = -ENOTSUPP;
if (component->driver->set_sysclk)
ret = component->driver->set_sysclk(component, clk_id, source,
freq, dir);
int snd_soc_component_compr_trigger(struct snd_compr_stream *cstream, int cmd)
{ struct snd_soc_pcm_runtime *rtd = cstream->private_data; struct snd_soc_component *component; int i, ret;
for_each_rtd_components(rtd, i, component) { if (component->driver->compress_ops &&
component->driver->compress_ops->trigger) {
ret = component->driver->compress_ops->trigger(
component, cstream, cmd); if (ret < 0) return soc_component_ret(component, ret);
}
}
staticunsignedint soc_component_read_no_lock( struct snd_soc_component *component, unsignedint reg)
{ int ret; unsignedint val = 0;
if (component->regmap)
ret = regmap_read(component->regmap, reg, &val); elseif (component->driver->read) {
ret = 0;
val = component->driver->read(component, reg);
} else
ret = -EIO;
if (ret < 0) return soc_component_ret_reg_rw(component, ret, reg);
staticint soc_component_write_no_lock( struct snd_soc_component *component, unsignedint reg, unsignedint val)
{ int ret = -EIO;
if (component->regmap)
ret = regmap_write(component->regmap, reg, val); elseif (component->driver->write)
ret = component->driver->write(component, reg, val);
old = snd_soc_component_read(component, reg); new = (old & ~mask) | value; return old != new;
}
EXPORT_SYMBOL_GPL(snd_soc_component_test_bits);
int snd_soc_pcm_component_pointer(struct snd_pcm_substream *substream)
{ struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct snd_soc_component *component; int i;
/* FIXME: use 1st pointer */
for_each_rtd_components(rtd, i, component) if (component->driver->pointer) return component->driver->pointer(component, substream);
int snd_soc_pcm_component_ioctl(struct snd_pcm_substream *substream, unsignedint cmd, void *arg)
{ struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct snd_soc_component *component; int i;
/* FIXME: use 1st ioctl */
for_each_rtd_components(rtd, i, component) if (component->driver->ioctl) return soc_component_ret(
component,
component->driver->ioctl(component,
substream, cmd, arg));
return snd_pcm_lib_ioctl(substream, cmd, arg);
}
int snd_soc_pcm_component_sync_stop(struct snd_pcm_substream *substream)
{ struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct snd_soc_component *component; int i, ret;
for_each_rtd_components(rtd, i, component) { if (component->driver->sync_stop) {
ret = component->driver->sync_stop(component,
substream); if (ret < 0) return soc_component_ret(component, ret);
}
}
return0;
}
int snd_soc_pcm_component_copy(struct snd_pcm_substream *substream, int channel, unsignedlong pos, struct iov_iter *iter, unsignedlong bytes)
{ struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct snd_soc_component *component; int i;
/* FIXME. it returns 1st copy now */
for_each_rtd_components(rtd, i, component) if (component->driver->copy) return soc_component_ret(component,
component->driver->copy(component, substream,
channel, pos, iter, bytes));
/* FIXME. it returns 1st page now */
for_each_rtd_components(rtd, i, component) { if (component->driver->page) {
page = component->driver->page(component,
substream, offset); if (page) return page;
}
}
return NULL;
}
int snd_soc_pcm_component_mmap(struct snd_pcm_substream *substream, struct vm_area_struct *vma)
{ struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct snd_soc_component *component; int i;
/* FIXME. it returns 1st mmap now */
for_each_rtd_components(rtd, i, component) if (component->driver->mmap) return soc_component_ret(
component,
component->driver->mmap(component,
substream, vma));
return -EINVAL;
}
int snd_soc_pcm_component_new(struct snd_soc_pcm_runtime *rtd)
{ struct snd_soc_component *component; int ret; int i;
for_each_rtd_components(rtd, i, component) { if (component->driver->pcm_construct) {
ret = component->driver->pcm_construct(component, rtd); if (ret < 0) return soc_component_ret(component, ret);
}
}
return0;
}
void snd_soc_pcm_component_free(struct snd_soc_pcm_runtime *rtd)
{ struct snd_soc_component *component; int i;
if (!rtd->pcm) return;
for_each_rtd_components(rtd, i, component) if (component->driver->pcm_destruct)
component->driver->pcm_destruct(component, rtd->pcm);
}
int snd_soc_pcm_component_prepare(struct snd_pcm_substream *substream)
{ struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct snd_soc_component *component; int i, ret;
for_each_rtd_components(rtd, i, component) { if (component->driver->prepare) {
ret = component->driver->prepare(component, substream); if (ret < 0) return soc_component_ret(component, ret);
}
}
return0;
}
int snd_soc_pcm_component_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params)
{ struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct snd_soc_component *component; int i, ret;
for_each_rtd_components(rtd, i, component) { if (component->driver->hw_params) {
ret = component->driver->hw_params(component,
substream, params); if (ret < 0) return soc_component_ret(component, ret);
} /* mark substream if succeeded */
soc_component_mark_push(component, substream, hw_params);
}
return0;
}
void snd_soc_pcm_component_hw_free(struct snd_pcm_substream *substream, int rollback)
{ struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct snd_soc_component *component; int i, ret;
for_each_rtd_components(rtd, i, component) { if (rollback && !soc_component_mark_match(component, substream, hw_params)) continue;
if (component->driver->hw_free) {
ret = component->driver->hw_free(component, substream); if (ret < 0)
soc_component_ret(component, ret);
}
staticint soc_component_trigger(struct snd_soc_component *component, struct snd_pcm_substream *substream, int cmd)
{ int ret = 0;
if (component->driver->trigger)
ret = component->driver->trigger(component, substream, cmd);
return soc_component_ret(component, ret);
}
int snd_soc_pcm_component_trigger(struct snd_pcm_substream *substream, int cmd, int rollback)
{ struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct snd_soc_component *component; int i, r, ret = 0;
switch (cmd) { case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
for_each_rtd_components(rtd, i, component) {
ret = soc_component_trigger(component, substream, cmd); if (ret < 0) break;
soc_component_mark_push(component, substream, trigger);
} break; case SNDRV_PCM_TRIGGER_STOP: case SNDRV_PCM_TRIGGER_SUSPEND: case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
for_each_rtd_components(rtd, i, component) { if (rollback && !soc_component_mark_match(component, substream, trigger)) continue;
r = soc_component_trigger(component, substream, cmd); if (r < 0)
ret = r; /* use last ret */
soc_component_mark_pop(component, trigger);
}
}
return ret;
}
int snd_soc_pcm_component_pm_runtime_get(struct snd_soc_pcm_runtime *rtd, void *stream)
{ struct snd_soc_component *component; int i;
for_each_rtd_components(rtd, i, component) { int ret = pm_runtime_get_sync(component->dev); if (ret < 0 && ret != -EACCES) {
pm_runtime_put_noidle(component->dev); return soc_component_ret(component, ret);
} /* mark stream if succeeded */
soc_component_mark_push(component, stream, pm);
}
return0;
}
void snd_soc_pcm_component_pm_runtime_put(struct snd_soc_pcm_runtime *rtd, void *stream, int rollback)
{ struct snd_soc_component *component; int i;
for_each_rtd_components(rtd, i, component) { if (rollback && !soc_component_mark_match(component, stream, pm)) continue;
int snd_soc_pcm_component_ack(struct snd_pcm_substream *substream)
{ struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct snd_soc_component *component; int i;
/* FIXME: use 1st pointer */
for_each_rtd_components(rtd, i, component) if (component->driver->ack) return component->driver->ack(component, substream);
return0;
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.7 Sekunden
(vorverarbeitet am 2026-10-11)
¤
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.