1*2a0c2806SHans Verkuil /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*2a0c2806SHans Verkuil /* 3*2a0c2806SHans Verkuil * Zoran ZR36060 basic configuration functions - header file 4*2a0c2806SHans Verkuil * 5*2a0c2806SHans Verkuil * Copyright (C) 2002 Laurent Pinchart <laurent.pinchart@skynet.be> 6*2a0c2806SHans Verkuil */ 7*2a0c2806SHans Verkuil 8*2a0c2806SHans Verkuil #ifndef ZR36060_H 9*2a0c2806SHans Verkuil #define ZR36060_H 10*2a0c2806SHans Verkuil 11*2a0c2806SHans Verkuil #include "videocodec.h" 12*2a0c2806SHans Verkuil 13*2a0c2806SHans Verkuil /* data stored for each zoran jpeg codec chip */ 14*2a0c2806SHans Verkuil struct zr36060 { 15*2a0c2806SHans Verkuil char name[32]; 16*2a0c2806SHans Verkuil int num; 17*2a0c2806SHans Verkuil /* io datastructure */ 18*2a0c2806SHans Verkuil struct videocodec *codec; 19*2a0c2806SHans Verkuil // last coder status 20*2a0c2806SHans Verkuil __u8 status; 21*2a0c2806SHans Verkuil // actual coder setup 22*2a0c2806SHans Verkuil int mode; 23*2a0c2806SHans Verkuil 24*2a0c2806SHans Verkuil __u16 width; 25*2a0c2806SHans Verkuil __u16 height; 26*2a0c2806SHans Verkuil 27*2a0c2806SHans Verkuil __u16 bitrate_ctrl; 28*2a0c2806SHans Verkuil 29*2a0c2806SHans Verkuil __u32 total_code_vol; 30*2a0c2806SHans Verkuil __u32 real_code_vol; 31*2a0c2806SHans Verkuil __u16 max_block_vol; 32*2a0c2806SHans Verkuil 33*2a0c2806SHans Verkuil __u8 h_samp_ratio[8]; 34*2a0c2806SHans Verkuil __u8 v_samp_ratio[8]; 35*2a0c2806SHans Verkuil __u16 scalefact; 36*2a0c2806SHans Verkuil __u16 dri; 37*2a0c2806SHans Verkuil 38*2a0c2806SHans Verkuil /* app/com marker data */ 39*2a0c2806SHans Verkuil struct jpeg_app_marker app; 40*2a0c2806SHans Verkuil struct jpeg_com_marker com; 41*2a0c2806SHans Verkuil }; 42*2a0c2806SHans Verkuil 43*2a0c2806SHans Verkuil /* ZR36060 register addresses */ 44*2a0c2806SHans Verkuil #define ZR060_LOAD 0x000 45*2a0c2806SHans Verkuil #define ZR060_CFSR 0x001 46*2a0c2806SHans Verkuil #define ZR060_CIR 0x002 47*2a0c2806SHans Verkuil #define ZR060_CMR 0x003 48*2a0c2806SHans Verkuil #define ZR060_MBZ 0x004 49*2a0c2806SHans Verkuil #define ZR060_MBCVR 0x005 50*2a0c2806SHans Verkuil #define ZR060_MER 0x006 51*2a0c2806SHans Verkuil #define ZR060_IMR 0x007 52*2a0c2806SHans Verkuil #define ZR060_ISR 0x008 53*2a0c2806SHans Verkuil #define ZR060_TCV_NET_HI 0x009 54*2a0c2806SHans Verkuil #define ZR060_TCV_NET_MH 0x00a 55*2a0c2806SHans Verkuil #define ZR060_TCV_NET_ML 0x00b 56*2a0c2806SHans Verkuil #define ZR060_TCV_NET_LO 0x00c 57*2a0c2806SHans Verkuil #define ZR060_TCV_DATA_HI 0x00d 58*2a0c2806SHans Verkuil #define ZR060_TCV_DATA_MH 0x00e 59*2a0c2806SHans Verkuil #define ZR060_TCV_DATA_ML 0x00f 60*2a0c2806SHans Verkuil #define ZR060_TCV_DATA_LO 0x010 61*2a0c2806SHans Verkuil #define ZR060_SF_HI 0x011 62*2a0c2806SHans Verkuil #define ZR060_SF_LO 0x012 63*2a0c2806SHans Verkuil #define ZR060_AF_HI 0x013 64*2a0c2806SHans Verkuil #define ZR060_AF_M 0x014 65*2a0c2806SHans Verkuil #define ZR060_AF_LO 0x015 66*2a0c2806SHans Verkuil #define ZR060_ACV_HI 0x016 67*2a0c2806SHans Verkuil #define ZR060_ACV_MH 0x017 68*2a0c2806SHans Verkuil #define ZR060_ACV_ML 0x018 69*2a0c2806SHans Verkuil #define ZR060_ACV_LO 0x019 70*2a0c2806SHans Verkuil #define ZR060_ACT_HI 0x01a 71*2a0c2806SHans Verkuil #define ZR060_ACT_MH 0x01b 72*2a0c2806SHans Verkuil #define ZR060_ACT_ML 0x01c 73*2a0c2806SHans Verkuil #define ZR060_ACT_LO 0x01d 74*2a0c2806SHans Verkuil #define ZR060_ACV_TURN_HI 0x01e 75*2a0c2806SHans Verkuil #define ZR060_ACV_TURN_MH 0x01f 76*2a0c2806SHans Verkuil #define ZR060_ACV_TURN_ML 0x020 77*2a0c2806SHans Verkuil #define ZR060_ACV_TURN_LO 0x021 78*2a0c2806SHans Verkuil #define ZR060_IDR_DEV 0x022 79*2a0c2806SHans Verkuil #define ZR060_IDR_REV 0x023 80*2a0c2806SHans Verkuil #define ZR060_TCR_HI 0x024 81*2a0c2806SHans Verkuil #define ZR060_TCR_LO 0x025 82*2a0c2806SHans Verkuil #define ZR060_VCR 0x030 83*2a0c2806SHans Verkuil #define ZR060_VPR 0x031 84*2a0c2806SHans Verkuil #define ZR060_SR 0x032 85*2a0c2806SHans Verkuil #define ZR060_BCR_Y 0x033 86*2a0c2806SHans Verkuil #define ZR060_BCR_U 0x034 87*2a0c2806SHans Verkuil #define ZR060_BCR_V 0x035 88*2a0c2806SHans Verkuil #define ZR060_SGR_VTOTAL_HI 0x036 89*2a0c2806SHans Verkuil #define ZR060_SGR_VTOTAL_LO 0x037 90*2a0c2806SHans Verkuil #define ZR060_SGR_HTOTAL_HI 0x038 91*2a0c2806SHans Verkuil #define ZR060_SGR_HTOTAL_LO 0x039 92*2a0c2806SHans Verkuil #define ZR060_SGR_VSYNC 0x03a 93*2a0c2806SHans Verkuil #define ZR060_SGR_HSYNC 0x03b 94*2a0c2806SHans Verkuil #define ZR060_SGR_BVSTART 0x03c 95*2a0c2806SHans Verkuil #define ZR060_SGR_BHSTART 0x03d 96*2a0c2806SHans Verkuil #define ZR060_SGR_BVEND_HI 0x03e 97*2a0c2806SHans Verkuil #define ZR060_SGR_BVEND_LO 0x03f 98*2a0c2806SHans Verkuil #define ZR060_SGR_BHEND_HI 0x040 99*2a0c2806SHans Verkuil #define ZR060_SGR_BHEND_LO 0x041 100*2a0c2806SHans Verkuil #define ZR060_AAR_VSTART_HI 0x042 101*2a0c2806SHans Verkuil #define ZR060_AAR_VSTART_LO 0x043 102*2a0c2806SHans Verkuil #define ZR060_AAR_VEND_HI 0x044 103*2a0c2806SHans Verkuil #define ZR060_AAR_VEND_LO 0x045 104*2a0c2806SHans Verkuil #define ZR060_AAR_HSTART_HI 0x046 105*2a0c2806SHans Verkuil #define ZR060_AAR_HSTART_LO 0x047 106*2a0c2806SHans Verkuil #define ZR060_AAR_HEND_HI 0x048 107*2a0c2806SHans Verkuil #define ZR060_AAR_HEND_LO 0x049 108*2a0c2806SHans Verkuil #define ZR060_SWR_VSTART_HI 0x04a 109*2a0c2806SHans Verkuil #define ZR060_SWR_VSTART_LO 0x04b 110*2a0c2806SHans Verkuil #define ZR060_SWR_VEND_HI 0x04c 111*2a0c2806SHans Verkuil #define ZR060_SWR_VEND_LO 0x04d 112*2a0c2806SHans Verkuil #define ZR060_SWR_HSTART_HI 0x04e 113*2a0c2806SHans Verkuil #define ZR060_SWR_HSTART_LO 0x04f 114*2a0c2806SHans Verkuil #define ZR060_SWR_HEND_HI 0x050 115*2a0c2806SHans Verkuil #define ZR060_SWR_HEND_LO 0x051 116*2a0c2806SHans Verkuil 117*2a0c2806SHans Verkuil #define ZR060_SOF_IDX 0x060 118*2a0c2806SHans Verkuil #define ZR060_SOS_IDX 0x07a 119*2a0c2806SHans Verkuil #define ZR060_DRI_IDX 0x0c0 120*2a0c2806SHans Verkuil #define ZR060_DQT_IDX 0x0cc 121*2a0c2806SHans Verkuil #define ZR060_DHT_IDX 0x1d4 122*2a0c2806SHans Verkuil #define ZR060_APP_IDX 0x380 123*2a0c2806SHans Verkuil #define ZR060_COM_IDX 0x3c0 124*2a0c2806SHans Verkuil 125*2a0c2806SHans Verkuil /* ZR36060 LOAD register bits */ 126*2a0c2806SHans Verkuil 127*2a0c2806SHans Verkuil #define ZR060_LOAD_LOAD BIT(7) 128*2a0c2806SHans Verkuil #define ZR060_LOAD_SYNC_RST BIT(0) 129*2a0c2806SHans Verkuil 130*2a0c2806SHans Verkuil /* ZR36060 Code FIFO Status register bits */ 131*2a0c2806SHans Verkuil 132*2a0c2806SHans Verkuil #define ZR060_CFSR_BUSY BIT(7) 133*2a0c2806SHans Verkuil #define ZR060_CFSR_C_BUSY BIT(2) 134*2a0c2806SHans Verkuil #define ZR060_CFSR_CFIFO (3 << 0) 135*2a0c2806SHans Verkuil 136*2a0c2806SHans Verkuil /* ZR36060 Code Interface register */ 137*2a0c2806SHans Verkuil 138*2a0c2806SHans Verkuil #define ZR060_CIR_CODE16 BIT(7) 139*2a0c2806SHans Verkuil #define ZR060_CIR_ENDIAN BIT(6) 140*2a0c2806SHans Verkuil #define ZR060_CIR_CFIS BIT(2) 141*2a0c2806SHans Verkuil #define ZR060_CIR_CODE_MSTR BIT(0) 142*2a0c2806SHans Verkuil 143*2a0c2806SHans Verkuil /* ZR36060 Codec Mode register */ 144*2a0c2806SHans Verkuil 145*2a0c2806SHans Verkuil #define ZR060_CMR_COMP BIT(7) 146*2a0c2806SHans Verkuil #define ZR060_CMR_ATP BIT(6) 147*2a0c2806SHans Verkuil #define ZR060_CMR_PASS2 BIT(5) 148*2a0c2806SHans Verkuil #define ZR060_CMR_TLM BIT(4) 149*2a0c2806SHans Verkuil #define ZR060_CMR_BRB BIT(2) 150*2a0c2806SHans Verkuil #define ZR060_CMR_FSF BIT(1) 151*2a0c2806SHans Verkuil 152*2a0c2806SHans Verkuil /* ZR36060 Markers Enable register */ 153*2a0c2806SHans Verkuil 154*2a0c2806SHans Verkuil #define ZR060_MER_APP BIT(7) 155*2a0c2806SHans Verkuil #define ZR060_MER_COM BIT(6) 156*2a0c2806SHans Verkuil #define ZR060_MER_DRI BIT(5) 157*2a0c2806SHans Verkuil #define ZR060_MER_DQT BIT(4) 158*2a0c2806SHans Verkuil #define ZR060_MER_DHT BIT(3) 159*2a0c2806SHans Verkuil 160*2a0c2806SHans Verkuil /* ZR36060 Interrupt Mask register */ 161*2a0c2806SHans Verkuil 162*2a0c2806SHans Verkuil #define ZR060_IMR_EOAV BIT(3) 163*2a0c2806SHans Verkuil #define ZR060_IMR_EOI BIT(2) 164*2a0c2806SHans Verkuil #define ZR060_IMR_END BIT(1) 165*2a0c2806SHans Verkuil #define ZR060_IMR_DATA_ERR BIT(0) 166*2a0c2806SHans Verkuil 167*2a0c2806SHans Verkuil /* ZR36060 Interrupt Status register */ 168*2a0c2806SHans Verkuil 169*2a0c2806SHans Verkuil #define ZR060_ISR_PRO_CNT (3 << 6) 170*2a0c2806SHans Verkuil #define ZR060_ISR_EOAV BIT(3) 171*2a0c2806SHans Verkuil #define ZR060_ISR_EOI BIT(2) 172*2a0c2806SHans Verkuil #define ZR060_ISR_END BIT(1) 173*2a0c2806SHans Verkuil #define ZR060_ISR_DATA_ERR BIT(0) 174*2a0c2806SHans Verkuil 175*2a0c2806SHans Verkuil /* ZR36060 Video Control register */ 176*2a0c2806SHans Verkuil 177*2a0c2806SHans Verkuil #define ZR060_VCR_VIDEO8 BIT(7) 178*2a0c2806SHans Verkuil #define ZR060_VCR_RANGE BIT(6) 179*2a0c2806SHans Verkuil #define ZR060_VCR_FI_DET BIT(3) 180*2a0c2806SHans Verkuil #define ZR060_VCR_FI_VEDGE BIT(2) 181*2a0c2806SHans Verkuil #define ZR060_VCR_FI_EXT BIT(1) 182*2a0c2806SHans Verkuil #define ZR060_VCR_SYNC_MSTR BIT(0) 183*2a0c2806SHans Verkuil 184*2a0c2806SHans Verkuil /* ZR36060 Video Polarity register */ 185*2a0c2806SHans Verkuil 186*2a0c2806SHans Verkuil #define ZR060_VPR_VCLK_POL BIT(7) 187*2a0c2806SHans Verkuil #define ZR060_VPR_P_VAL_POL BIT(6) 188*2a0c2806SHans Verkuil #define ZR060_VPR_POE_POL BIT(5) 189*2a0c2806SHans Verkuil #define ZR060_VPR_S_IMG_POL BIT(4) 190*2a0c2806SHans Verkuil #define ZR060_VPR_BL_POL BIT(3) 191*2a0c2806SHans Verkuil #define ZR060_VPR_FI_POL BIT(2) 192*2a0c2806SHans Verkuil #define ZR060_VPR_HS_POL BIT(1) 193*2a0c2806SHans Verkuil #define ZR060_VPR_VS_POL BIT(0) 194*2a0c2806SHans Verkuil 195*2a0c2806SHans Verkuil /* ZR36060 Scaling register */ 196*2a0c2806SHans Verkuil 197*2a0c2806SHans Verkuil #define ZR060_SR_V_SCALE BIT(2) 198*2a0c2806SHans Verkuil #define ZR060_SR_H_SCALE2 BIT(0) 199*2a0c2806SHans Verkuil #define ZR060_SR_H_SCALE4 (2 << 0) 200*2a0c2806SHans Verkuil 201*2a0c2806SHans Verkuil int zr36060_init_module(void); 202*2a0c2806SHans Verkuil void zr36060_cleanup_module(void); 203*2a0c2806SHans Verkuil #endif /*fndef ZR36060_H */ 204