2009-12-11 19:24:15 +10:00
/*
* Copyright ( C ) 2008 Maarten Maathuis .
* All Rights Reserved .
*
* 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 COPYRIGHT OWNER ( S ) AND / OR ITS SUPPLIERS 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 __NOUVEAU_ENCODER_H__
# define __NOUVEAU_ENCODER_H__
# include "drm_encoder_slave.h"
# include "nouveau_drv.h"
# define NV_DPMS_CLEARED 0x80
struct nouveau_encoder {
struct drm_encoder_slave base ;
struct dcb_entry * dcb ;
int or ;
2010-07-01 15:33:45 +10:00
/* different to drm_encoder.crtc, this reflects what's
* actually programmed on the hw , not the proposed crtc */
struct drm_crtc * crtc ;
2009-12-11 19:24:15 +10:00
struct drm_display_mode mode ;
int last_dpms ;
struct nv04_output_reg restore ;
union {
struct {
2011-08-04 14:31:28 +10:00
u8 dpcd [ 8 ] ;
2009-12-11 19:24:15 +10:00
int link_nr ;
int link_bw ;
2011-08-04 11:04:47 +10:00
u32 datarate ;
2009-12-11 19:24:15 +10:00
} dp ;
} ;
} ;
2011-08-02 19:29:37 +10:00
struct nouveau_encoder *
find_encoder ( struct drm_connector * connector , int type ) ;
2009-12-11 19:24:15 +10:00
static inline struct nouveau_encoder * nouveau_encoder ( struct drm_encoder * enc )
{
struct drm_encoder_slave * slave = to_encoder_slave ( enc ) ;
return container_of ( slave , struct nouveau_encoder , base ) ;
}
static inline struct drm_encoder * to_drm_encoder ( struct nouveau_encoder * enc )
{
return & enc - > base . base ;
}
2010-07-20 16:48:08 +02:00
static inline struct drm_encoder_slave_funcs *
get_slave_funcs ( struct drm_encoder * enc )
{
return to_encoder_slave ( enc ) - > slave_funcs ;
}
2009-12-11 19:24:15 +10:00
struct nouveau_connector *
nouveau_encoder_connector_get ( struct nouveau_encoder * encoder ) ;
2010-06-28 14:35:50 +10:00
int nv50_sor_create ( struct drm_connector * , struct dcb_entry * ) ;
int nv50_dac_create ( struct drm_connector * , struct dcb_entry * ) ;
2009-12-11 19:24:15 +10:00
# endif /* __NOUVEAU_ENCODER_H__ */