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__
2012-07-26 09:12:47 +10:00
# include <subdev/bios/dcb.h>
2012-10-02 18:01:07 +01:00
# include <drm/drm_encoder_slave.h>
2013-03-21 15:45:11 +10:00
# include "dispnv04/disp.h"
2009-12-11 19:24:15 +10:00
# define NV_DPMS_CLEARED 0x80
2012-07-10 14:36:38 +10:00
struct nouveau_i2c_port ;
2009-12-11 19:24:15 +10:00
struct nouveau_encoder {
struct drm_encoder_slave base ;
2012-07-11 10:44:20 +10:00
struct dcb_output * dcb ;
2009-12-11 19:24:15 +10:00
int or ;
2013-02-11 20:15:03 +10:00
struct nouveau_i2c_port * i2c ;
2009-12-11 19:24:15 +10:00
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 ;
}
2012-03-09 16:22:56 +10:00
/* nouveau_dp.c */
bool nouveau_dp_detect ( struct drm_encoder * ) ;
2012-03-11 01:20:54 +10:00
void nouveau_dp_dpms ( struct drm_encoder * , int mode , u32 datarate ,
2012-11-15 18:56:02 +10:00
struct nouveau_object * ) ;
2012-03-09 16:22:56 +10:00
2009-12-11 19:24:15 +10:00
struct nouveau_connector *
nouveau_encoder_connector_get ( struct nouveau_encoder * encoder ) ;
2012-03-09 16:22:56 +10:00
2009-12-11 19:24:15 +10:00
# endif /* __NOUVEAU_ENCODER_H__ */