|
@@ -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;
|
|
|
};
|
|
|
|