// SPDX-License-Identifier: GPL-2.0
// HD-Audio helpers to sync with DRM driver

#ifndef __SOUND_HDA_COMPONENT_H
#define __SOUND_HDA_COMPONENT_H

#include <drm/drm_audio_component.h>
#include <sound/hdaudio.h>

/* virtual idx for controller */
#define HDA_CODEC_IDX_CONTROLLER	HDA_MAX_CODECS

#ifdef CONFIG_SND_HDA_COMPONENT
int snd_hdac_set_codec_wakeup(struct hdac_bus *bus, bool enable);
void snd_hdac_display_power(struct hdac_bus *bus, unsigned int idx,
			    bool enable);
int snd_hdac_sync_audio_rate(struct hdac_device *codec, hda_nid_t nid,
			     int dev_id, int rate);
int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid, int dev_id,
			   bool *audio_enabled, char *buffer, int max_bytes);
int snd_hdac_acomp_init(struct hdac_bus *bus,
			const struct drm_audio_component_audio_ops *aops,
			int (*match_master)(struct device *, int, void *),
			size_t extra_size);
int snd_hdac_acomp_exit(struct hdac_bus *bus);
int snd_hdac_acomp_register_notifier(struct hdac_bus *bus,
				    const struct drm_audio_component_audio_ops *ops);
#else
static inline int snd_hdac_set_codec_wakeup(struct hdac_bus *bus, bool enable)
{
	return 0;
}
static inline void snd_hdac_display_power(struct hdac_bus *bus,
					  unsigned int idx, bool enable)
{
}
static inline int snd_hdac_sync_audio_rate(struct hdac_device *codec,
					   hda_nid_t nid, int dev_id, int rate)
{
	return 0;
}
static inline int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid,
					 int dev_id, bool *audio_enabled,
					 char *buffer, int max_bytes)
{
	return -ENODEV;
}
static inline int snd_hdac_acomp_init(struct hdac_bus *bus,
				      const struct drm_audio_component_audio_ops *aops,
				      int (*match_master)(struct device *,
							  int, void *),
				      size_t extra_size)
{
	return -ENODEV;
}
static inline int snd_hdac_acomp_exit(struct hdac_bus *bus)
{
	return 0;
}
static inline int snd_hdac_acomp_register_notifier(struct hdac_bus *bus,
						  const struct drm_audio_component_audio_ops *ops)
{
	return -ENODEV;
}
#endif

#endif /* __SOUND_HDA_COMPONENT_H */
