Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  *  PS3 AV backend support.
0004  *
0005  *  Copyright (C) 2007 Sony Computer Entertainment Inc.
0006  *  Copyright 2007 Sony Corp.
0007  */
0008 
0009 #ifndef _ASM_POWERPC_PS3AV_H_
0010 #define _ASM_POWERPC_PS3AV_H_
0011 
0012 /** command for ioctl() **/
0013 #define PS3AV_VERSION 0x205 /* version of ps3av command */
0014 
0015 #define PS3AV_CID_AV_INIT              0x00000001
0016 #define PS3AV_CID_AV_FIN               0x00000002
0017 #define PS3AV_CID_AV_GET_HW_CONF       0x00000003
0018 #define PS3AV_CID_AV_GET_MONITOR_INFO  0x00000004
0019 #define PS3AV_CID_AV_ENABLE_EVENT      0x00000006
0020 #define PS3AV_CID_AV_DISABLE_EVENT     0x00000007
0021 #define PS3AV_CID_AV_TV_MUTE           0x0000000a
0022 
0023 #define PS3AV_CID_AV_VIDEO_CS          0x00010001
0024 #define PS3AV_CID_AV_VIDEO_MUTE        0x00010002
0025 #define PS3AV_CID_AV_VIDEO_DISABLE_SIG 0x00010003
0026 #define PS3AV_CID_AV_AUDIO_PARAM       0x00020001
0027 #define PS3AV_CID_AV_AUDIO_MUTE        0x00020002
0028 #define PS3AV_CID_AV_HDMI_MODE         0x00040001
0029 
0030 #define PS3AV_CID_VIDEO_INIT           0x01000001
0031 #define PS3AV_CID_VIDEO_MODE           0x01000002
0032 #define PS3AV_CID_VIDEO_FORMAT         0x01000004
0033 #define PS3AV_CID_VIDEO_PITCH          0x01000005
0034 
0035 #define PS3AV_CID_AUDIO_INIT           0x02000001
0036 #define PS3AV_CID_AUDIO_MODE           0x02000002
0037 #define PS3AV_CID_AUDIO_MUTE           0x02000003
0038 #define PS3AV_CID_AUDIO_ACTIVE         0x02000004
0039 #define PS3AV_CID_AUDIO_INACTIVE       0x02000005
0040 #define PS3AV_CID_AUDIO_SPDIF_BIT      0x02000006
0041 #define PS3AV_CID_AUDIO_CTRL           0x02000007
0042 
0043 #define PS3AV_CID_EVENT_UNPLUGGED      0x10000001
0044 #define PS3AV_CID_EVENT_PLUGGED        0x10000002
0045 #define PS3AV_CID_EVENT_HDCP_DONE      0x10000003
0046 #define PS3AV_CID_EVENT_HDCP_FAIL      0x10000004
0047 #define PS3AV_CID_EVENT_HDCP_AUTH      0x10000005
0048 #define PS3AV_CID_EVENT_HDCP_ERROR     0x10000006
0049 
0050 #define PS3AV_CID_AVB_PARAM            0x04000001
0051 
0052 /* max backend ports */
0053 #define PS3AV_HDMI_MAX                 2    /* HDMI_0 HDMI_1 */
0054 #define PS3AV_AVMULTI_MAX              1    /* AVMULTI_0 */
0055 #define PS3AV_AV_PORT_MAX              (PS3AV_HDMI_MAX + PS3AV_AVMULTI_MAX)
0056 #define PS3AV_OPT_PORT_MAX             1    /* SPDIF0 */
0057 #define PS3AV_HEAD_MAX                 2    /* HEAD_A HEAD_B */
0058 
0059 /* num of pkt for PS3AV_CID_AVB_PARAM */
0060 #define PS3AV_AVB_NUM_VIDEO            PS3AV_HEAD_MAX
0061 #define PS3AV_AVB_NUM_AUDIO            0    /* not supported */
0062 #define PS3AV_AVB_NUM_AV_VIDEO         PS3AV_AV_PORT_MAX
0063 #define PS3AV_AVB_NUM_AV_AUDIO         PS3AV_HDMI_MAX
0064 
0065 #define PS3AV_MUTE_PORT_MAX            1    /* num of ports in mute pkt */
0066 
0067 /* event_bit */
0068 #define PS3AV_CMD_EVENT_BIT_UNPLUGGED           (1 << 0)
0069 #define PS3AV_CMD_EVENT_BIT_PLUGGED         (1 << 1)
0070 #define PS3AV_CMD_EVENT_BIT_HDCP_DONE           (1 << 2)
0071 #define PS3AV_CMD_EVENT_BIT_HDCP_FAIL           (1 << 3)
0072 #define PS3AV_CMD_EVENT_BIT_HDCP_REAUTH         (1 << 4)
0073 #define PS3AV_CMD_EVENT_BIT_HDCP_TOPOLOGY       (1 << 5)
0074 
0075 /* common params */
0076 /* mute */
0077 #define PS3AV_CMD_MUTE_OFF              0x0000
0078 #define PS3AV_CMD_MUTE_ON               0x0001
0079 /* avport */
0080 #define PS3AV_CMD_AVPORT_HDMI_0             0x0000
0081 #define PS3AV_CMD_AVPORT_HDMI_1             0x0001
0082 #define PS3AV_CMD_AVPORT_AVMULTI_0          0x0010
0083 #define PS3AV_CMD_AVPORT_SPDIF_0            0x0020
0084 #define PS3AV_CMD_AVPORT_SPDIF_1            0x0021
0085 
0086 /* for av backend */
0087 /* av_mclk */
0088 #define PS3AV_CMD_AV_MCLK_128               0x0000
0089 #define PS3AV_CMD_AV_MCLK_256               0x0001
0090 #define PS3AV_CMD_AV_MCLK_512               0x0003
0091 /* av_inputlen */
0092 #define PS3AV_CMD_AV_INPUTLEN_16            0x02
0093 #define PS3AV_CMD_AV_INPUTLEN_20            0x0a
0094 #define PS3AV_CMD_AV_INPUTLEN_24            0x0b
0095 /* av_layout */
0096 #define PS3AV_CMD_AV_LAYOUT_32              (1 << 0)
0097 #define PS3AV_CMD_AV_LAYOUT_44              (1 << 1)
0098 #define PS3AV_CMD_AV_LAYOUT_48              (1 << 2)
0099 #define PS3AV_CMD_AV_LAYOUT_88              (1 << 3)
0100 #define PS3AV_CMD_AV_LAYOUT_96              (1 << 4)
0101 #define PS3AV_CMD_AV_LAYOUT_176             (1 << 5)
0102 #define PS3AV_CMD_AV_LAYOUT_192             (1 << 6)
0103 /* hdmi_mode */
0104 #define PS3AV_CMD_AV_HDMI_MODE_NORMAL           0xff
0105 #define PS3AV_CMD_AV_HDMI_HDCP_OFF          0x01
0106 #define PS3AV_CMD_AV_HDMI_EDID_PASS         0x80
0107 #define PS3AV_CMD_AV_HDMI_DVI               0x40
0108 
0109 /* for video module */
0110 /* video_head */
0111 #define PS3AV_CMD_VIDEO_HEAD_A              0x0000
0112 #define PS3AV_CMD_VIDEO_HEAD_B              0x0001
0113 /* video_cs_out video_cs_in */
0114 #define PS3AV_CMD_VIDEO_CS_NONE             0x0000
0115 #define PS3AV_CMD_VIDEO_CS_RGB_8            0x0001
0116 #define PS3AV_CMD_VIDEO_CS_YUV444_8         0x0002
0117 #define PS3AV_CMD_VIDEO_CS_YUV422_8         0x0003
0118 #define PS3AV_CMD_VIDEO_CS_XVYCC_8          0x0004
0119 #define PS3AV_CMD_VIDEO_CS_RGB_10           0x0005
0120 #define PS3AV_CMD_VIDEO_CS_YUV444_10            0x0006
0121 #define PS3AV_CMD_VIDEO_CS_YUV422_10            0x0007
0122 #define PS3AV_CMD_VIDEO_CS_XVYCC_10         0x0008
0123 #define PS3AV_CMD_VIDEO_CS_RGB_12           0x0009
0124 #define PS3AV_CMD_VIDEO_CS_YUV444_12            0x000a
0125 #define PS3AV_CMD_VIDEO_CS_YUV422_12            0x000b
0126 #define PS3AV_CMD_VIDEO_CS_XVYCC_12         0x000c
0127 /* video_vid */
0128 #define PS3AV_CMD_VIDEO_VID_NONE            0x0000
0129 #define PS3AV_CMD_VIDEO_VID_480I            0x0001
0130 #define PS3AV_CMD_VIDEO_VID_576I            0x0003
0131 #define PS3AV_CMD_VIDEO_VID_480P            0x0005
0132 #define PS3AV_CMD_VIDEO_VID_576P            0x0006
0133 #define PS3AV_CMD_VIDEO_VID_1080I_60HZ          0x0007
0134 #define PS3AV_CMD_VIDEO_VID_1080I_50HZ          0x0008
0135 #define PS3AV_CMD_VIDEO_VID_720P_60HZ           0x0009
0136 #define PS3AV_CMD_VIDEO_VID_720P_50HZ           0x000a
0137 #define PS3AV_CMD_VIDEO_VID_1080P_60HZ          0x000b
0138 #define PS3AV_CMD_VIDEO_VID_1080P_50HZ          0x000c
0139 #define PS3AV_CMD_VIDEO_VID_WXGA            0x000d
0140 #define PS3AV_CMD_VIDEO_VID_SXGA            0x000e
0141 #define PS3AV_CMD_VIDEO_VID_WUXGA           0x000f
0142 #define PS3AV_CMD_VIDEO_VID_480I_A          0x0010
0143 /* video_format */
0144 #define PS3AV_CMD_VIDEO_FORMAT_BLACK            0x0000
0145 #define PS3AV_CMD_VIDEO_FORMAT_ARGB_8BIT        0x0007
0146 /* video_order */
0147 #define PS3AV_CMD_VIDEO_ORDER_RGB           0x0000
0148 #define PS3AV_CMD_VIDEO_ORDER_BGR           0x0001
0149 /* video_fmt */
0150 #define PS3AV_CMD_VIDEO_FMT_X8R8G8B8            0x0000
0151 /* video_out_format */
0152 #define PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT        0x0000
0153 /* video_cl_cnv */
0154 #define PS3AV_CMD_VIDEO_CL_CNV_ENABLE_LUT       0x0000
0155 #define PS3AV_CMD_VIDEO_CL_CNV_DISABLE_LUT      0x0010
0156 /* video_sync */
0157 #define PS3AV_CMD_VIDEO_SYNC_VSYNC          0x0001
0158 #define PS3AV_CMD_VIDEO_SYNC_CSYNC          0x0004
0159 #define PS3AV_CMD_VIDEO_SYNC_HSYNC          0x0010
0160 
0161 /* for audio module */
0162 /* num_of_ch */
0163 #define PS3AV_CMD_AUDIO_NUM_OF_CH_2         0x0000
0164 #define PS3AV_CMD_AUDIO_NUM_OF_CH_3         0x0001
0165 #define PS3AV_CMD_AUDIO_NUM_OF_CH_4         0x0002
0166 #define PS3AV_CMD_AUDIO_NUM_OF_CH_5         0x0003
0167 #define PS3AV_CMD_AUDIO_NUM_OF_CH_6         0x0004
0168 #define PS3AV_CMD_AUDIO_NUM_OF_CH_7         0x0005
0169 #define PS3AV_CMD_AUDIO_NUM_OF_CH_8         0x0006
0170 /* audio_fs */
0171 #define PS3AV_CMD_AUDIO_FS_32K              0x0001
0172 #define PS3AV_CMD_AUDIO_FS_44K              0x0002
0173 #define PS3AV_CMD_AUDIO_FS_48K              0x0003
0174 #define PS3AV_CMD_AUDIO_FS_88K              0x0004
0175 #define PS3AV_CMD_AUDIO_FS_96K              0x0005
0176 #define PS3AV_CMD_AUDIO_FS_176K             0x0006
0177 #define PS3AV_CMD_AUDIO_FS_192K             0x0007
0178 /* audio_word_bits */
0179 #define PS3AV_CMD_AUDIO_WORD_BITS_16            0x0001
0180 #define PS3AV_CMD_AUDIO_WORD_BITS_20            0x0002
0181 #define PS3AV_CMD_AUDIO_WORD_BITS_24            0x0003
0182 /* audio_format */
0183 #define PS3AV_CMD_AUDIO_FORMAT_PCM          0x0001
0184 #define PS3AV_CMD_AUDIO_FORMAT_BITSTREAM        0x00ff
0185 /* audio_source */
0186 #define PS3AV_CMD_AUDIO_SOURCE_SERIAL           0x0000
0187 #define PS3AV_CMD_AUDIO_SOURCE_SPDIF            0x0001
0188 /* audio_swap */
0189 #define PS3AV_CMD_AUDIO_SWAP_0              0x0000
0190 #define PS3AV_CMD_AUDIO_SWAP_1              0x0000
0191 /* audio_map */
0192 #define PS3AV_CMD_AUDIO_MAP_OUTPUT_0            0x0000
0193 #define PS3AV_CMD_AUDIO_MAP_OUTPUT_1            0x0001
0194 #define PS3AV_CMD_AUDIO_MAP_OUTPUT_2            0x0002
0195 #define PS3AV_CMD_AUDIO_MAP_OUTPUT_3            0x0003
0196 /* audio_layout */
0197 #define PS3AV_CMD_AUDIO_LAYOUT_2CH          0x0000
0198 #define PS3AV_CMD_AUDIO_LAYOUT_6CH          0x000b  /* LREClr */
0199 #define PS3AV_CMD_AUDIO_LAYOUT_8CH          0x001f  /* LREClrXY */
0200 /* audio_downmix */
0201 #define PS3AV_CMD_AUDIO_DOWNMIX_PERMITTED       0x0000
0202 #define PS3AV_CMD_AUDIO_DOWNMIX_PROHIBITED      0x0001
0203 
0204 /* audio_port */
0205 #define PS3AV_CMD_AUDIO_PORT_HDMI_0         ( 1 << 0 )
0206 #define PS3AV_CMD_AUDIO_PORT_HDMI_1         ( 1 << 1 )
0207 #define PS3AV_CMD_AUDIO_PORT_AVMULTI_0          ( 1 << 10 )
0208 #define PS3AV_CMD_AUDIO_PORT_SPDIF_0            ( 1 << 20 )
0209 #define PS3AV_CMD_AUDIO_PORT_SPDIF_1            ( 1 << 21 )
0210 
0211 /* audio_ctrl_id */
0212 #define PS3AV_CMD_AUDIO_CTRL_ID_DAC_RESET       0x0000
0213 #define PS3AV_CMD_AUDIO_CTRL_ID_DAC_DE_EMPHASIS     0x0001
0214 #define PS3AV_CMD_AUDIO_CTRL_ID_AVCLK           0x0002
0215 /* audio_ctrl_data[0] reset */
0216 #define PS3AV_CMD_AUDIO_CTRL_RESET_NEGATE       0x0000
0217 #define PS3AV_CMD_AUDIO_CTRL_RESET_ASSERT       0x0001
0218 /* audio_ctrl_data[0] de-emphasis */
0219 #define PS3AV_CMD_AUDIO_CTRL_DE_EMPHASIS_OFF        0x0000
0220 #define PS3AV_CMD_AUDIO_CTRL_DE_EMPHASIS_ON     0x0001
0221 /* audio_ctrl_data[0] avclk */
0222 #define PS3AV_CMD_AUDIO_CTRL_AVCLK_22           0x0000
0223 #define PS3AV_CMD_AUDIO_CTRL_AVCLK_18           0x0001
0224 
0225 /* av_vid */
0226 /* do not use these params directly, use vid_video2av */
0227 #define PS3AV_CMD_AV_VID_480I               0x0000
0228 #define PS3AV_CMD_AV_VID_480P               0x0001
0229 #define PS3AV_CMD_AV_VID_720P_60HZ          0x0002
0230 #define PS3AV_CMD_AV_VID_1080I_60HZ         0x0003
0231 #define PS3AV_CMD_AV_VID_1080P_60HZ         0x0004
0232 #define PS3AV_CMD_AV_VID_576I               0x0005
0233 #define PS3AV_CMD_AV_VID_576P               0x0006
0234 #define PS3AV_CMD_AV_VID_720P_50HZ          0x0007
0235 #define PS3AV_CMD_AV_VID_1080I_50HZ         0x0008
0236 #define PS3AV_CMD_AV_VID_1080P_50HZ         0x0009
0237 #define PS3AV_CMD_AV_VID_WXGA               0x000a
0238 #define PS3AV_CMD_AV_VID_SXGA               0x000b
0239 #define PS3AV_CMD_AV_VID_WUXGA              0x000c
0240 /* av_cs_out av_cs_in */
0241 /* use cs_video2av() */
0242 #define PS3AV_CMD_AV_CS_RGB_8               0x0000
0243 #define PS3AV_CMD_AV_CS_YUV444_8            0x0001
0244 #define PS3AV_CMD_AV_CS_YUV422_8            0x0002
0245 #define PS3AV_CMD_AV_CS_XVYCC_8             0x0003
0246 #define PS3AV_CMD_AV_CS_RGB_10              0x0004
0247 #define PS3AV_CMD_AV_CS_YUV444_10           0x0005
0248 #define PS3AV_CMD_AV_CS_YUV422_10           0x0006
0249 #define PS3AV_CMD_AV_CS_XVYCC_10            0x0007
0250 #define PS3AV_CMD_AV_CS_RGB_12              0x0008
0251 #define PS3AV_CMD_AV_CS_YUV444_12           0x0009
0252 #define PS3AV_CMD_AV_CS_YUV422_12           0x000a
0253 #define PS3AV_CMD_AV_CS_XVYCC_12            0x000b
0254 #define PS3AV_CMD_AV_CS_8               0x0000
0255 #define PS3AV_CMD_AV_CS_10              0x0001
0256 #define PS3AV_CMD_AV_CS_12              0x0002
0257 /* dither */
0258 #define PS3AV_CMD_AV_DITHER_OFF             0x0000
0259 #define PS3AV_CMD_AV_DITHER_ON              0x0001
0260 #define PS3AV_CMD_AV_DITHER_8BIT            0x0000
0261 #define PS3AV_CMD_AV_DITHER_10BIT           0x0002
0262 #define PS3AV_CMD_AV_DITHER_12BIT           0x0004
0263 /* super_white */
0264 #define PS3AV_CMD_AV_SUPER_WHITE_OFF            0x0000
0265 #define PS3AV_CMD_AV_SUPER_WHITE_ON         0x0001
0266 /* aspect */
0267 #define PS3AV_CMD_AV_ASPECT_16_9            0x0000
0268 #define PS3AV_CMD_AV_ASPECT_4_3             0x0001
0269 /* video_cs_cnv() */
0270 #define PS3AV_CMD_VIDEO_CS_RGB              0x0001
0271 #define PS3AV_CMD_VIDEO_CS_YUV422           0x0002
0272 #define PS3AV_CMD_VIDEO_CS_YUV444           0x0003
0273 
0274 /* for broadcast automode */
0275 #define PS3AV_RESBIT_720x480P           0x0003  /* 0x0001 | 0x0002 */
0276 #define PS3AV_RESBIT_720x576P           0x0003  /* 0x0001 | 0x0002 */
0277 #define PS3AV_RESBIT_1280x720P          0x0004
0278 #define PS3AV_RESBIT_1920x1080I         0x0008
0279 #define PS3AV_RESBIT_1920x1080P         0x4000
0280 #define PS3AV_RES_MASK_60           (PS3AV_RESBIT_720x480P \
0281                         | PS3AV_RESBIT_1280x720P \
0282                         | PS3AV_RESBIT_1920x1080I \
0283                         | PS3AV_RESBIT_1920x1080P)
0284 #define PS3AV_RES_MASK_50           (PS3AV_RESBIT_720x576P \
0285                         | PS3AV_RESBIT_1280x720P \
0286                         | PS3AV_RESBIT_1920x1080I \
0287                         | PS3AV_RESBIT_1920x1080P)
0288 
0289 /* for VESA automode */
0290 #define PS3AV_RESBIT_VGA            0x0001
0291 #define PS3AV_RESBIT_WXGA           0x0002
0292 #define PS3AV_RESBIT_SXGA           0x0004
0293 #define PS3AV_RESBIT_WUXGA          0x0008
0294 #define PS3AV_RES_MASK_VESA         (PS3AV_RESBIT_WXGA |\
0295                          PS3AV_RESBIT_SXGA |\
0296                          PS3AV_RESBIT_WUXGA)
0297 
0298 #define PS3AV_MONITOR_TYPE_HDMI         1   /* HDMI */
0299 #define PS3AV_MONITOR_TYPE_DVI          2   /* DVI */
0300 
0301 
0302 /* for video mode */
0303 enum ps3av_mode_num {
0304     PS3AV_MODE_AUTO             = 0,
0305     PS3AV_MODE_480I             = 1,
0306     PS3AV_MODE_480P             = 2,
0307     PS3AV_MODE_720P60           = 3,
0308     PS3AV_MODE_1080I60          = 4,
0309     PS3AV_MODE_1080P60          = 5,
0310     PS3AV_MODE_576I             = 6,
0311     PS3AV_MODE_576P             = 7,
0312     PS3AV_MODE_720P50           = 8,
0313     PS3AV_MODE_1080I50          = 9,
0314     PS3AV_MODE_1080P50          = 10,
0315     PS3AV_MODE_WXGA             = 11,
0316     PS3AV_MODE_SXGA             = 12,
0317     PS3AV_MODE_WUXGA            = 13,
0318 };
0319 
0320 #define PS3AV_MODE_MASK             0x000F
0321 #define PS3AV_MODE_HDCP_OFF         0x1000  /* Retail PS3 product doesn't support this */
0322 #define PS3AV_MODE_DITHER           0x0800
0323 #define PS3AV_MODE_COLOR            0x0400
0324 #define PS3AV_MODE_WHITE            0x0200
0325 #define PS3AV_MODE_FULL             0x0080
0326 #define PS3AV_MODE_DVI              0x0040
0327 #define PS3AV_MODE_RGB              0x0020
0328 
0329 
0330 #define PS3AV_DEFAULT_HDMI_MODE_ID_REG_60   PS3AV_MODE_480P
0331 #define PS3AV_DEFAULT_AVMULTI_MODE_ID_REG_60    PS3AV_MODE_480I
0332 #define PS3AV_DEFAULT_HDMI_MODE_ID_REG_50   PS3AV_MODE_576P
0333 #define PS3AV_DEFAULT_AVMULTI_MODE_ID_REG_50    PS3AV_MODE_576I
0334 
0335 #define PS3AV_REGION_60             0x01
0336 #define PS3AV_REGION_50             0x02
0337 #define PS3AV_REGION_RGB            0x10
0338 
0339 #define get_status(buf)             (((__u32 *)buf)[2])
0340 #define PS3AV_HDR_SIZE              4   /* version + size */
0341 
0342 
0343 /** command packet structure **/
0344 struct ps3av_send_hdr {
0345     u16 version;
0346     u16 size;       /* size of command packet */
0347     u32 cid;        /* command id */
0348 };
0349 
0350 struct ps3av_reply_hdr {
0351     u16 version;
0352     u16 size;
0353     u32 cid;
0354     u32 status;
0355 };
0356 
0357 /* backend: initialization */
0358 struct ps3av_pkt_av_init {
0359     struct ps3av_send_hdr send_hdr;
0360     u32 event_bit;
0361 };
0362 
0363 /* backend: finalize */
0364 struct ps3av_pkt_av_fin {
0365     struct ps3av_send_hdr send_hdr;
0366     /* recv */
0367     u32 reserved;
0368 };
0369 
0370 /* backend: get port */
0371 struct ps3av_pkt_av_get_hw_conf {
0372     struct ps3av_send_hdr send_hdr;
0373     /* recv */
0374     u32 status;
0375     u16 num_of_hdmi;    /* out: number of hdmi */
0376     u16 num_of_avmulti; /* out: number of avmulti */
0377     u16 num_of_spdif;   /* out: number of hdmi */
0378     u16 reserved;
0379 };
0380 
0381 /* backend: get monitor info */
0382 struct ps3av_info_resolution {
0383     u32 res_bits;
0384     u32 native;
0385 };
0386 
0387 struct ps3av_info_cs {
0388     u8 rgb;
0389     u8 yuv444;
0390     u8 yuv422;
0391     u8 reserved;
0392 };
0393 
0394 struct ps3av_info_color {
0395     u16 red_x;
0396     u16 red_y;
0397     u16 green_x;
0398     u16 green_y;
0399     u16 blue_x;
0400     u16 blue_y;
0401     u16 white_x;
0402     u16 white_y;
0403     u32 gamma;
0404 };
0405 
0406 struct ps3av_info_audio {
0407     u8 type;
0408     u8 max_num_of_ch;
0409     u8 fs;
0410     u8 sbit;
0411 };
0412 
0413 struct ps3av_info_monitor {
0414     u8 avport;
0415     u8 monitor_id[10];
0416     u8 monitor_type;
0417     u8 monitor_name[16];
0418     struct ps3av_info_resolution res_60;
0419     struct ps3av_info_resolution res_50;
0420     struct ps3av_info_resolution res_other;
0421     struct ps3av_info_resolution res_vesa;
0422     struct ps3av_info_cs cs;
0423     struct ps3av_info_color color;
0424     u8 supported_ai;
0425     u8 speaker_info;
0426     u8 num_of_audio_block;
0427     struct ps3av_info_audio audio[0];   /* 0 or more audio blocks */
0428     u8 reserved[169];
0429 } __attribute__ ((packed));
0430 
0431 struct ps3av_pkt_av_get_monitor_info {
0432     struct ps3av_send_hdr send_hdr;
0433     u16 avport;     /* in: avport */
0434     u16 reserved;
0435     /* recv */
0436     struct ps3av_info_monitor info; /* out: monitor info */
0437 };
0438 
0439 /* backend: enable/disable event */
0440 struct ps3av_pkt_av_event {
0441     struct ps3av_send_hdr send_hdr;
0442     u32 event_bit;      /* in */
0443 };
0444 
0445 /* backend: video cs param */
0446 struct ps3av_pkt_av_video_cs {
0447     struct ps3av_send_hdr send_hdr;
0448     u16 avport;     /* in: avport */
0449     u16 av_vid;     /* in: video resolution */
0450     u16 av_cs_out;      /* in: output color space */
0451     u16 av_cs_in;       /* in: input color space */
0452     u8 dither;      /* in: dither bit length */
0453     u8 bitlen_out;      /* in: bit length */
0454     u8 super_white;     /* in: super white */
0455     u8 aspect;      /* in: aspect ratio */
0456 };
0457 
0458 /* backend: video mute */
0459 struct ps3av_av_mute {
0460     u16 avport;     /* in: avport */
0461     u16 mute;       /* in: mute on/off */
0462 };
0463 
0464 struct ps3av_pkt_av_video_mute {
0465     struct ps3av_send_hdr send_hdr;
0466     struct ps3av_av_mute mute[PS3AV_MUTE_PORT_MAX];
0467 };
0468 
0469 /* backend: video disable signal */
0470 struct ps3av_pkt_av_video_disable_sig {
0471     struct ps3av_send_hdr send_hdr;
0472     u16 avport;     /* in: avport */
0473     u16 reserved;
0474 };
0475 
0476 /* backend: audio param */
0477 struct ps3av_audio_info_frame {
0478     struct pb1_bit {
0479         u8 ct:4;
0480         u8 rsv:1;
0481         u8 cc:3;
0482     } pb1;
0483     struct pb2_bit {
0484         u8 rsv:3;
0485         u8 sf:3;
0486         u8 ss:2;
0487     } pb2;
0488     u8 pb3;
0489     u8 pb4;
0490     struct pb5_bit {
0491         u8 dm:1;
0492         u8 lsv:4;
0493         u8 rsv:3;
0494     } pb5;
0495 };
0496 
0497 struct ps3av_pkt_av_audio_param {
0498     struct ps3av_send_hdr send_hdr;
0499     u16 avport;     /* in: avport */
0500     u16 reserved;
0501     u8 mclk;        /* in: audio mclk */
0502     u8 ns[3];       /* in: audio ns val */
0503     u8 enable;      /* in: audio enable */
0504     u8 swaplr;      /* in: audio swap */
0505     u8 fifomap;     /* in: audio fifomap */
0506     u8 inputctrl;       /* in: audio input ctrl */
0507     u8 inputlen;        /* in: sample bit size */
0508     u8 layout;      /* in: speaker layout param */
0509     struct ps3av_audio_info_frame info; /* in: info */
0510     u8 chstat[5];       /* in: ch stat */
0511 };
0512 
0513 /* backend: audio_mute */
0514 struct ps3av_pkt_av_audio_mute {
0515     struct ps3av_send_hdr send_hdr;
0516     struct ps3av_av_mute mute[PS3AV_MUTE_PORT_MAX];
0517 };
0518 
0519 /* backend: hdmi_mode */
0520 struct ps3av_pkt_av_hdmi_mode {
0521     struct ps3av_send_hdr send_hdr;
0522     u8 mode;        /* in: hdmi_mode */
0523     u8 reserved0;
0524     u8 reserved1;
0525     u8 reserved2;
0526 };
0527 
0528 /* backend: tv_mute */
0529 struct ps3av_pkt_av_tv_mute {
0530     struct ps3av_send_hdr send_hdr;
0531     u16 avport;     /* in: avport HDMI only */
0532     u16 mute;       /* in: mute */
0533 };
0534 
0535 /* video: initialize */
0536 struct ps3av_pkt_video_init {
0537     struct ps3av_send_hdr send_hdr;
0538     /* recv */
0539     u32 reserved;
0540 };
0541 
0542 /* video: mode setting */
0543 struct ps3av_pkt_video_mode {
0544     struct ps3av_send_hdr send_hdr;
0545     u32 video_head;     /* in: head */
0546     u32 reserved;
0547     u32 video_vid;      /* in: video resolution */
0548     u16 reserved1;
0549     u16 width;      /* in: width in pixel */
0550     u16 reserved2;
0551     u16 height;     /* in: height in pixel */
0552     u32 pitch;      /* in: line size in byte */
0553     u32 video_out_format;   /* in: out format */
0554     u32 video_format;   /* in: input frame buffer format */
0555     u8 reserved3;
0556     u8 video_cl_cnv;    /* in: color conversion */
0557     u16 video_order;    /* in: input RGB order */
0558     u32 reserved4;
0559 };
0560 
0561 /* video: format */
0562 struct ps3av_pkt_video_format {
0563     struct ps3av_send_hdr send_hdr;
0564     u32 video_head;     /* in: head */
0565     u32 video_format;   /* in: frame buffer format */
0566     u8 reserved;
0567     u8 video_cl_cnv;    /* in: color conversion */
0568     u16 video_order;    /* in: input RGB order */
0569 };
0570 
0571 /* video: pitch */
0572 struct ps3av_pkt_video_pitch {
0573     u16 version;
0574     u16 size;       /* size of command packet */
0575     u32 cid;        /* command id */
0576     u32 video_head;     /* in: head */
0577     u32 pitch;      /* in: line size in byte */
0578 };
0579 
0580 /* audio: initialize */
0581 struct ps3av_pkt_audio_init {
0582     struct ps3av_send_hdr send_hdr;
0583     /* recv */
0584     u32 reserved;
0585 };
0586 
0587 /* audio: mode setting */
0588 struct ps3av_pkt_audio_mode {
0589     struct ps3av_send_hdr send_hdr;
0590     u8 avport;      /* in: avport */
0591     u8 reserved0[3];
0592     u32 mask;       /* in: mask */
0593     u32 audio_num_of_ch;    /* in: number of ch */
0594     u32 audio_fs;       /* in: sampling freq */
0595     u32 audio_word_bits;    /* in: sample bit size */
0596     u32 audio_format;   /* in: audio output format */
0597     u32 audio_source;   /* in: audio source */
0598     u8 audio_enable[4]; /* in: audio enable */
0599     u8 audio_swap[4];   /* in: audio swap */
0600     u8 audio_map[4];    /* in: audio map */
0601     u32 audio_layout;   /* in: speaker layout */
0602     u32 audio_downmix;  /* in: audio downmix permission */
0603     u32 audio_downmix_level;
0604     u8 audio_cs_info[8];    /* in: IEC channel status */
0605 };
0606 
0607 /* audio: mute */
0608 struct ps3av_audio_mute {
0609     u8 avport;      /* in: opt_port optical */
0610     u8 reserved[3];
0611     u32 mute;       /* in: mute */
0612 };
0613 
0614 struct ps3av_pkt_audio_mute {
0615     struct ps3av_send_hdr send_hdr;
0616     struct ps3av_audio_mute mute[PS3AV_OPT_PORT_MAX];
0617 };
0618 
0619 /* audio: active/inactive */
0620 struct ps3av_pkt_audio_active {
0621     struct ps3av_send_hdr send_hdr;
0622     u32 audio_port;     /* in: audio active/inactive port */
0623 };
0624 
0625 /* audio: SPDIF user bit */
0626 struct ps3av_pkt_audio_spdif_bit {
0627     u16 version;
0628     u16 size;       /* size of command packet */
0629     u32 cid;        /* command id */
0630     u8 avport;      /* in: avport SPDIF only */
0631     u8 reserved[3];
0632     u32 audio_port;     /* in: SPDIF only */
0633     u32 spdif_bit_data[12]; /* in: user bit data */
0634 };
0635 
0636 /* audio: audio control */
0637 struct ps3av_pkt_audio_ctrl {
0638     u16 version;
0639     u16 size;       /* size of command packet */
0640     u32 cid;        /* command id */
0641     u32 audio_ctrl_id;  /* in: control id */
0642     u32 audio_ctrl_data[4]; /* in: control data */
0643 };
0644 
0645 /* avb:param */
0646 #define PS3AV_PKT_AVB_PARAM_MAX_BUF_SIZE    \
0647     (PS3AV_AVB_NUM_VIDEO*sizeof(struct ps3av_pkt_video_mode) + \
0648      PS3AV_AVB_NUM_AUDIO*sizeof(struct ps3av_pkt_audio_mode) + \
0649      PS3AV_AVB_NUM_AV_VIDEO*sizeof(struct ps3av_pkt_av_video_cs) + \
0650      PS3AV_AVB_NUM_AV_AUDIO*sizeof(struct ps3av_pkt_av_audio_param))
0651 
0652 struct ps3av_pkt_avb_param {
0653     struct ps3av_send_hdr send_hdr;
0654     u16 num_of_video_pkt;
0655     u16 num_of_audio_pkt;
0656     u16 num_of_av_video_pkt;
0657     u16 num_of_av_audio_pkt;
0658     /*
0659      * The actual buffer layout depends on the fields above:
0660      *
0661      * struct ps3av_pkt_video_mode video[num_of_video_pkt];
0662      * struct ps3av_pkt_audio_mode audio[num_of_audio_pkt];
0663      * struct ps3av_pkt_av_video_cs av_video[num_of_av_video_pkt];
0664      * struct ps3av_pkt_av_audio_param av_audio[num_of_av_audio_pkt];
0665      */
0666     u8 buf[PS3AV_PKT_AVB_PARAM_MAX_BUF_SIZE];
0667 };
0668 
0669 /* channel status */
0670 extern u8 ps3av_mode_cs_info[];
0671 
0672 /** command status **/
0673 #define PS3AV_STATUS_SUCCESS            0x0000  /* success */
0674 #define PS3AV_STATUS_RECEIVE_VUART_ERROR    0x0001  /* receive vuart error */
0675 #define PS3AV_STATUS_SYSCON_COMMUNICATE_FAIL    0x0002  /* syscon communication error */
0676 #define PS3AV_STATUS_INVALID_COMMAND        0x0003  /* obsolete invalid CID */
0677 #define PS3AV_STATUS_INVALID_PORT       0x0004  /* invalid port number */
0678 #define PS3AV_STATUS_INVALID_VID        0x0005  /* invalid video format */
0679 #define PS3AV_STATUS_INVALID_COLOR_SPACE    0x0006  /* invalid video colose space */
0680 #define PS3AV_STATUS_INVALID_FS         0x0007  /* invalid audio sampling freq */
0681 #define PS3AV_STATUS_INVALID_AUDIO_CH       0x0008  /* invalid audio channel number */
0682 #define PS3AV_STATUS_UNSUPPORTED_VERSION    0x0009  /* version mismatch  */
0683 #define PS3AV_STATUS_INVALID_SAMPLE_SIZE    0x000a  /* invalid audio sample bit size */
0684 #define PS3AV_STATUS_FAILURE            0x000b  /* other failures */
0685 #define PS3AV_STATUS_UNSUPPORTED_COMMAND    0x000c  /* unsupported cid */
0686 #define PS3AV_STATUS_BUFFER_OVERFLOW        0x000d  /* write buffer overflow */
0687 #define PS3AV_STATUS_INVALID_VIDEO_PARAM    0x000e  /* invalid video param */
0688 #define PS3AV_STATUS_NO_SEL         0x000f  /* not exist selector */
0689 #define PS3AV_STATUS_INVALID_AV_PARAM       0x0010  /* invalid backend param */
0690 #define PS3AV_STATUS_INVALID_AUDIO_PARAM    0x0011  /* invalid audio param */
0691 #define PS3AV_STATUS_UNSUPPORTED_HDMI_MODE  0x0012  /* unsupported hdmi mode */
0692 #define PS3AV_STATUS_NO_SYNC_HEAD       0x0013  /* sync head failed */
0693 
0694 extern void ps3av_set_hdr(u32, u16, struct ps3av_send_hdr *);
0695 extern int ps3av_do_pkt(u32, u16, size_t, struct ps3av_send_hdr *);
0696 
0697 extern int ps3av_cmd_init(void);
0698 extern int ps3av_cmd_fin(void);
0699 extern int ps3av_cmd_av_video_mute(int, u32 *, u32);
0700 extern int ps3av_cmd_av_video_disable_sig(u32);
0701 extern int ps3av_cmd_av_tv_mute(u32, u32);
0702 extern int ps3av_cmd_enable_event(void);
0703 extern int ps3av_cmd_av_hdmi_mode(u8);
0704 extern u32 ps3av_cmd_set_av_video_cs(void *, u32, int, int, int, u32);
0705 extern u32 ps3av_cmd_set_video_mode(void *, u32, int, int, u32);
0706 extern int ps3av_cmd_video_format_black(u32, u32, u32);
0707 extern int ps3av_cmd_av_audio_mute(int, u32 *, u32);
0708 extern u32 ps3av_cmd_set_av_audio_param(void *, u32,
0709                     const struct ps3av_pkt_audio_mode *,
0710                     u32);
0711 extern void ps3av_cmd_set_audio_mode(struct ps3av_pkt_audio_mode *, u32, u32,
0712                      u32, u32, u32, u32);
0713 extern int ps3av_cmd_audio_mode(struct ps3av_pkt_audio_mode *);
0714 extern int ps3av_cmd_audio_mute(int, u32 *, u32);
0715 extern int ps3av_cmd_audio_active(int, u32);
0716 extern int ps3av_cmd_avb_param(struct ps3av_pkt_avb_param *, u32);
0717 extern int ps3av_cmd_av_get_hw_conf(struct ps3av_pkt_av_get_hw_conf *);
0718 extern int ps3av_cmd_video_get_monitor_info(struct ps3av_pkt_av_get_monitor_info *,
0719                         u32);
0720 
0721 extern int ps3av_set_video_mode(int);
0722 extern int ps3av_set_audio_mode(u32, u32, u32, u32, u32);
0723 extern int ps3av_get_auto_mode(void);
0724 extern int ps3av_get_mode(void);
0725 extern int ps3av_video_mode2res(u32, u32 *, u32 *);
0726 extern int ps3av_video_mute(int);
0727 extern int ps3av_audio_mute(int);
0728 extern int ps3av_audio_mute_analog(int);
0729 extern int ps3av_dev_open(void);
0730 extern int ps3av_dev_close(void);
0731 #endif  /* _ASM_POWERPC_PS3AV_H_ */