[alsa-devel] [PATCH 05/14] ALSA: hdac: Add MISCBDCGE support

Takashi Iwai tiwai at suse.de
Fri Dec 11 09:54:42 CET 2015


On Fri, 11 Dec 2015 07:44:18 +0100,
Vinod Koul wrote:
> 
> From: Jayachandran B <jayachandran.b at intel.com>
> 
> MISCBDCGE is a new register for Misc Backbone clock gate control
> which is useful to control while resetting the link and ensuring
> controller is in required state so add API to control it
> 
> Signed-off-by: Jayachandran B <jayachandran.b at intel.com>
> Signed-off-by: Vinod Koul <vinod.koul at intel.com>
> ---
>  include/sound/hda_register.h        |  3 +++
>  include/sound/hdaudio_ext.h         |  1 +
>  sound/hda/ext/hdac_ext_controller.c | 23 +++++++++++++++++++++++
>  3 files changed, 27 insertions(+)
> 
> diff --git a/include/sound/hda_register.h b/include/sound/hda_register.h
> index 28ac1f9a18ac..fa33237f4bd1 100644
> --- a/include/sound/hda_register.h
> +++ b/include/sound/hda_register.h
> @@ -96,6 +96,9 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
>  /* PCI space */
>  #define AZX_PCIREG_TCSEL		0x44
>  
> +#define AZX_PCIREG_CGCTL               0x48
> +#define AZX_CGCTL_MISCBDCGE_MASK       (1 << 6)
> +
>  /*
>   * other constants
>   */
> diff --git a/include/sound/hdaudio_ext.h b/include/sound/hdaudio_ext.h
> index f3454950ee0b..65961bbb8ca3 100644
> --- a/include/sound/hdaudio_ext.h
> +++ b/include/sound/hdaudio_ext.h
> @@ -152,6 +152,7 @@ void snd_hdac_ext_link_set_stream_id(struct hdac_ext_link *link,
>  				 int stream);
>  void snd_hdac_ext_link_clear_stream_id(struct hdac_ext_link *link,
>  				 int stream);
> +void snd_hdac_ext_bus_enable_miscbdcge(struct device *dev, bool enable);
>  
>  /* update register macro */
>  #define snd_hdac_updatel(addr, reg, mask, val)		\
> diff --git a/sound/hda/ext/hdac_ext_controller.c b/sound/hda/ext/hdac_ext_controller.c
> index 556267e75591..8f1d292a522c 100644
> --- a/sound/hda/ext/hdac_ext_controller.c
> +++ b/sound/hda/ext/hdac_ext_controller.c
> @@ -21,6 +21,7 @@
>  #include <linux/slab.h>
>  #include <sound/hda_register.h>
>  #include <sound/hdaudio_ext.h>
> +#include <linux/pci.h>
>  
>  /*
>   * maximum HDAC capablities we should parse to avoid endless looping:
> @@ -306,3 +307,25 @@ int snd_hdac_ext_bus_link_power_down_all(struct hdac_ext_bus *ebus)
>  	return 0;
>  }
>  EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_power_down_all);
> +
> +static void update_pci_dword(struct pci_dev *pci,
> +			unsigned int reg, u32 mask, u32 val)
> +{
> +	u32 data;
> +
> +	pci_read_config_dword(pci, reg, &data);
> +	data &= ~mask;
> +	data |= (val & mask);
> +	pci_write_config_dword(pci, reg, data);
> +}
> +
> +void snd_hdac_ext_bus_enable_miscbdcge(struct device *dev, bool enable)
> +{
> +	struct pci_dev *pci = to_pci_dev(dev);
> +	u32 val;
> +
> +	val = enable ? AZX_CGCTL_MISCBDCGE_MASK : 0;
> +
> +	update_pci_dword(pci, AZX_PCIREG_CGCTL, AZX_CGCTL_MISCBDCGE_MASK, val);
> +}
> +EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_enable_miscbdcge);

PCI access doesn't belong in the HDA-core in general.  It's over the
abstraction level of HD-audio controller.


Takashi


More information about the Alsa-devel mailing list