2015-01-08 18:54:14 +03:00
/*
* Copyright © 2014 Intel Corporation
*
* Permission is hereby granted , free of charge , to any person obtaining a
* copy of this software and associated documentation files ( the " Software " ) ,
* to deal in the Software without restriction , including without limitation
* the rights to use , copy , modify , merge , publish , distribute , sublicense ,
* and / or sell copies of the Software , and to permit persons to whom the
* Software is furnished to do so , subject to the following conditions :
*
* The above copyright notice and this permission notice ( including the next
* paragraph ) shall be included in all copies or substantial portions of the
* Software .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
* LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING
* FROM , OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE .
*/
# ifndef _I915_COMPONENT_H_
# define _I915_COMPONENT_H_
2015-09-25 04:36:12 +03:00
/* MAX_PORT is the number of port
* It must be sync with I915_MAX_PORTS defined i915_drv . h
* 5 should be enough as only HSW , BDW , SKL need such fix .
*/
# define MAX_PORTS 5
2015-10-01 12:01:08 +03:00
/**
2015-10-16 12:24:24 +03:00
* struct i915_audio_component_ops - Ops implemented by i915 driver , called by hda driver
2015-10-01 12:01:08 +03:00
*/
struct i915_audio_component_ops {
2015-10-16 12:24:24 +03:00
/**
* @ owner : i915 module
*/
2015-10-01 12:01:08 +03:00
struct module * owner ;
2015-10-16 12:24:24 +03:00
/**
* @ get_power : get the POWER_DOMAIN_AUDIO power well
*
* Request the power well to be turned on .
*/
2015-10-01 12:01:08 +03:00
void ( * get_power ) ( struct device * ) ;
2015-10-16 12:24:24 +03:00
/**
* @ put_power : put the POWER_DOMAIN_AUDIO power well
*
* Allow the power well to be turned off .
*/
2015-10-01 12:01:08 +03:00
void ( * put_power ) ( struct device * ) ;
2015-10-16 12:24:24 +03:00
/**
* @ codec_wake_override : Enable / disable codec wake signal
*/
2015-10-01 12:01:08 +03:00
void ( * codec_wake_override ) ( struct device * , bool enable ) ;
2015-10-16 12:24:24 +03:00
/**
* @ get_cdclk_freq : Get the Core Display Clock in kHz
*/
2015-10-01 12:01:08 +03:00
int ( * get_cdclk_freq ) ( struct device * ) ;
2015-10-16 12:24:24 +03:00
/**
* @ 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
*/
2015-10-01 12:01:08 +03:00
int ( * sync_audio_rate ) ( struct device * , int port , int rate ) ;
2015-11-12 17:23:41 +03:00
/**
* @ get_eld : fill the audio state and ELD bytes for the given port
*
* Called from audio driver to get the HDMI / DP audio state of the given
* digital port , and also fetch ELD bytes to the given pointer .
*
* It returns the byte size of the original ELD ( not the actually
* copied size ) , zero for an invalid ELD , or a negative error code .
*
* Note that the returned size may be over @ max_bytes . Then it
* implies that only a part of ELD has been copied to the buffer .
*/
int ( * get_eld ) ( struct device * , int port , bool * enabled ,
unsigned char * buf , int max_bytes ) ;
2015-10-01 12:01:08 +03:00
} ;
2015-10-16 12:24:24 +03:00
/**
* struct i915_audio_component_audio_ops - Ops implemented by hda driver , called by i915 driver
*/
2015-10-01 12:01:08 +03:00
struct i915_audio_component_audio_ops {
2015-10-16 12:24:24 +03:00
/**
* @ audio_ptr : Pointer to be used in call to pin_eld_notify
*/
2015-10-01 12:01:08 +03:00
void * audio_ptr ;
2015-09-25 04:36:12 +03:00
/**
2015-10-16 12:24:24 +03:00
* @ 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 ) .
2015-09-25 04:36:12 +03:00
*/
2015-10-01 12:01:08 +03:00
void ( * pin_eld_notify ) ( void * audio_ptr , int port ) ;
} ;
/**
2015-10-16 12:24:24 +03:00
* struct i915_audio_component - Used for direct communication between i915 and hda drivers
2015-10-01 12:01:08 +03:00
*/
struct i915_audio_component {
2015-10-16 12:24:24 +03:00
/**
* @ dev : i915 device , used as parameter for ops
*/
2015-10-01 12:01:08 +03:00
struct device * dev ;
2015-10-16 12:24:24 +03:00
/**
* @ aud_sample_rate : the array of audio sample rate per port
*/
2015-09-25 04:36:12 +03:00
int aud_sample_rate [ MAX_PORTS ] ;
2015-10-16 12:24:24 +03:00
/**
* @ ops : Ops implemented by i915 driver , called by hda driver
*/
2015-10-01 12:01:08 +03:00
const struct i915_audio_component_ops * ops ;
2015-10-16 12:24:24 +03:00
/**
* @ audio_ops : Ops implemented by hda driver , called by i915 driver
*/
2015-10-01 12:01:08 +03:00
const struct i915_audio_component_audio_ops * audio_ops ;
2015-01-08 18:54:14 +03:00
} ;
# endif /* _I915_COMPONENT_H_ */