mirror of https://gitee.com/openkylin/linux.git
ALSA: hdac: Copy codec helpers to core
The current codec helpers are local to hda code and needs to be moved to core so that other users can use it. The helpers to read/write the codec and to check the power state of widgets is copied Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
a04267fd87
commit
1b5e6167c2
|
@ -147,6 +147,12 @@ int snd_hdac_query_supported_pcm(struct hdac_device *codec, hda_nid_t nid,
|
|||
bool snd_hdac_is_supported_format(struct hdac_device *codec, hda_nid_t nid,
|
||||
unsigned int format);
|
||||
|
||||
int snd_hdac_codec_read(struct hdac_device *hdac, hda_nid_t nid,
|
||||
int flags, unsigned int verb, unsigned int parm);
|
||||
int snd_hdac_codec_write(struct hdac_device *hdac, hda_nid_t nid,
|
||||
int flags, unsigned int verb, unsigned int parm);
|
||||
bool snd_hdac_check_power_state(struct hdac_device *hdac,
|
||||
hda_nid_t nid, unsigned int target_state);
|
||||
/**
|
||||
* snd_hdac_read_parm - read a codec parameter
|
||||
* @codec: the codec object
|
||||
|
|
|
@ -952,3 +952,84 @@ bool snd_hdac_is_supported_format(struct hdac_device *codec, hda_nid_t nid,
|
|||
return true;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hdac_is_supported_format);
|
||||
|
||||
static unsigned int codec_read(struct hdac_device *hdac, hda_nid_t nid,
|
||||
int flags, unsigned int verb, unsigned int parm)
|
||||
{
|
||||
unsigned int cmd = snd_hdac_make_cmd(hdac, nid, verb, parm);
|
||||
unsigned int res;
|
||||
|
||||
if (snd_hdac_exec_verb(hdac, cmd, flags, &res))
|
||||
return -1;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static int codec_write(struct hdac_device *hdac, hda_nid_t nid,
|
||||
int flags, unsigned int verb, unsigned int parm)
|
||||
{
|
||||
unsigned int cmd = snd_hdac_make_cmd(hdac, nid, verb, parm);
|
||||
|
||||
return snd_hdac_exec_verb(hdac, cmd, flags, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* snd_hdac_codec_read - send a command and get the response
|
||||
* @hdac: the HDAC device
|
||||
* @nid: NID to send the command
|
||||
* @flags: optional bit flags
|
||||
* @verb: the verb to send
|
||||
* @parm: the parameter for the verb
|
||||
*
|
||||
* Send a single command and read the corresponding response.
|
||||
*
|
||||
* Returns the obtained response value, or -1 for an error.
|
||||
*/
|
||||
int snd_hdac_codec_read(struct hdac_device *hdac, hda_nid_t nid,
|
||||
int flags, unsigned int verb, unsigned int parm)
|
||||
{
|
||||
return codec_read(hdac, nid, flags, verb, parm);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hdac_codec_read);
|
||||
|
||||
/**
|
||||
* snd_hdac_codec_write - send a single command without waiting for response
|
||||
* @hdac: the HDAC device
|
||||
* @nid: NID to send the command
|
||||
* @flags: optional bit flags
|
||||
* @verb: the verb to send
|
||||
* @parm: the parameter for the verb
|
||||
*
|
||||
* Send a single command without waiting for response.
|
||||
*
|
||||
* Returns 0 if successful, or a negative error code.
|
||||
*/
|
||||
int snd_hdac_codec_write(struct hdac_device *hdac, hda_nid_t nid,
|
||||
int flags, unsigned int verb, unsigned int parm)
|
||||
{
|
||||
return codec_write(hdac, nid, flags, verb, parm);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hdac_codec_write);
|
||||
|
||||
/*
|
||||
* snd_hdac_check_power_state: check whether the actual power state matches
|
||||
* with the target state
|
||||
*
|
||||
* @hdac: the HDAC device
|
||||
* @nid: NID to send the command
|
||||
* @target_state: target state to check for
|
||||
*
|
||||
* Return true if state matches, false if not
|
||||
*/
|
||||
bool snd_hdac_check_power_state(struct hdac_device *hdac,
|
||||
hda_nid_t nid, unsigned int target_state)
|
||||
{
|
||||
unsigned int state = codec_read(hdac, nid, 0,
|
||||
AC_VERB_GET_POWER_STATE, 0);
|
||||
|
||||
if (state & AC_PWRST_ERROR)
|
||||
return true;
|
||||
state = (state >> 4) & 0x0f;
|
||||
return (state == target_state);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hdac_check_power_state);
|
||||
|
|
Loading…
Reference in New Issue