Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be15aad6 authored by David Henningsson's avatar David Henningsson Committed by Daniel Vetter
Browse files
parent fa8848f2
Loading
Loading
Loading
Loading
+51 −18
Original line number Diff line number Diff line
@@ -31,47 +31,80 @@
#define MAX_PORTS 5

/**
 * struct i915_audio_component_ops - callbacks defined in gfx driver
 * @owner: the module owner
 * @get_power: get the POWER_DOMAIN_AUDIO power well
 * @put_power: put the POWER_DOMAIN_AUDIO power well
 * @codec_wake_override: Enable/Disable generating the codec wake signal
 * @get_cdclk_freq: get the Core Display Clock in KHz
 * @sync_audio_rate: set n/cts based on the sample rate
 * struct i915_audio_component_ops - Ops implemented by i915 driver, called by hda driver
 */
struct i915_audio_component_ops {
	/**
	 * @owner: i915 module
	 */
	struct module *owner;
	/**
	 * @get_power: get the POWER_DOMAIN_AUDIO power well
	 *
	 * Request the power well to be turned on.
	 */
	void (*get_power)(struct device *);
	/**
	 * @put_power: put the POWER_DOMAIN_AUDIO power well
	 *
	 * Allow the power well to be turned off.
	 */
	void (*put_power)(struct device *);
	/**
	 * @codec_wake_override: Enable/disable codec wake signal
	 */
	void (*codec_wake_override)(struct device *, bool enable);
	/**
	 * @get_cdclk_freq: Get the Core Display Clock in kHz
	 */
	int (*get_cdclk_freq)(struct device *);
	/**
	 * @sync_audio_rate: set n/cts based on the sample rate
	 *
	 * Called from audio driver. After audio driver sets the
	 * sample rate, it will call this function to set n/cts
	 */
	int (*sync_audio_rate)(struct device *, int port, int rate);
};

/**
 * struct i915_audio_component_audio_ops - Ops implemented by hda driver, called by i915 driver
 */
struct i915_audio_component_audio_ops {
	/**
	 * @audio_ptr: Pointer to be used in call to pin_eld_notify
	 */
	void *audio_ptr;
	/**
	 * Call from i915 driver, notifying the HDA driver that
	 * pin sense and/or ELD information has changed.
	 * @audio_ptr:		HDA driver object
	 * @port:	Which port has changed (PORTA / PORTB / PORTC etc)
	 * @pin_eld_notify: Notify the HDA driver that pin sense and/or ELD information has changed
	 *
	 * Called when the i915 driver has set up audio pipeline or has just
	 * begun to tear it down. This allows the HDA driver to update its
	 * status accordingly (even when the HDA controller is in power save
	 * mode).
	 */
	void (*pin_eld_notify)(void *audio_ptr, int port);
};

/**
 * struct i915_audio_component - used for audio video interaction
 * @dev: the device from gfx driver
 * @aud_sample_rate: the array of audio sample rate per port
 * @ops: callback for audio driver calling
 * @audio_ops: Call from i915 driver
 * struct i915_audio_component - Used for direct communication between i915 and hda drivers
 */
struct i915_audio_component {
	/**
	 * @dev: i915 device, used as parameter for ops
	 */
	struct device *dev;
	/**
	 * @aud_sample_rate: the array of audio sample rate per port
	 */
	int aud_sample_rate[MAX_PORTS];

	/**
	 * @ops: Ops implemented by i915 driver, called by hda driver
	 */
	const struct i915_audio_component_ops *ops;

	/**
	 * @audio_ops: Ops implemented by hda driver, called by i915 driver
	 */
	const struct i915_audio_component_audio_ops *audio_ops;
};