linux/arch/powerpc/include/asm/ps3av.h
<<
>>
Prefs
   1/*
   2 *  PS3 AV backend support.
   3 *
   4 *  Copyright (C) 2007 Sony Computer Entertainment Inc.
   5 *  Copyright 2007 Sony Corp.
   6 *
   7 *  This program is free software; you can redistribute it and/or modify
   8 *  it under the terms of the GNU General Public License as published by
   9 *  the Free Software Foundation; version 2 of the License.
  10 *
  11 *  This program is distributed in the hope that it will be useful,
  12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 *  GNU General Public License for more details.
  15 *
  16 *  You should have received a copy of the GNU General Public License
  17 *  along with this program; if not, write to the Free Software
  18 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19 */
  20
  21#ifndef _ASM_POWERPC_PS3AV_H_
  22#define _ASM_POWERPC_PS3AV_H_
  23
  24/** command for ioctl() **/
  25#define PS3AV_VERSION 0x205     /* version of ps3av command */
  26
  27#define PS3AV_CID_AV_INIT              0x00000001
  28#define PS3AV_CID_AV_FIN               0x00000002
  29#define PS3AV_CID_AV_GET_HW_CONF       0x00000003
  30#define PS3AV_CID_AV_GET_MONITOR_INFO  0x00000004
  31#define PS3AV_CID_AV_ENABLE_EVENT      0x00000006
  32#define PS3AV_CID_AV_DISABLE_EVENT     0x00000007
  33#define PS3AV_CID_AV_TV_MUTE           0x0000000a
  34
  35#define PS3AV_CID_AV_VIDEO_CS          0x00010001
  36#define PS3AV_CID_AV_VIDEO_MUTE        0x00010002
  37#define PS3AV_CID_AV_VIDEO_DISABLE_SIG 0x00010003
  38#define PS3AV_CID_AV_AUDIO_PARAM       0x00020001
  39#define PS3AV_CID_AV_AUDIO_MUTE        0x00020002
  40#define PS3AV_CID_AV_HDMI_MODE         0x00040001
  41
  42#define PS3AV_CID_VIDEO_INIT           0x01000001
  43#define PS3AV_CID_VIDEO_MODE           0x01000002
  44#define PS3AV_CID_VIDEO_FORMAT         0x01000004
  45#define PS3AV_CID_VIDEO_PITCH          0x01000005
  46
  47#define PS3AV_CID_AUDIO_INIT           0x02000001
  48#define PS3AV_CID_AUDIO_MODE           0x02000002
  49#define PS3AV_CID_AUDIO_MUTE           0x02000003
  50#define PS3AV_CID_AUDIO_ACTIVE         0x02000004
  51#define PS3AV_CID_AUDIO_INACTIVE       0x02000005
  52#define PS3AV_CID_AUDIO_SPDIF_BIT      0x02000006
  53#define PS3AV_CID_AUDIO_CTRL           0x02000007
  54
  55#define PS3AV_CID_EVENT_UNPLUGGED      0x10000001
  56#define PS3AV_CID_EVENT_PLUGGED        0x10000002
  57#define PS3AV_CID_EVENT_HDCP_DONE      0x10000003
  58#define PS3AV_CID_EVENT_HDCP_FAIL      0x10000004
  59#define PS3AV_CID_EVENT_HDCP_AUTH      0x10000005
  60#define PS3AV_CID_EVENT_HDCP_ERROR     0x10000006
  61
  62#define PS3AV_CID_AVB_PARAM            0x04000001
  63
  64/* max backend ports */
  65#define PS3AV_HDMI_MAX                 2        /* HDMI_0 HDMI_1 */
  66#define PS3AV_AVMULTI_MAX              1        /* AVMULTI_0 */
  67#define PS3AV_AV_PORT_MAX              (PS3AV_HDMI_MAX + PS3AV_AVMULTI_MAX)
  68#define PS3AV_OPT_PORT_MAX             1        /* SPDIF0 */
  69#define PS3AV_HEAD_MAX                 2        /* HEAD_A HEAD_B */
  70
  71/* num of pkt for PS3AV_CID_AVB_PARAM */
  72#define PS3AV_AVB_NUM_VIDEO            PS3AV_HEAD_MAX
  73#define PS3AV_AVB_NUM_AUDIO            0        /* not supported */
  74#define PS3AV_AVB_NUM_AV_VIDEO         PS3AV_AV_PORT_MAX
  75#define PS3AV_AVB_NUM_AV_AUDIO         PS3AV_HDMI_MAX
  76
  77#define PS3AV_MUTE_PORT_MAX            1        /* num of ports in mute pkt */
  78
  79/* event_bit */
  80#define PS3AV_CMD_EVENT_BIT_UNPLUGGED                   (1 << 0)
  81#define PS3AV_CMD_EVENT_BIT_PLUGGED                     (1 << 1)
  82#define PS3AV_CMD_EVENT_BIT_HDCP_DONE                   (1 << 2)
  83#define PS3AV_CMD_EVENT_BIT_HDCP_FAIL                   (1 << 3)
  84#define PS3AV_CMD_EVENT_BIT_HDCP_REAUTH                 (1 << 4)
  85#define PS3AV_CMD_EVENT_BIT_HDCP_TOPOLOGY               (1 << 5)
  86
  87/* common params */
  88/* mute */
  89#define PS3AV_CMD_MUTE_OFF                              0x0000
  90#define PS3AV_CMD_MUTE_ON                               0x0001
  91/* avport */
  92#define PS3AV_CMD_AVPORT_HDMI_0                         0x0000
  93#define PS3AV_CMD_AVPORT_HDMI_1                         0x0001
  94#define PS3AV_CMD_AVPORT_AVMULTI_0                      0x0010
  95#define PS3AV_CMD_AVPORT_SPDIF_0                        0x0020
  96#define PS3AV_CMD_AVPORT_SPDIF_1                        0x0021
  97
  98/* for av backend */
  99/* av_mclk */
 100#define PS3AV_CMD_AV_MCLK_128                           0x0000
 101#define PS3AV_CMD_AV_MCLK_256                           0x0001
 102#define PS3AV_CMD_AV_MCLK_512                           0x0003
 103/* av_inputlen */
 104#define PS3AV_CMD_AV_INPUTLEN_16                        0x02
 105#define PS3AV_CMD_AV_INPUTLEN_20                        0x0a
 106#define PS3AV_CMD_AV_INPUTLEN_24                        0x0b
 107/* alayout */
 108#define PS3AV_CMD_AV_LAYOUT_32                          (1 << 0)
 109#define PS3AV_CMD_AV_LAYOUT_44                          (1 << 1)
 110#define PS3AV_CMD_AV_LAYOUT_48                          (1 << 2)
 111#define PS3AV_CMD_AV_LAYOUT_88                          (1 << 3)
 112#define PS3AV_CMD_AV_LAYOUT_96                          (1 << 4)
 113#define PS3AV_CMD_AV_LAYOUT_176                         (1 << 5)
 114#define PS3AV_CMD_AV_LAYOUT_192                         (1 << 6)
 115/* hdmi_mode */
 116#define PS3AV_CMD_AV_HDMI_MODE_NORMAL                   0xff
 117#define PS3AV_CMD_AV_HDMI_HDCP_OFF                      0x01
 118#define PS3AV_CMD_AV_HDMI_EDID_PASS                     0x80
 119#define PS3AV_CMD_AV_HDMI_DVI                           0x40
 120
 121/* for video module */
 122/* video_head */
 123#define PS3AV_CMD_VIDEO_HEAD_A                          0x0000
 124#define PS3AV_CMD_VIDEO_HEAD_B                          0x0001
 125/* video_cs_out video_cs_in */
 126#define PS3AV_CMD_VIDEO_CS_NONE                         0x0000
 127#define PS3AV_CMD_VIDEO_CS_RGB_8                        0x0001
 128#define PS3AV_CMD_VIDEO_CS_YUV444_8                     0x0002
 129#define PS3AV_CMD_VIDEO_CS_YUV422_8                     0x0003
 130#define PS3AV_CMD_VIDEO_CS_XVYCC_8                      0x0004
 131#define PS3AV_CMD_VIDEO_CS_RGB_10                       0x0005
 132#define PS3AV_CMD_VIDEO_CS_YUV444_10                    0x0006
 133#define PS3AV_CMD_VIDEO_CS_YUV422_10                    0x0007
 134#define PS3AV_CMD_VIDEO_CS_XVYCC_10                     0x0008
 135#define PS3AV_CMD_VIDEO_CS_RGB_12                       0x0009
 136#define PS3AV_CMD_VIDEO_CS_YUV444_12                    0x000a
 137#define PS3AV_CMD_VIDEO_CS_YUV422_12                    0x000b
 138#define PS3AV_CMD_VIDEO_CS_XVYCC_12                     0x000c
 139/* video_vid */
 140#define PS3AV_CMD_VIDEO_VID_NONE                        0x0000
 141#define PS3AV_CMD_VIDEO_VID_480I                        0x0001
 142#define PS3AV_CMD_VIDEO_VID_576I                        0x0003
 143#define PS3AV_CMD_VIDEO_VID_480P                        0x0005
 144#define PS3AV_CMD_VIDEO_VID_576P                        0x0006
 145#define PS3AV_CMD_VIDEO_VID_1080I_60HZ                  0x0007
 146#define PS3AV_CMD_VIDEO_VID_1080I_50HZ                  0x0008
 147#define PS3AV_CMD_VIDEO_VID_720P_60HZ                   0x0009
 148#define PS3AV_CMD_VIDEO_VID_720P_50HZ                   0x000a
 149#define PS3AV_CMD_VIDEO_VID_1080P_60HZ                  0x000b
 150#define PS3AV_CMD_VIDEO_VID_1080P_50HZ                  0x000c
 151#define PS3AV_CMD_VIDEO_VID_WXGA                        0x000d
 152#define PS3AV_CMD_VIDEO_VID_SXGA                        0x000e
 153#define PS3AV_CMD_VIDEO_VID_WUXGA                       0x000f
 154#define PS3AV_CMD_VIDEO_VID_480I_A                      0x0010
 155/* video_format */
 156#define PS3AV_CMD_VIDEO_FORMAT_BLACK                    0x0000
 157#define PS3AV_CMD_VIDEO_FORMAT_ARGB_8BIT                0x0007
 158/* video_order */
 159#define PS3AV_CMD_VIDEO_ORDER_RGB                       0x0000
 160#define PS3AV_CMD_VIDEO_ORDER_BGR                       0x0001
 161/* video_fmt */
 162#define PS3AV_CMD_VIDEO_FMT_X8R8G8B8                    0x0000
 163/* video_out_format */
 164#define PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT            0x0000
 165/* video_cl_cnv */
 166#define PS3AV_CMD_VIDEO_CL_CNV_ENABLE_LUT               0x0000
 167#define PS3AV_CMD_VIDEO_CL_CNV_DISABLE_LUT              0x0010
 168/* video_sync */
 169#define PS3AV_CMD_VIDEO_SYNC_VSYNC                      0x0001
 170#define PS3AV_CMD_VIDEO_SYNC_CSYNC                      0x0004
 171#define PS3AV_CMD_VIDEO_SYNC_HSYNC                      0x0010
 172
 173/* for audio module */
 174/* num_of_ch */
 175#define PS3AV_CMD_AUDIO_NUM_OF_CH_2                     0x0000
 176#define PS3AV_CMD_AUDIO_NUM_OF_CH_3                     0x0001
 177#define PS3AV_CMD_AUDIO_NUM_OF_CH_4                     0x0002
 178#define PS3AV_CMD_AUDIO_NUM_OF_CH_5                     0x0003
 179#define PS3AV_CMD_AUDIO_NUM_OF_CH_6                     0x0004
 180#define PS3AV_CMD_AUDIO_NUM_OF_CH_7                     0x0005
 181#define PS3AV_CMD_AUDIO_NUM_OF_CH_8                     0x0006
 182/* audio_fs */
 183#define PS3AV_CMD_AUDIO_FS_32K                          0x0001
 184#define PS3AV_CMD_AUDIO_FS_44K                          0x0002
 185#define PS3AV_CMD_AUDIO_FS_48K                          0x0003
 186#define PS3AV_CMD_AUDIO_FS_88K                          0x0004
 187#define PS3AV_CMD_AUDIO_FS_96K                          0x0005
 188#define PS3AV_CMD_AUDIO_FS_176K                         0x0006
 189#define PS3AV_CMD_AUDIO_FS_192K                         0x0007
 190/* audio_word_bits */
 191#define PS3AV_CMD_AUDIO_WORD_BITS_16                    0x0001
 192#define PS3AV_CMD_AUDIO_WORD_BITS_20                    0x0002
 193#define PS3AV_CMD_AUDIO_WORD_BITS_24                    0x0003
 194/* audio_format */
 195#define PS3AV_CMD_AUDIO_FORMAT_PCM                      0x0001
 196#define PS3AV_CMD_AUDIO_FORMAT_BITSTREAM                0x00ff
 197/* audio_source */
 198#define PS3AV_CMD_AUDIO_SOURCE_SERIAL                   0x0000
 199#define PS3AV_CMD_AUDIO_SOURCE_SPDIF                    0x0001
 200/* audio_swap */
 201#define PS3AV_CMD_AUDIO_SWAP_0                          0x0000
 202#define PS3AV_CMD_AUDIO_SWAP_1                          0x0000
 203/* audio_map */
 204#define PS3AV_CMD_AUDIO_MAP_OUTPUT_0                    0x0000
 205#define PS3AV_CMD_AUDIO_MAP_OUTPUT_1                    0x0001
 206#define PS3AV_CMD_AUDIO_MAP_OUTPUT_2                    0x0002
 207#define PS3AV_CMD_AUDIO_MAP_OUTPUT_3                    0x0003
 208/* audio_layout */
 209#define PS3AV_CMD_AUDIO_LAYOUT_2CH                      0x0000
 210#define PS3AV_CMD_AUDIO_LAYOUT_6CH                      0x000b  /* LREClr */
 211#define PS3AV_CMD_AUDIO_LAYOUT_8CH                      0x001f  /* LREClrXY */
 212/* audio_downmix */
 213#define PS3AV_CMD_AUDIO_DOWNMIX_PERMITTED               0x0000
 214#define PS3AV_CMD_AUDIO_DOWNMIX_PROHIBITED              0x0001
 215
 216/* audio_port */
 217#define PS3AV_CMD_AUDIO_PORT_HDMI_0                     ( 1 << 0 )
 218#define PS3AV_CMD_AUDIO_PORT_HDMI_1                     ( 1 << 1 )
 219#define PS3AV_CMD_AUDIO_PORT_AVMULTI_0                  ( 1 << 10 )
 220#define PS3AV_CMD_AUDIO_PORT_SPDIF_0                    ( 1 << 20 )
 221#define PS3AV_CMD_AUDIO_PORT_SPDIF_1                    ( 1 << 21 )
 222
 223/* audio_ctrl_id */
 224#define PS3AV_CMD_AUDIO_CTRL_ID_DAC_RESET               0x0000
 225#define PS3AV_CMD_AUDIO_CTRL_ID_DAC_DE_EMPHASIS         0x0001
 226#define PS3AV_CMD_AUDIO_CTRL_ID_AVCLK                   0x0002
 227/* audio_ctrl_data[0] reset */
 228#define PS3AV_CMD_AUDIO_CTRL_RESET_NEGATE               0x0000
 229#define PS3AV_CMD_AUDIO_CTRL_RESET_ASSERT               0x0001
 230/* audio_ctrl_data[0] de-emphasis */
 231#define PS3AV_CMD_AUDIO_CTRL_DE_EMPHASIS_OFF            0x0000
 232#define PS3AV_CMD_AUDIO_CTRL_DE_EMPHASIS_ON             0x0001
 233/* audio_ctrl_data[0] avclk */
 234#define PS3AV_CMD_AUDIO_CTRL_AVCLK_22                   0x0000
 235#define PS3AV_CMD_AUDIO_CTRL_AVCLK_18                   0x0001
 236
 237/* av_vid */
 238/* do not use these params directly, use vid_video2av */
 239#define PS3AV_CMD_AV_VID_480I                           0x0000
 240#define PS3AV_CMD_AV_VID_480P                           0x0001
 241#define PS3AV_CMD_AV_VID_720P_60HZ                      0x0002
 242#define PS3AV_CMD_AV_VID_1080I_60HZ                     0x0003
 243#define PS3AV_CMD_AV_VID_1080P_60HZ                     0x0004
 244#define PS3AV_CMD_AV_VID_576I                           0x0005
 245#define PS3AV_CMD_AV_VID_576P                           0x0006
 246#define PS3AV_CMD_AV_VID_720P_50HZ                      0x0007
 247#define PS3AV_CMD_AV_VID_1080I_50HZ                     0x0008
 248#define PS3AV_CMD_AV_VID_1080P_50HZ                     0x0009
 249#define PS3AV_CMD_AV_VID_WXGA                           0x000a
 250#define PS3AV_CMD_AV_VID_SXGA                           0x000b
 251#define PS3AV_CMD_AV_VID_WUXGA                          0x000c
 252/* av_cs_out av_cs_in */
 253/* use cs_video2av() */
 254#define PS3AV_CMD_AV_CS_RGB_8                           0x0000
 255#define PS3AV_CMD_AV_CS_YUV444_8                        0x0001
 256#define PS3AV_CMD_AV_CS_YUV422_8                        0x0002
 257#define PS3AV_CMD_AV_CS_XVYCC_8                         0x0003
 258#define PS3AV_CMD_AV_CS_RGB_10                          0x0004
 259#define PS3AV_CMD_AV_CS_YUV444_10                       0x0005
 260#define PS3AV_CMD_AV_CS_YUV422_10                       0x0006
 261#define PS3AV_CMD_AV_CS_XVYCC_10                        0x0007
 262#define PS3AV_CMD_AV_CS_RGB_12                          0x0008
 263#define PS3AV_CMD_AV_CS_YUV444_12                       0x0009
 264#define PS3AV_CMD_AV_CS_YUV422_12                       0x000a
 265#define PS3AV_CMD_AV_CS_XVYCC_12                        0x000b
 266#define PS3AV_CMD_AV_CS_8                               0x0000
 267#define PS3AV_CMD_AV_CS_10                              0x0001
 268#define PS3AV_CMD_AV_CS_12                              0x0002
 269/* dither */
 270#define PS3AV_CMD_AV_DITHER_OFF                         0x0000
 271#define PS3AV_CMD_AV_DITHER_ON                          0x0001
 272#define PS3AV_CMD_AV_DITHER_8BIT                        0x0000
 273#define PS3AV_CMD_AV_DITHER_10BIT                       0x0002
 274#define PS3AV_CMD_AV_DITHER_12BIT                       0x0004
 275/* super_white */
 276#define PS3AV_CMD_AV_SUPER_WHITE_OFF                    0x0000
 277#define PS3AV_CMD_AV_SUPER_WHITE_ON                     0x0001
 278/* aspect */
 279#define PS3AV_CMD_AV_ASPECT_16_9                        0x0000
 280#define PS3AV_CMD_AV_ASPECT_4_3                         0x0001
 281/* video_cs_cnv() */
 282#define PS3AV_CMD_VIDEO_CS_RGB                          0x0001
 283#define PS3AV_CMD_VIDEO_CS_YUV422                       0x0002
 284#define PS3AV_CMD_VIDEO_CS_YUV444                       0x0003
 285
 286/* for broadcast automode */
 287#define PS3AV_RESBIT_720x480P                   0x0003  /* 0x0001 | 0x0002 */
 288#define PS3AV_RESBIT_720x576P                   0x0003  /* 0x0001 | 0x0002 */
 289#define PS3AV_RESBIT_1280x720P                  0x0004
 290#define PS3AV_RESBIT_1920x1080I                 0x0008
 291#define PS3AV_RESBIT_1920x1080P                 0x4000
 292#define PS3AV_RES_MASK_60                       (PS3AV_RESBIT_720x480P \
 293                                                | PS3AV_RESBIT_1280x720P \
 294                                                | PS3AV_RESBIT_1920x1080I \
 295                                                | PS3AV_RESBIT_1920x1080P)
 296#define PS3AV_RES_MASK_50                       (PS3AV_RESBIT_720x576P \
 297                                                | PS3AV_RESBIT_1280x720P \
 298                                                | PS3AV_RESBIT_1920x1080I \
 299                                                | PS3AV_RESBIT_1920x1080P)
 300
 301/* for VESA automode */
 302#define PS3AV_RESBIT_VGA                        0x0001
 303#define PS3AV_RESBIT_WXGA                       0x0002
 304#define PS3AV_RESBIT_SXGA                       0x0004
 305#define PS3AV_RESBIT_WUXGA                      0x0008
 306#define PS3AV_RES_MASK_VESA                     (PS3AV_RESBIT_WXGA |\
 307                                                 PS3AV_RESBIT_SXGA |\
 308                                                 PS3AV_RESBIT_WUXGA)
 309
 310#define PS3AV_MONITOR_TYPE_HDMI                 1       /* HDMI */
 311#define PS3AV_MONITOR_TYPE_DVI                  2       /* DVI */
 312
 313
 314/* for video mode */
 315enum ps3av_mode_num {
 316        PS3AV_MODE_AUTO                         = 0,
 317        PS3AV_MODE_480I                         = 1,
 318        PS3AV_MODE_480P                         = 2,
 319        PS3AV_MODE_720P60                       = 3,
 320        PS3AV_MODE_1080I60                      = 4,
 321        PS3AV_MODE_1080P60                      = 5,
 322        PS3AV_MODE_576I                         = 6,
 323        PS3AV_MODE_576P                         = 7,
 324        PS3AV_MODE_720P50                       = 8,
 325        PS3AV_MODE_1080I50                      = 9,
 326        PS3AV_MODE_1080P50                      = 10,
 327        PS3AV_MODE_WXGA                         = 11,
 328        PS3AV_MODE_SXGA                         = 12,
 329        PS3AV_MODE_WUXGA                        = 13,
 330};
 331
 332#define PS3AV_MODE_MASK                         0x000F
 333#define PS3AV_MODE_HDCP_OFF                     0x1000  /* Retail PS3 product doesn't support this */
 334#define PS3AV_MODE_DITHER                       0x0800
 335#define PS3AV_MODE_COLOR                        0x0400
 336#define PS3AV_MODE_WHITE                        0x0200
 337#define PS3AV_MODE_FULL                         0x0080
 338#define PS3AV_MODE_DVI                          0x0040
 339#define PS3AV_MODE_RGB                          0x0020
 340
 341
 342#define PS3AV_DEFAULT_HDMI_MODE_ID_REG_60       PS3AV_MODE_480P
 343#define PS3AV_DEFAULT_AVMULTI_MODE_ID_REG_60    PS3AV_MODE_480I
 344#define PS3AV_DEFAULT_HDMI_MODE_ID_REG_50       PS3AV_MODE_576P
 345#define PS3AV_DEFAULT_AVMULTI_MODE_ID_REG_50    PS3AV_MODE_576I
 346
 347#define PS3AV_REGION_60                         0x01
 348#define PS3AV_REGION_50                         0x02
 349#define PS3AV_REGION_RGB                        0x10
 350
 351#define get_status(buf)                         (((__u32 *)buf)[2])
 352#define PS3AV_HDR_SIZE                          4       /* version + size */
 353
 354
 355/** command packet structure **/
 356struct ps3av_send_hdr {
 357        u16 version;
 358        u16 size;               /* size of command packet */
 359        u32 cid;                /* command id */
 360};
 361
 362struct ps3av_reply_hdr {
 363        u16 version;
 364        u16 size;
 365        u32 cid;
 366        u32 status;
 367};
 368
 369/* backend: initialization */
 370struct ps3av_pkt_av_init {
 371        struct ps3av_send_hdr send_hdr;
 372        u32 event_bit;
 373};
 374
 375/* backend: finalize */
 376struct ps3av_pkt_av_fin {
 377        struct ps3av_send_hdr send_hdr;
 378        /* recv */
 379        u32 reserved;
 380};
 381
 382/* backend: get port */
 383struct ps3av_pkt_av_get_hw_conf {
 384        struct ps3av_send_hdr send_hdr;
 385        /* recv */
 386        u32 status;
 387        u16 num_of_hdmi;        /* out: number of hdmi */
 388        u16 num_of_avmulti;     /* out: number of avmulti */
 389        u16 num_of_spdif;       /* out: number of hdmi */
 390        u16 reserved;
 391};
 392
 393/* backend: get monitor info */
 394struct ps3av_info_resolution {
 395        u32 res_bits;
 396        u32 native;
 397};
 398
 399struct ps3av_info_cs {
 400        u8 rgb;
 401        u8 yuv444;
 402        u8 yuv422;
 403        u8 reserved;
 404};
 405
 406struct ps3av_info_color {
 407        u16 red_x;
 408        u16 red_y;
 409        u16 green_x;
 410        u16 green_y;
 411        u16 blue_x;
 412        u16 blue_y;
 413        u16 white_x;
 414        u16 white_y;
 415        u32 gamma;
 416};
 417
 418struct ps3av_info_audio {
 419        u8 type;
 420        u8 max_num_of_ch;
 421        u8 fs;
 422        u8 sbit;
 423};
 424
 425struct ps3av_info_monitor {
 426        u8 avport;
 427        u8 monitor_id[10];
 428        u8 monitor_type;
 429        u8 monitor_name[16];
 430        struct ps3av_info_resolution res_60;
 431        struct ps3av_info_resolution res_50;
 432        struct ps3av_info_resolution res_other;
 433        struct ps3av_info_resolution res_vesa;
 434        struct ps3av_info_cs cs;
 435        struct ps3av_info_color color;
 436        u8 supported_ai;
 437        u8 speaker_info;
 438        u8 num_of_audio_block;
 439        struct ps3av_info_audio audio[0];       /* 0 or more audio blocks */
 440        u8 reserved[169];
 441} __attribute__ ((packed));
 442
 443struct ps3av_pkt_av_get_monitor_info {
 444        struct ps3av_send_hdr send_hdr;
 445        u16 avport;             /* in: avport */
 446        u16 reserved;
 447        /* recv */
 448        struct ps3av_info_monitor info; /* out: monitor info */
 449};
 450
 451/* backend: enable/disable event */
 452struct ps3av_pkt_av_event {
 453        struct ps3av_send_hdr send_hdr;
 454        u32 event_bit;          /* in */
 455};
 456
 457/* backend: video cs param */
 458struct ps3av_pkt_av_video_cs {
 459        struct ps3av_send_hdr send_hdr;
 460        u16 avport;             /* in: avport */
 461        u16 av_vid;             /* in: video resolution */
 462        u16 av_cs_out;          /* in: output color space */
 463        u16 av_cs_in;           /* in: input color space */
 464        u8 dither;              /* in: dither bit length */
 465        u8 bitlen_out;          /* in: bit length */
 466        u8 super_white;         /* in: super white */
 467        u8 aspect;              /* in: aspect ratio */
 468};
 469
 470/* backend: video mute */
 471struct ps3av_av_mute {
 472        u16 avport;             /* in: avport */
 473        u16 mute;               /* in: mute on/off */
 474};
 475
 476struct ps3av_pkt_av_video_mute {
 477        struct ps3av_send_hdr send_hdr;
 478        struct ps3av_av_mute mute[PS3AV_MUTE_PORT_MAX];
 479};
 480
 481/* backend: video disable signal */
 482struct ps3av_pkt_av_video_disable_sig {
 483        struct ps3av_send_hdr send_hdr;
 484        u16 avport;             /* in: avport */
 485        u16 reserved;
 486};
 487
 488/* backend: audio param */
 489struct ps3av_audio_info_frame {
 490        struct pb1_bit {
 491                u8 ct:4;
 492                u8 rsv:1;
 493                u8 cc:3;
 494        } pb1;
 495        struct pb2_bit {
 496                u8 rsv:3;
 497                u8 sf:3;
 498                u8 ss:2;
 499        } pb2;
 500        u8 pb3;
 501        u8 pb4;
 502        struct pb5_bit {
 503                u8 dm:1;
 504                u8 lsv:4;
 505                u8 rsv:3;
 506        } pb5;
 507};
 508
 509struct ps3av_pkt_av_audio_param {
 510        struct ps3av_send_hdr send_hdr;
 511        u16 avport;             /* in: avport */
 512        u16 reserved;
 513        u8 mclk;                /* in: audio mclk */
 514        u8 ns[3];               /* in: audio ns val */
 515        u8 enable;              /* in: audio enable */
 516        u8 swaplr;              /* in: audio swap */
 517        u8 fifomap;             /* in: audio fifomap */
 518        u8 inputctrl;           /* in: audio input ctrl */
 519        u8 inputlen;            /* in: sample bit size */
 520        u8 layout;              /* in: speaker layout param */
 521        struct ps3av_audio_info_frame info;     /* in: info */
 522        u8 chstat[5];           /* in: ch stat */
 523};
 524
 525/* backend: audio_mute */
 526struct ps3av_pkt_av_audio_mute {
 527        struct ps3av_send_hdr send_hdr;
 528        struct ps3av_av_mute mute[PS3AV_MUTE_PORT_MAX];
 529};
 530
 531/* backend: hdmi_mode */
 532struct ps3av_pkt_av_hdmi_mode {
 533        struct ps3av_send_hdr send_hdr;
 534        u8 mode;                /* in: hdmi_mode */
 535        u8 reserved0;
 536        u8 reserved1;
 537        u8 reserved2;
 538};
 539
 540/* backend: tv_mute */
 541struct ps3av_pkt_av_tv_mute {
 542        struct ps3av_send_hdr send_hdr;
 543        u16 avport;             /* in: avport HDMI only */
 544        u16 mute;               /* in: mute */
 545};
 546
 547/* video: initialize */
 548struct ps3av_pkt_video_init {
 549        struct ps3av_send_hdr send_hdr;
 550        /* recv */
 551        u32 reserved;
 552};
 553
 554/* video: mode setting */
 555struct ps3av_pkt_video_mode {
 556        struct ps3av_send_hdr send_hdr;
 557        u32 video_head;         /* in: head */
 558        u32 reserved;
 559        u32 video_vid;          /* in: video resolution */
 560        u16 reserved1;
 561        u16 width;              /* in: width in pixel */
 562        u16 reserved2;
 563        u16 height;             /* in: height in pixel */
 564        u32 pitch;              /* in: line size in byte */
 565        u32 video_out_format;   /* in: out format */
 566        u32 video_format;       /* in: input frame buffer format */
 567        u8 reserved3;
 568        u8 video_cl_cnv;        /* in: color conversion */
 569        u16 video_order;        /* in: input RGB order */
 570        u32 reserved4;
 571};
 572
 573/* video: format */
 574struct ps3av_pkt_video_format {
 575        struct ps3av_send_hdr send_hdr;
 576        u32 video_head;         /* in: head */
 577        u32 video_format;       /* in: frame buffer format */
 578        u8 reserved;
 579        u8 video_cl_cnv;        /* in: color conversion */
 580        u16 video_order;        /* in: input RGB order */
 581};
 582
 583/* video: pitch */
 584struct ps3av_pkt_video_pitch {
 585        u16 version;
 586        u16 size;               /* size of command packet */
 587        u32 cid;                /* command id */
 588        u32 video_head;         /* in: head */
 589        u32 pitch;              /* in: line size in byte */
 590};
 591
 592/* audio: initialize */
 593struct ps3av_pkt_audio_init {
 594        struct ps3av_send_hdr send_hdr;
 595        /* recv */
 596        u32 reserved;
 597};
 598
 599/* audio: mode setting */
 600struct ps3av_pkt_audio_mode {
 601        struct ps3av_send_hdr send_hdr;
 602        u8 avport;              /* in: avport */
 603        u8 reserved0[3];
 604        u32 mask;               /* in: mask */
 605        u32 audio_num_of_ch;    /* in: number of ch */
 606        u32 audio_fs;           /* in: sampling freq */
 607        u32 audio_word_bits;    /* in: sample bit size */
 608        u32 audio_format;       /* in: audio output format */
 609        u32 audio_source;       /* in: audio source */
 610        u8 audio_enable[4];     /* in: audio enable */
 611        u8 audio_swap[4];       /* in: audio swap */
 612        u8 audio_map[4];        /* in: audio map */
 613        u32 audio_layout;       /* in: speaker layout */
 614        u32 audio_downmix;      /* in: audio downmix permission */
 615        u32 audio_downmix_level;
 616        u8 audio_cs_info[8];    /* in: IEC channel status */
 617};
 618
 619/* audio: mute */
 620struct ps3av_audio_mute {
 621        u8 avport;              /* in: opt_port optical */
 622        u8 reserved[3];
 623        u32 mute;               /* in: mute */
 624};
 625
 626struct ps3av_pkt_audio_mute {
 627        struct ps3av_send_hdr send_hdr;
 628        struct ps3av_audio_mute mute[PS3AV_OPT_PORT_MAX];
 629};
 630
 631/* audio: active/inactive */
 632struct ps3av_pkt_audio_active {
 633        struct ps3av_send_hdr send_hdr;
 634        u32 audio_port;         /* in: audio active/inactive port */
 635};
 636
 637/* audio: SPDIF user bit */
 638struct ps3av_pkt_audio_spdif_bit {
 639        u16 version;
 640        u16 size;               /* size of command packet */
 641        u32 cid;                /* command id */
 642        u8 avport;              /* in: avport SPDIF only */
 643        u8 reserved[3];
 644        u32 audio_port;         /* in: SPDIF only */
 645        u32 spdif_bit_data[12]; /* in: user bit data */
 646};
 647
 648/* audio: audio control */
 649struct ps3av_pkt_audio_ctrl {
 650        u16 version;
 651        u16 size;               /* size of command packet */
 652        u32 cid;                /* command id */
 653        u32 audio_ctrl_id;      /* in: control id */
 654        u32 audio_ctrl_data[4]; /* in: control data */
 655};
 656
 657/* avb:param */
 658#define PS3AV_PKT_AVB_PARAM_MAX_BUF_SIZE        \
 659        (PS3AV_AVB_NUM_VIDEO*sizeof(struct ps3av_pkt_video_mode) + \
 660         PS3AV_AVB_NUM_AUDIO*sizeof(struct ps3av_pkt_audio_mode) + \
 661         PS3AV_AVB_NUM_AV_VIDEO*sizeof(struct ps3av_pkt_av_video_cs) + \
 662         PS3AV_AVB_NUM_AV_AUDIO*sizeof(struct ps3av_pkt_av_audio_param))
 663
 664struct ps3av_pkt_avb_param {
 665        struct ps3av_send_hdr send_hdr;
 666        u16 num_of_video_pkt;
 667        u16 num_of_audio_pkt;
 668        u16 num_of_av_video_pkt;
 669        u16 num_of_av_audio_pkt;
 670        /*
 671         * The actual buffer layout depends on the fields above:
 672         *
 673         * struct ps3av_pkt_video_mode video[num_of_video_pkt];
 674         * struct ps3av_pkt_audio_mode audio[num_of_audio_pkt];
 675         * struct ps3av_pkt_av_video_cs av_video[num_of_av_video_pkt];
 676         * struct ps3av_pkt_av_audio_param av_audio[num_of_av_audio_pkt];
 677         */
 678        u8 buf[PS3AV_PKT_AVB_PARAM_MAX_BUF_SIZE];
 679};
 680
 681/* channel status */
 682extern u8 ps3av_mode_cs_info[];
 683
 684/** command status **/
 685#define PS3AV_STATUS_SUCCESS                    0x0000  /* success */
 686#define PS3AV_STATUS_RECEIVE_VUART_ERROR        0x0001  /* receive vuart error */
 687#define PS3AV_STATUS_SYSCON_COMMUNICATE_FAIL    0x0002  /* syscon communication error */
 688#define PS3AV_STATUS_INVALID_COMMAND            0x0003  /* obsolete invalid CID */
 689#define PS3AV_STATUS_INVALID_PORT               0x0004  /* invalid port number */
 690#define PS3AV_STATUS_INVALID_VID                0x0005  /* invalid video format */
 691#define PS3AV_STATUS_INVALID_COLOR_SPACE        0x0006  /* invalid video colose space */
 692#define PS3AV_STATUS_INVALID_FS                 0x0007  /* invalid audio sampling freq */
 693#define PS3AV_STATUS_INVALID_AUDIO_CH           0x0008  /* invalid audio channel number */
 694#define PS3AV_STATUS_UNSUPPORTED_VERSION        0x0009  /* version mismatch  */
 695#define PS3AV_STATUS_INVALID_SAMPLE_SIZE        0x000a  /* invalid audio sample bit size */
 696#define PS3AV_STATUS_FAILURE                    0x000b  /* other failures */
 697#define PS3AV_STATUS_UNSUPPORTED_COMMAND        0x000c  /* unsupported cid */
 698#define PS3AV_STATUS_BUFFER_OVERFLOW            0x000d  /* write buffer overflow */
 699#define PS3AV_STATUS_INVALID_VIDEO_PARAM        0x000e  /* invalid video param */
 700#define PS3AV_STATUS_NO_SEL                     0x000f  /* not exist selector */
 701#define PS3AV_STATUS_INVALID_AV_PARAM           0x0010  /* invalid backend param */
 702#define PS3AV_STATUS_INVALID_AUDIO_PARAM        0x0011  /* invalid audio param */
 703#define PS3AV_STATUS_UNSUPPORTED_HDMI_MODE      0x0012  /* unsupported hdmi mode */
 704#define PS3AV_STATUS_NO_SYNC_HEAD               0x0013  /* sync head failed */
 705
 706extern void ps3av_set_hdr(u32, u16, struct ps3av_send_hdr *);
 707extern int ps3av_do_pkt(u32, u16, size_t, struct ps3av_send_hdr *);
 708
 709extern int ps3av_cmd_init(void);
 710extern int ps3av_cmd_fin(void);
 711extern int ps3av_cmd_av_video_mute(int, u32 *, u32);
 712extern int ps3av_cmd_av_video_disable_sig(u32);
 713extern int ps3av_cmd_av_tv_mute(u32, u32);
 714extern int ps3av_cmd_enable_event(void);
 715extern int ps3av_cmd_av_hdmi_mode(u8);
 716extern u32 ps3av_cmd_set_av_video_cs(void *, u32, int, int, int, u32);
 717extern u32 ps3av_cmd_set_video_mode(void *, u32, int, int, u32);
 718extern int ps3av_cmd_video_format_black(u32, u32, u32);
 719extern int ps3av_cmd_av_audio_mute(int, u32 *, u32);
 720extern u32 ps3av_cmd_set_av_audio_param(void *, u32,
 721                                        const struct ps3av_pkt_audio_mode *,
 722                                        u32);
 723extern void ps3av_cmd_set_audio_mode(struct ps3av_pkt_audio_mode *, u32, u32,
 724                                     u32, u32, u32, u32);
 725extern int ps3av_cmd_audio_mode(struct ps3av_pkt_audio_mode *);
 726extern int ps3av_cmd_audio_mute(int, u32 *, u32);
 727extern int ps3av_cmd_audio_active(int, u32);
 728extern int ps3av_cmd_avb_param(struct ps3av_pkt_avb_param *, u32);
 729extern int ps3av_cmd_av_get_hw_conf(struct ps3av_pkt_av_get_hw_conf *);
 730extern int ps3av_cmd_video_get_monitor_info(struct ps3av_pkt_av_get_monitor_info *,
 731                                            u32);
 732
 733extern int ps3av_set_video_mode(int);
 734extern int ps3av_set_audio_mode(u32, u32, u32, u32, u32);
 735extern int ps3av_get_auto_mode(void);
 736extern int ps3av_get_mode(void);
 737extern int ps3av_video_mode2res(u32, u32 *, u32 *);
 738extern int ps3av_video_mute(int);
 739extern int ps3av_audio_mute(int);
 740extern int ps3av_audio_mute_analog(int);
 741extern int ps3av_dev_open(void);
 742extern int ps3av_dev_close(void);
 743#endif  /* _ASM_POWERPC_PS3AV_H_ */
 744