Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 
0003 /*
0004  * em28xx-reg.h - Register definitions for em28xx driver
0005  */
0006 
0007 #define EM_GPIO_0  ((unsigned char)BIT(0))
0008 #define EM_GPIO_1  ((unsigned char)BIT(1))
0009 #define EM_GPIO_2  ((unsigned char)BIT(2))
0010 #define EM_GPIO_3  ((unsigned char)BIT(3))
0011 #define EM_GPIO_4  ((unsigned char)BIT(4))
0012 #define EM_GPIO_5  ((unsigned char)BIT(5))
0013 #define EM_GPIO_6  ((unsigned char)BIT(6))
0014 #define EM_GPIO_7  ((unsigned char)BIT(7))
0015 
0016 #define EM_GPO_0   ((unsigned char)BIT(0))
0017 #define EM_GPO_1   ((unsigned char)BIT(1))
0018 #define EM_GPO_2   ((unsigned char)BIT(2))
0019 #define EM_GPO_3   ((unsigned char)BIT(3))
0020 
0021 /* em28xx endpoints */
0022 /* 0x82:   (always ?) analog */
0023 #define EM28XX_EP_AUDIO     0x83
0024 /* 0x84:   digital or analog */
0025 
0026 /* em2800 registers */
0027 #define EM2800_R08_AUDIOSRC 0x08
0028 
0029 /* em28xx registers */
0030 
0031 #define EM28XX_R00_CHIPCFG  0x00
0032 
0033 /* em28xx Chip Configuration 0x00 */
0034 #define EM2860_CHIPCFG_VENDOR_AUDIO     0x80
0035 #define EM2860_CHIPCFG_I2S_VOLUME_CAPABLE   0x40
0036 #define EM2820_CHIPCFG_I2S_3_SAMPRATES      0x30
0037 #define EM2860_CHIPCFG_I2S_5_SAMPRATES      0x30
0038 #define EM2820_CHIPCFG_I2S_1_SAMPRATE       0x20
0039 #define EM2860_CHIPCFG_I2S_3_SAMPRATES      0x20
0040 #define EM28XX_CHIPCFG_AC97         0x10
0041 #define EM28XX_CHIPCFG_AUDIOMASK        0x30
0042 
0043 #define EM28XX_R01_CHIPCFG2 0x01
0044 
0045 /* em28xx Chip Configuration 2 0x01 */
0046 #define EM28XX_CHIPCFG2_TS_PRESENT      0x10
0047 #define EM28XX_CHIPCFG2_TS_REQ_INTERVAL_MASK    0x0c /* bits 3-2 */
0048 #define EM28XX_CHIPCFG2_TS_REQ_INTERVAL_1MF 0x00
0049 #define EM28XX_CHIPCFG2_TS_REQ_INTERVAL_2MF 0x04
0050 #define EM28XX_CHIPCFG2_TS_REQ_INTERVAL_4MF 0x08
0051 #define EM28XX_CHIPCFG2_TS_REQ_INTERVAL_8MF 0x0c
0052 #define EM28XX_CHIPCFG2_TS_PACKETSIZE_MASK  0x03 /* bits 0-1 */
0053 #define EM28XX_CHIPCFG2_TS_PACKETSIZE_188   0x00
0054 #define EM28XX_CHIPCFG2_TS_PACKETSIZE_376   0x01
0055 #define EM28XX_CHIPCFG2_TS_PACKETSIZE_564   0x02
0056 #define EM28XX_CHIPCFG2_TS_PACKETSIZE_752   0x03
0057 
0058 /* GPIO/GPO registers */
0059 #define EM2880_R04_GPO      0x04    /* em2880-em2883 only */
0060 #define EM2820_R08_GPIO_CTRL    0x08    /* em2820-em2873/83 only */
0061 #define EM2820_R09_GPIO_STATE   0x09    /* em2820-em2873/83 only */
0062 
0063 #define EM28XX_R06_I2C_CLK  0x06
0064 
0065 /* em28xx I2C Clock Register (0x06) */
0066 #define EM28XX_I2C_CLK_ACK_LAST_READ    0x80
0067 #define EM28XX_I2C_CLK_WAIT_ENABLE  0x40
0068 #define EM28XX_I2C_EEPROM_ON_BOARD  0x08
0069 #define EM28XX_I2C_EEPROM_KEY_VALID 0x04
0070 #define EM2874_I2C_SECONDARY_BUS_SELECT 0x04 /* em2874 has two i2c buses */
0071 #define EM28XX_I2C_FREQ_1_5_MHZ     0x03 /* bus frequency (bits [1-0]) */
0072 #define EM28XX_I2C_FREQ_25_KHZ      0x02
0073 #define EM28XX_I2C_FREQ_400_KHZ     0x01
0074 #define EM28XX_I2C_FREQ_100_KHZ     0x00
0075 
0076 #define EM28XX_R0A_CHIPID   0x0a
0077 #define EM28XX_R0C_USBSUSP  0x0c
0078 #define   EM28XX_R0C_USBSUSP_SNAPSHOT   0x20 /* 1=button pressed, needs reset */
0079 
0080 #define EM28XX_R0E_AUDIOSRC 0x0e
0081 #define EM28XX_R0F_XCLK 0x0f
0082 
0083 /* em28xx XCLK Register (0x0f) */
0084 #define EM28XX_XCLK_AUDIO_UNMUTE    0x80 /* otherwise audio muted */
0085 #define EM28XX_XCLK_I2S_MSB_TIMING  0x40 /* otherwise standard timing */
0086 #define EM28XX_XCLK_IR_RC5_MODE     0x20 /* otherwise NEC mode */
0087 #define EM28XX_XCLK_IR_NEC_CHK_PARITY   0x10
0088 #define EM28XX_XCLK_FREQUENCY_30MHZ 0x00 /* Freq. select (bits [3-0]) */
0089 #define EM28XX_XCLK_FREQUENCY_15MHZ 0x01
0090 #define EM28XX_XCLK_FREQUENCY_10MHZ 0x02
0091 #define EM28XX_XCLK_FREQUENCY_7_5MHZ    0x03
0092 #define EM28XX_XCLK_FREQUENCY_6MHZ  0x04
0093 #define EM28XX_XCLK_FREQUENCY_5MHZ  0x05
0094 #define EM28XX_XCLK_FREQUENCY_4_3MHZ    0x06
0095 #define EM28XX_XCLK_FREQUENCY_12MHZ 0x07
0096 #define EM28XX_XCLK_FREQUENCY_20MHZ 0x08
0097 #define EM28XX_XCLK_FREQUENCY_20MHZ_2   0x09
0098 #define EM28XX_XCLK_FREQUENCY_48MHZ 0x0a
0099 #define EM28XX_XCLK_FREQUENCY_24MHZ 0x0b
0100 
0101 #define EM28XX_R10_VINMODE  0x10
0102       /* used by all non-camera devices: */
0103 #define   EM28XX_VINMODE_YUV422_CbYCrY  0x10
0104       /* used by camera devices: */
0105 #define   EM28XX_VINMODE_YUV422_YUYV    0x08
0106 #define   EM28XX_VINMODE_YUV422_YVYU    0x09
0107 #define   EM28XX_VINMODE_YUV422_UYVY    0x0a
0108 #define   EM28XX_VINMODE_YUV422_VYUY    0x0b
0109 #define   EM28XX_VINMODE_RGB8_BGGR      0x0c
0110 #define   EM28XX_VINMODE_RGB8_GRBG      0x0d
0111 #define   EM28XX_VINMODE_RGB8_GBRG      0x0e
0112 #define   EM28XX_VINMODE_RGB8_RGGB      0x0f
0113       /*
0114        * apparently:
0115        *   bit 0: swap component 1+2 with 3+4
0116        *                 => e.g.: YUYV => YVYU, BGGR => GRBG
0117        *   bit 1: swap component 1 with 2 and 3 with 4
0118        *                 => e.g.: YUYV => UYVY, BGGR => GBRG
0119        */
0120 
0121 #define EM28XX_R11_VINCTRL  0x11
0122 
0123 /* em28xx Video Input Control Register 0x11 */
0124 #define EM28XX_VINCTRL_VBI_SLICED   0x80
0125 #define EM28XX_VINCTRL_VBI_RAW      0x40
0126 #define EM28XX_VINCTRL_VOUT_MODE_IN 0x20 /* HREF,VREF,VACT in output */
0127 #define EM28XX_VINCTRL_CCIR656_ENABLE   0x10
0128 #define EM28XX_VINCTRL_VBI_16BIT_RAW    0x08 /* otherwise 8-bit raw */
0129 #define EM28XX_VINCTRL_FID_ON_HREF  0x04
0130 #define EM28XX_VINCTRL_DUAL_EDGE_STROBE 0x02
0131 #define EM28XX_VINCTRL_INTERLACED   0x01
0132 
0133 #define EM28XX_R12_VINENABLE    0x12    /* */
0134 
0135 #define EM28XX_R14_GAMMA    0x14
0136 #define EM28XX_R15_RGAIN    0x15
0137 #define EM28XX_R16_GGAIN    0x16
0138 #define EM28XX_R17_BGAIN    0x17
0139 #define EM28XX_R18_ROFFSET  0x18
0140 #define EM28XX_R19_GOFFSET  0x19
0141 #define EM28XX_R1A_BOFFSET  0x1a
0142 
0143 #define EM28XX_R1B_OFLOW    0x1b
0144 #define EM28XX_R1C_HSTART   0x1c
0145 #define EM28XX_R1D_VSTART   0x1d
0146 #define EM28XX_R1E_CWIDTH   0x1e
0147 #define EM28XX_R1F_CHEIGHT  0x1f
0148 
0149 #define EM28XX_R20_YGAIN    0x20 /* contrast [0:4]   */
0150 #define   CONTRAST_DEFAULT  0x10
0151 
0152 #define EM28XX_R21_YOFFSET  0x21 /* brightness       */ /* signed */
0153 #define   BRIGHTNESS_DEFAULT    0x00
0154 
0155 #define EM28XX_R22_UVGAIN   0x22 /* saturation [0:4] */
0156 #define   SATURATION_DEFAULT    0x10
0157 
0158 #define EM28XX_R23_UOFFSET  0x23 /* blue balance     */ /* signed */
0159 #define   BLUE_BALANCE_DEFAULT  0x00
0160 
0161 #define EM28XX_R24_VOFFSET  0x24 /* red balance      */ /* signed */
0162 #define   RED_BALANCE_DEFAULT   0x00
0163 
0164 #define EM28XX_R25_SHARPNESS    0x25 /* sharpness [0:4]  */
0165 #define   SHARPNESS_DEFAULT 0x00
0166 
0167 #define EM28XX_R26_COMPR    0x26
0168 #define EM28XX_R27_OUTFMT   0x27
0169 
0170 /* em28xx Output Format Register (0x27) */
0171 #define EM28XX_OUTFMT_RGB_8_RGRG    0x00
0172 #define EM28XX_OUTFMT_RGB_8_GRGR    0x01
0173 #define EM28XX_OUTFMT_RGB_8_GBGB    0x02
0174 #define EM28XX_OUTFMT_RGB_8_BGBG    0x03
0175 #define EM28XX_OUTFMT_RGB_16_656    0x04
0176 #define EM28XX_OUTFMT_RGB_8_BAYER   0x08 /* Pattern in Reg 0x10[1-0] */
0177 #define EM28XX_OUTFMT_YUV211        0x10
0178 #define EM28XX_OUTFMT_YUV422_Y0UY1V 0x14
0179 #define EM28XX_OUTFMT_YUV422_Y1UY0V 0x15
0180 #define EM28XX_OUTFMT_YUV411        0x18
0181 
0182 #define EM28XX_R28_XMIN 0x28
0183 #define EM28XX_R29_XMAX 0x29
0184 #define EM28XX_R2A_YMIN 0x2a
0185 #define EM28XX_R2B_YMAX 0x2b
0186 
0187 #define EM28XX_R30_HSCALELOW    0x30
0188 #define EM28XX_R31_HSCALEHIGH   0x31
0189 #define EM28XX_R32_VSCALELOW    0x32
0190 #define EM28XX_R33_VSCALEHIGH   0x33
0191 #define   EM28XX_HVSCALE_MAX    0x3fff /* => 20% */
0192 
0193 #define EM28XX_R34_VBI_START_H  0x34
0194 #define EM28XX_R35_VBI_START_V  0x35
0195 /*
0196  * NOTE: the EM276x (and EM25xx, EM277x/8x ?) (camera bridges) use these
0197  * registers for a different unknown purpose.
0198  *   => register 0x34 is set to capture width / 16
0199  *   => register 0x35 is set to capture height / 16
0200  */
0201 
0202 #define EM28XX_R36_VBI_WIDTH    0x36
0203 #define EM28XX_R37_VBI_HEIGHT   0x37
0204 
0205 #define EM28XX_R40_AC97LSB  0x40
0206 #define EM28XX_R41_AC97MSB  0x41
0207 #define EM28XX_R42_AC97ADDR 0x42
0208 #define EM28XX_R43_AC97BUSY 0x43
0209 
0210 #define EM28XX_R45_IR       0x45
0211     /*
0212      * 0x45  bit 7    - parity bit
0213      *   bits 6-0 - count
0214      * 0x46  IR brand
0215      *  0x47  IR data
0216      */
0217 
0218 /* em2874 registers */
0219 #define EM2874_R50_IR_CONFIG    0x50
0220 #define EM2874_R51_IR           0x51
0221 #define EM2874_R5D_TS1_PKT_SIZE 0x5d
0222 #define EM2874_R5E_TS2_PKT_SIZE 0x5e
0223     /*
0224      * For both TS1 and TS2, In isochronous mode:
0225      *  0x01  188 bytes
0226      *  0x02  376 bytes
0227      *  0x03  564 bytes
0228      *  0x04  752 bytes
0229      *  0x05  940 bytes
0230      * In bulk mode:
0231      *  0x01..0xff  total packet count in 188-byte
0232      */
0233 
0234 #define EM2874_R5F_TS_ENABLE    0x5f
0235 
0236 /* em2874/174/84, em25xx, em276x/7x/8x GPIO registers */
0237 /*
0238  * NOTE: not all ports are bonded out;
0239  * Some ports are multiplexed with special function I/O
0240  */
0241 #define EM2874_R80_GPIO_P0_CTRL    0x80
0242 #define EM2874_R81_GPIO_P1_CTRL    0x81
0243 #define EM2874_R82_GPIO_P2_CTRL    0x82
0244 #define EM2874_R83_GPIO_P3_CTRL    0x83
0245 #define EM2874_R84_GPIO_P0_STATE   0x84
0246 #define EM2874_R85_GPIO_P1_STATE   0x85
0247 #define EM2874_R86_GPIO_P2_STATE   0x86
0248 #define EM2874_R87_GPIO_P3_STATE   0x87
0249 
0250 /* em2874 IR config register (0x50) */
0251 #define EM2874_IR_NEC           0x00
0252 #define EM2874_IR_NEC_NO_PARITY 0x01
0253 #define EM2874_IR_RC5           0x04
0254 #define EM2874_IR_RC6_MODE_0    0x08
0255 #define EM2874_IR_RC6_MODE_6A   0x0b
0256 
0257 /* em2874 Transport Stream Enable Register (0x5f) */
0258 #define EM2874_TS1_CAPTURE_ENABLE ((unsigned char)BIT(0))
0259 #define EM2874_TS1_FILTER_ENABLE  ((unsigned char)BIT(1))
0260 #define EM2874_TS1_NULL_DISCARD   ((unsigned char)BIT(2))
0261 #define EM2874_TS2_CAPTURE_ENABLE ((unsigned char)BIT(4))
0262 #define EM2874_TS2_FILTER_ENABLE  ((unsigned char)BIT(5))
0263 #define EM2874_TS2_NULL_DISCARD   ((unsigned char)BIT(6))
0264 
0265 /* register settings */
0266 #define EM2800_AUDIO_SRC_TUNER  0x0d
0267 #define EM2800_AUDIO_SRC_LINE   0x0c
0268 #define EM28XX_AUDIO_SRC_TUNER  0xc0
0269 #define EM28XX_AUDIO_SRC_LINE   0x80
0270 
0271 /* FIXME: Need to be populated with the other chip ID's */
0272 enum em28xx_chip_id {
0273     CHIP_ID_EM2800 = 7,
0274     CHIP_ID_EM2710 = 17,
0275     CHIP_ID_EM2820 = 18,    /* Also used by some em2710 */
0276     CHIP_ID_EM2840 = 20,
0277     CHIP_ID_EM2750 = 33,
0278     CHIP_ID_EM2860 = 34,
0279     CHIP_ID_EM2870 = 35,
0280     CHIP_ID_EM2883 = 36,
0281     CHIP_ID_EM2765 = 54,
0282     CHIP_ID_EM2874 = 65,
0283     CHIP_ID_EM2884 = 68,
0284     CHIP_ID_EM28174 = 113,
0285     CHIP_ID_EM28178 = 114,
0286 };
0287 
0288 /*
0289  * Registers used by em202
0290  */
0291 
0292 /* EMP202 vendor registers */
0293 #define EM202_EXT_MODEM_CTRL     0x3e
0294 #define EM202_GPIO_CONF          0x4c
0295 #define EM202_GPIO_POLARITY      0x4e
0296 #define EM202_GPIO_STICKY        0x50
0297 #define EM202_GPIO_MASK          0x52
0298 #define EM202_GPIO_STATUS        0x54
0299 #define EM202_SPDIF_OUT_SEL      0x6a
0300 #define EM202_ANTIPOP            0x72
0301 #define EM202_EAPD_GPIO_ACCESS   0x74