2012-08-15 13:59:49 +01:00
/*
* Copyright ( C ) 2012 Russell King
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# ifndef ARMADA_CRTC_H
# define ARMADA_CRTC_H
2019-01-17 22:03:34 +01:00
# include <drm/drm_crtc.h>
2012-08-15 13:59:49 +01:00
struct armada_gem_object ;
struct armada_regs {
uint32_t offset ;
uint32_t mask ;
uint32_t val ;
} ;
# define armada_reg_queue_mod(_r, _i, _v, _m, _o) \
do { \
struct armada_regs * __reg = _r ; \
__reg [ _i ] . offset = _o ; \
__reg [ _i ] . mask = ~ ( _m ) ; \
__reg [ _i ] . val = _v ; \
_i + + ; \
} while ( 0 )
# define armada_reg_queue_set(_r, _i, _v, _o) \
armada_reg_queue_mod ( _r , _i , _v , ~ 0 , _o )
# define armada_reg_queue_end(_r, _i) \
armada_reg_queue_mod ( _r , _i , 0 , 0 , ~ 0 )
2015-08-06 16:37:18 +01:00
struct armada_crtc ;
2014-04-22 15:24:03 +01:00
struct armada_variant ;
2012-08-15 13:59:49 +01:00
struct armada_crtc {
struct drm_crtc crtc ;
2014-04-22 15:24:03 +01:00
const struct armada_variant * variant ;
2012-08-15 13:59:49 +01:00
unsigned num ;
void __iomem * base ;
struct clk * clk ;
2014-04-22 15:21:30 +01:00
struct clk * extclk [ 2 ] ;
2012-08-15 13:59:49 +01:00
struct {
uint32_t spu_v_h_total ;
uint32_t spu_v_porch ;
uint32_t spu_adv_reg ;
} v [ 2 ] ;
bool interlaced ;
2013-05-19 10:55:17 +01:00
bool cursor_update ;
2012-08-15 13:59:49 +01:00
2013-05-19 10:55:17 +01:00
struct armada_gem_object * cursor_obj ;
int cursor_x ;
int cursor_y ;
uint32_t cursor_hw_pos ;
uint32_t cursor_hw_sz ;
uint32_t cursor_w ;
uint32_t cursor_h ;
2012-08-15 13:59:49 +01:00
uint32_t cfg_dumb_ctrl ;
uint32_t spu_iopad_ctrl ;
spinlock_t irq_lock ;
uint32_t irq_ena ;
2018-07-30 11:52:34 +01:00
2018-07-30 11:53:06 +01:00
bool update_pending ;
2018-07-30 11:52:34 +01:00
struct drm_pending_vblank_event * event ;
2018-07-30 11:52:34 +01:00
struct armada_regs atomic_regs [ 32 ] ;
struct armada_regs * regs ;
unsigned int regs_idx ;
2012-08-15 13:59:49 +01:00
} ;
# define drm_to_armada_crtc(c) container_of(c, struct armada_crtc, crtc)
void armada_drm_crtc_update_regs ( struct armada_crtc * , struct armada_regs * ) ;
2014-04-22 11:10:15 +01:00
extern struct platform_driver armada_lcd_platform_driver ;
2012-08-15 13:59:49 +01:00
# endif