Subversion Repositories Kolibri OS

Rev

Rev 6082 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright © 2014 Intel Corporation
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the "Software"),
  6.  * to deal in the Software without restriction, including without limitation
  7.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8.  * and/or sell copies of the Software, and to permit persons to whom the
  9.  * Software is furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice (including the next
  12.  * paragraph) shall be included in all copies or substantial portions of the
  13.  * Software.
  14.  *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  21.  * IN THE SOFTWARE.
  22.  */
  23.  
  24. #ifndef _I915_COMPONENT_H_
  25. #define _I915_COMPONENT_H_
  26.  
  27. /* MAX_PORT is the number of port
  28.  * It must be sync with I915_MAX_PORTS defined i915_drv.h
  29.  * 5 should be enough as only HSW, BDW, SKL need such fix.
  30.  */
  31. #define MAX_PORTS 5
  32.  
  33. /**
  34.  * struct i915_audio_component_ops - Ops implemented by i915 driver, called by hda driver
  35.  */
  36. struct i915_audio_component_ops {
  37.         /**
  38.          * @owner: i915 module
  39.          */
  40.         struct module *owner;
  41.         /**
  42.          * @get_power: get the POWER_DOMAIN_AUDIO power well
  43.          *
  44.          * Request the power well to be turned on.
  45.          */
  46.         void (*get_power)(struct device *);
  47.         /**
  48.          * @put_power: put the POWER_DOMAIN_AUDIO power well
  49.          *
  50.          * Allow the power well to be turned off.
  51.          */
  52.         void (*put_power)(struct device *);
  53.         /**
  54.          * @codec_wake_override: Enable/disable codec wake signal
  55.          */
  56.         void (*codec_wake_override)(struct device *, bool enable);
  57.         /**
  58.          * @get_cdclk_freq: Get the Core Display Clock in kHz
  59.          */
  60.         int (*get_cdclk_freq)(struct device *);
  61.         /**
  62.          * @sync_audio_rate: set n/cts based on the sample rate
  63.          *
  64.          * Called from audio driver. After audio driver sets the
  65.          * sample rate, it will call this function to set n/cts
  66.          */
  67.         int (*sync_audio_rate)(struct device *, int port, int rate);
  68.         /**
  69.          * @get_eld: fill the audio state and ELD bytes for the given port
  70.          *
  71.          * Called from audio driver to get the HDMI/DP audio state of the given
  72.          * digital port, and also fetch ELD bytes to the given pointer.
  73.          *
  74.          * It returns the byte size of the original ELD (not the actually
  75.          * copied size), zero for an invalid ELD, or a negative error code.
  76.          *
  77.          * Note that the returned size may be over @max_bytes.  Then it
  78.          * implies that only a part of ELD has been copied to the buffer.
  79.          */
  80.         int (*get_eld)(struct device *, int port, bool *enabled,
  81.                        unsigned char *buf, int max_bytes);
  82. };
  83.  
  84. /**
  85.  * struct i915_audio_component_audio_ops - Ops implemented by hda driver, called by i915 driver
  86.  */
  87. struct i915_audio_component_audio_ops {
  88.         /**
  89.          * @audio_ptr: Pointer to be used in call to pin_eld_notify
  90.          */
  91.         void *audio_ptr;
  92.         /**
  93.          * @pin_eld_notify: Notify the HDA driver that pin sense and/or ELD information has changed
  94.          *
  95.          * Called when the i915 driver has set up audio pipeline or has just
  96.          * begun to tear it down. This allows the HDA driver to update its
  97.          * status accordingly (even when the HDA controller is in power save
  98.          * mode).
  99.          */
  100.         void (*pin_eld_notify)(void *audio_ptr, int port);
  101. };
  102.  
  103. /**
  104.  * struct i915_audio_component - Used for direct communication between i915 and hda drivers
  105.  */
  106. struct i915_audio_component {
  107.         /**
  108.          * @dev: i915 device, used as parameter for ops
  109.          */
  110.         struct device *dev;
  111.         /**
  112.          * @aud_sample_rate: the array of audio sample rate per port
  113.          */
  114.         int aud_sample_rate[MAX_PORTS];
  115.         /**
  116.          * @ops: Ops implemented by i915 driver, called by hda driver
  117.          */
  118.         const struct i915_audio_component_ops *ops;
  119.         /**
  120.          * @audio_ops: Ops implemented by hda driver, called by i915 driver
  121.          */
  122.         const struct i915_audio_component_audio_ops *audio_ops;
  123. };
  124.  
  125. #endif /* _I915_COMPONENT_H_ */
  126.