forked from Minki/linux
i915/snd_hdac: I915 subcomponent for the snd_hdac
Since we need multiple components for I915 for different purposes (Audio & Mei_hdcp), we adopt the subcomponents methodology introduced by the previous patch (mentioned below). Author: Daniel Vetter <daniel.vetter@ffwll.ch> Date: Mon Jan 28 17:08:20 2019 +0530 components: multiple components for a device Reviewed-by: Takashi Iwai <tiwai@suse.de> Signed-off-by-by: Ramalingam C <ramalinagm.c@intel.com> (commit message) Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> (code) cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> cc: Russell King <rmk+kernel@arm.linux.org.uk> cc: Rafael J. Wysocki <rafael@kernel.org> cc: Jaroslav Kysela <perex@perex.cz> cc: Takashi Iwai <tiwai@suse.com> cc: Rodrigo Vivi <rodrigo.vivi@intel.com> cc: Jani Nikula <jani.nikula@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190207232759.14553-4-daniel.vetter@ffwll.ch
This commit is contained in:
parent
3521ee994b
commit
8857c7d065
@ -984,7 +984,9 @@ void i915_audio_component_init(struct drm_i915_private *dev_priv)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = component_add(dev_priv->drm.dev, &i915_audio_component_bind_ops);
|
ret = component_add_typed(dev_priv->drm.dev,
|
||||||
|
&i915_audio_component_bind_ops,
|
||||||
|
I915_COMPONENT_AUDIO);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
DRM_ERROR("failed to add audio component (%d)\n", ret);
|
DRM_ERROR("failed to add audio component (%d)\n", ret);
|
||||||
/* continue with reduced functionality */
|
/* continue with reduced functionality */
|
||||||
|
@ -26,6 +26,10 @@
|
|||||||
|
|
||||||
#include "drm_audio_component.h"
|
#include "drm_audio_component.h"
|
||||||
|
|
||||||
|
enum i915_component_type {
|
||||||
|
I915_COMPONENT_AUDIO = 1,
|
||||||
|
};
|
||||||
|
|
||||||
/* MAX_PORT is the number of port
|
/* MAX_PORT is the number of port
|
||||||
* It must be sync with I915_MAX_PORTS defined i915_drv.h
|
* It must be sync with I915_MAX_PORTS defined i915_drv.h
|
||||||
*/
|
*/
|
||||||
|
@ -20,7 +20,7 @@ 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);
|
bool *audio_enabled, char *buffer, int max_bytes);
|
||||||
int snd_hdac_acomp_init(struct hdac_bus *bus,
|
int snd_hdac_acomp_init(struct hdac_bus *bus,
|
||||||
const struct drm_audio_component_audio_ops *aops,
|
const struct drm_audio_component_audio_ops *aops,
|
||||||
int (*match_master)(struct device *, void *),
|
int (*match_master)(struct device *, int, void *),
|
||||||
size_t extra_size);
|
size_t extra_size);
|
||||||
int snd_hdac_acomp_exit(struct hdac_bus *bus);
|
int snd_hdac_acomp_exit(struct hdac_bus *bus);
|
||||||
int snd_hdac_acomp_register_notifier(struct hdac_bus *bus,
|
int snd_hdac_acomp_register_notifier(struct hdac_bus *bus,
|
||||||
@ -47,7 +47,8 @@ static inline int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t ni
|
|||||||
}
|
}
|
||||||
static inline int snd_hdac_acomp_init(struct hdac_bus *bus,
|
static inline int snd_hdac_acomp_init(struct hdac_bus *bus,
|
||||||
const struct drm_audio_component_audio_ops *aops,
|
const struct drm_audio_component_audio_ops *aops,
|
||||||
int (*match_master)(struct device *, void *),
|
int (*match_master)(struct device *,
|
||||||
|
int, void *),
|
||||||
size_t extra_size)
|
size_t extra_size)
|
||||||
{
|
{
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
@ -269,7 +269,7 @@ EXPORT_SYMBOL_GPL(snd_hdac_acomp_register_notifier);
|
|||||||
*/
|
*/
|
||||||
int snd_hdac_acomp_init(struct hdac_bus *bus,
|
int snd_hdac_acomp_init(struct hdac_bus *bus,
|
||||||
const struct drm_audio_component_audio_ops *aops,
|
const struct drm_audio_component_audio_ops *aops,
|
||||||
int (*match_master)(struct device *, void *),
|
int (*match_master)(struct device *, int, void *),
|
||||||
size_t extra_size)
|
size_t extra_size)
|
||||||
{
|
{
|
||||||
struct component_match *match = NULL;
|
struct component_match *match = NULL;
|
||||||
@ -288,7 +288,7 @@ int snd_hdac_acomp_init(struct hdac_bus *bus,
|
|||||||
bus->audio_component = acomp;
|
bus->audio_component = acomp;
|
||||||
devres_add(dev, acomp);
|
devres_add(dev, acomp);
|
||||||
|
|
||||||
component_match_add(dev, &match, match_master, bus);
|
component_match_add_typed(dev, &match, match_master, bus);
|
||||||
ret = component_master_add_with_match(dev, &hdac_component_master_ops,
|
ret = component_master_add_with_match(dev, &hdac_component_master_ops,
|
||||||
match);
|
match);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -82,9 +82,11 @@ void snd_hdac_i915_set_bclk(struct hdac_bus *bus)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(snd_hdac_i915_set_bclk);
|
EXPORT_SYMBOL_GPL(snd_hdac_i915_set_bclk);
|
||||||
|
|
||||||
static int i915_component_master_match(struct device *dev, void *data)
|
static int i915_component_master_match(struct device *dev, int subcomponent,
|
||||||
|
void *data)
|
||||||
{
|
{
|
||||||
return !strcmp(dev->driver->name, "i915");
|
return !strcmp(dev->driver->name, "i915") &&
|
||||||
|
subcomponent == I915_COMPONENT_AUDIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check whether intel graphics is present */
|
/* check whether intel graphics is present */
|
||||||
|
Loading…
Reference in New Issue
Block a user