int (*set_bias_level)(struct snd_soc_component *component,
enum snd_soc_bias_level level);
+ int (*open)(struct snd_soc_component *component,
+ struct snd_pcm_substream *substream);
+ int (*close)(struct snd_soc_component *component,
+ struct snd_pcm_substream *substream);
+ int (*ioctl)(struct snd_soc_component *component,
+ struct snd_pcm_substream *substream,
+ unsigned int cmd, void *arg);
+ int (*hw_params)(struct snd_soc_component *component,
+ struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params);
+ int (*hw_free)(struct snd_soc_component *component,
+ struct snd_pcm_substream *substream);
+ int (*prepare)(struct snd_soc_component *component,
+ struct snd_pcm_substream *substream);
+ int (*trigger)(struct snd_soc_component *component,
+ struct snd_pcm_substream *substream, int cmd);
+ snd_pcm_uframes_t (*pointer)(struct snd_soc_component *component,
+ struct snd_pcm_substream *substream);
+ int (*get_time_info)(struct snd_soc_component *component,
+ struct snd_pcm_substream *substream, struct timespec *system_ts,
+ struct timespec *audio_ts,
+ struct snd_pcm_audio_tstamp_config *audio_tstamp_config,
+ struct snd_pcm_audio_tstamp_report *audio_tstamp_report);
+ int (*copy_user)(struct snd_soc_component *component,
+ struct snd_pcm_substream *substream, int channel,
+ unsigned long pos, void __user *buf,
+ unsigned long bytes);
+ struct page *(*page)(struct snd_soc_component *component,
+ struct snd_pcm_substream *substream,
+ unsigned long offset);
+ int (*mmap)(struct snd_soc_component *component,
+ struct snd_pcm_substream *substream,
+ struct vm_area_struct *vma);
+
const struct snd_pcm_ops *ops;
const struct snd_compr_ops *compr_ops;
int snd_soc_component_open(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{
+ if (component->driver->open)
+ return component->driver->open(component, substream);
+
+ /* remove me */
if (component->driver->ops &&
component->driver->ops->open)
return component->driver->ops->open(substream);
int snd_soc_component_close(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{
+ if (component->driver->close)
+ return component->driver->close(component, substream);
+
+ /* remove me */
if (component->driver->ops &&
component->driver->ops->close)
return component->driver->ops->close(substream);
int snd_soc_component_prepare(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{
+ if (component->driver->prepare)
+ return component->driver->prepare(component, substream);
+
+ /* remove me */
if (component->driver->ops &&
component->driver->ops->prepare)
return component->driver->ops->prepare(substream);
struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params)
{
+ if (component->driver->hw_params)
+ return component->driver->hw_params(component,
+ substream, params);
+
+ /* remove me */
if (component->driver->ops &&
component->driver->ops->hw_params)
return component->driver->ops->hw_params(substream, params);
int snd_soc_component_hw_free(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{
+ if (component->driver->hw_free)
+ return component->driver->hw_free(component, substream);
+
+ /* remove me */
if (component->driver->ops &&
component->driver->ops->hw_free)
return component->driver->ops->hw_free(substream);
struct snd_pcm_substream *substream,
int cmd)
{
+ if (component->driver->trigger)
+ return component->driver->trigger(component, substream, cmd);
+
+ /* remove me */
if (component->driver->ops &&
component->driver->ops->trigger)
return component->driver->ops->trigger(substream, cmd);
component = rtdcom->component;
/* FIXME: use 1st pointer */
+ if (component->driver->pointer)
+ return component->driver->pointer(component, substream);
+
+ /* remove me */
if (component->driver->ops &&
component->driver->ops->pointer)
return component->driver->ops->pointer(substream);
component = rtdcom->component;
/* FIXME: use 1st ioctl */
+ if (component->driver->ioctl)
+ return component->driver->ioctl(component, substream,
+ cmd, arg);
+
+ /* remove me */
if (component->driver->ops &&
component->driver->ops->ioctl)
return component->driver->ops->ioctl(substream,
component = rtdcom->component;
/* FIXME. it returns 1st copy now */
+ if (component->driver->copy_user)
+ return component->driver->copy_user(
+ component, substream, channel, pos, buf, bytes);
+
+ /* remove me */
if (component->driver->ops &&
component->driver->ops->copy_user)
return component->driver->ops->copy_user(
component = rtdcom->component;
/* FIXME. it returns 1st page now */
+ if (component->driver->page) {
+ page = component->driver->page(component,
+ substream, offset);
+ if (page)
+ return page;
+ }
+
+ /* remove me */
if (component->driver->ops &&
component->driver->ops->page) {
page = component->driver->ops->page(substream, offset);
component = rtdcom->component;
/* FIXME. it returns 1st mmap now */
+ if (component->driver->mmap)
+ return component->driver->mmap(component,
+ substream, vma);
+
+ /* remove me */
if (component->driver->ops &&
component->driver->ops->mmap)
return component->driver->ops->mmap(substream, vma);