162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *  PS3 AV backend support.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *  Copyright (C) 2007 Sony Computer Entertainment Inc.
662306a36Sopenharmony_ci *  Copyright 2007 Sony Corp.
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#ifndef _ASM_POWERPC_PS3AV_H_
1062306a36Sopenharmony_ci#define _ASM_POWERPC_PS3AV_H_
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/** command for ioctl() **/
1362306a36Sopenharmony_ci#define PS3AV_VERSION 0x205	/* version of ps3av command */
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#define PS3AV_CID_AV_INIT              0x00000001
1662306a36Sopenharmony_ci#define PS3AV_CID_AV_FIN               0x00000002
1762306a36Sopenharmony_ci#define PS3AV_CID_AV_GET_HW_CONF       0x00000003
1862306a36Sopenharmony_ci#define PS3AV_CID_AV_GET_MONITOR_INFO  0x00000004
1962306a36Sopenharmony_ci#define PS3AV_CID_AV_ENABLE_EVENT      0x00000006
2062306a36Sopenharmony_ci#define PS3AV_CID_AV_DISABLE_EVENT     0x00000007
2162306a36Sopenharmony_ci#define PS3AV_CID_AV_TV_MUTE           0x0000000a
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#define PS3AV_CID_AV_VIDEO_CS          0x00010001
2462306a36Sopenharmony_ci#define PS3AV_CID_AV_VIDEO_MUTE        0x00010002
2562306a36Sopenharmony_ci#define PS3AV_CID_AV_VIDEO_DISABLE_SIG 0x00010003
2662306a36Sopenharmony_ci#define PS3AV_CID_AV_AUDIO_PARAM       0x00020001
2762306a36Sopenharmony_ci#define PS3AV_CID_AV_AUDIO_MUTE        0x00020002
2862306a36Sopenharmony_ci#define PS3AV_CID_AV_HDMI_MODE         0x00040001
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci#define PS3AV_CID_VIDEO_INIT           0x01000001
3162306a36Sopenharmony_ci#define PS3AV_CID_VIDEO_MODE           0x01000002
3262306a36Sopenharmony_ci#define PS3AV_CID_VIDEO_FORMAT         0x01000004
3362306a36Sopenharmony_ci#define PS3AV_CID_VIDEO_PITCH          0x01000005
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci#define PS3AV_CID_AUDIO_INIT           0x02000001
3662306a36Sopenharmony_ci#define PS3AV_CID_AUDIO_MODE           0x02000002
3762306a36Sopenharmony_ci#define PS3AV_CID_AUDIO_MUTE           0x02000003
3862306a36Sopenharmony_ci#define PS3AV_CID_AUDIO_ACTIVE         0x02000004
3962306a36Sopenharmony_ci#define PS3AV_CID_AUDIO_INACTIVE       0x02000005
4062306a36Sopenharmony_ci#define PS3AV_CID_AUDIO_SPDIF_BIT      0x02000006
4162306a36Sopenharmony_ci#define PS3AV_CID_AUDIO_CTRL           0x02000007
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci#define PS3AV_CID_EVENT_UNPLUGGED      0x10000001
4462306a36Sopenharmony_ci#define PS3AV_CID_EVENT_PLUGGED        0x10000002
4562306a36Sopenharmony_ci#define PS3AV_CID_EVENT_HDCP_DONE      0x10000003
4662306a36Sopenharmony_ci#define PS3AV_CID_EVENT_HDCP_FAIL      0x10000004
4762306a36Sopenharmony_ci#define PS3AV_CID_EVENT_HDCP_AUTH      0x10000005
4862306a36Sopenharmony_ci#define PS3AV_CID_EVENT_HDCP_ERROR     0x10000006
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci#define PS3AV_CID_AVB_PARAM            0x04000001
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci/* max backend ports */
5362306a36Sopenharmony_ci#define PS3AV_HDMI_MAX                 2	/* HDMI_0 HDMI_1 */
5462306a36Sopenharmony_ci#define PS3AV_AVMULTI_MAX              1	/* AVMULTI_0 */
5562306a36Sopenharmony_ci#define PS3AV_AV_PORT_MAX              (PS3AV_HDMI_MAX + PS3AV_AVMULTI_MAX)
5662306a36Sopenharmony_ci#define PS3AV_OPT_PORT_MAX             1	/* SPDIF0 */
5762306a36Sopenharmony_ci#define PS3AV_HEAD_MAX                 2	/* HEAD_A HEAD_B */
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci/* num of pkt for PS3AV_CID_AVB_PARAM */
6062306a36Sopenharmony_ci#define PS3AV_AVB_NUM_VIDEO            PS3AV_HEAD_MAX
6162306a36Sopenharmony_ci#define PS3AV_AVB_NUM_AUDIO            0	/* not supported */
6262306a36Sopenharmony_ci#define PS3AV_AVB_NUM_AV_VIDEO         PS3AV_AV_PORT_MAX
6362306a36Sopenharmony_ci#define PS3AV_AVB_NUM_AV_AUDIO         PS3AV_HDMI_MAX
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci#define PS3AV_MUTE_PORT_MAX            1	/* num of ports in mute pkt */
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci/* event_bit */
6862306a36Sopenharmony_ci#define PS3AV_CMD_EVENT_BIT_UNPLUGGED			(1 << 0)
6962306a36Sopenharmony_ci#define PS3AV_CMD_EVENT_BIT_PLUGGED			(1 << 1)
7062306a36Sopenharmony_ci#define PS3AV_CMD_EVENT_BIT_HDCP_DONE			(1 << 2)
7162306a36Sopenharmony_ci#define PS3AV_CMD_EVENT_BIT_HDCP_FAIL			(1 << 3)
7262306a36Sopenharmony_ci#define PS3AV_CMD_EVENT_BIT_HDCP_REAUTH			(1 << 4)
7362306a36Sopenharmony_ci#define PS3AV_CMD_EVENT_BIT_HDCP_TOPOLOGY		(1 << 5)
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci/* common params */
7662306a36Sopenharmony_ci/* mute */
7762306a36Sopenharmony_ci#define PS3AV_CMD_MUTE_OFF				0x0000
7862306a36Sopenharmony_ci#define PS3AV_CMD_MUTE_ON				0x0001
7962306a36Sopenharmony_ci/* avport */
8062306a36Sopenharmony_ci#define PS3AV_CMD_AVPORT_HDMI_0				0x0000
8162306a36Sopenharmony_ci#define PS3AV_CMD_AVPORT_HDMI_1				0x0001
8262306a36Sopenharmony_ci#define PS3AV_CMD_AVPORT_AVMULTI_0			0x0010
8362306a36Sopenharmony_ci#define PS3AV_CMD_AVPORT_SPDIF_0			0x0020
8462306a36Sopenharmony_ci#define PS3AV_CMD_AVPORT_SPDIF_1			0x0021
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci/* for av backend */
8762306a36Sopenharmony_ci/* av_mclk */
8862306a36Sopenharmony_ci#define PS3AV_CMD_AV_MCLK_128				0x0000
8962306a36Sopenharmony_ci#define PS3AV_CMD_AV_MCLK_256				0x0001
9062306a36Sopenharmony_ci#define PS3AV_CMD_AV_MCLK_512				0x0003
9162306a36Sopenharmony_ci/* av_inputlen */
9262306a36Sopenharmony_ci#define PS3AV_CMD_AV_INPUTLEN_16			0x02
9362306a36Sopenharmony_ci#define PS3AV_CMD_AV_INPUTLEN_20			0x0a
9462306a36Sopenharmony_ci#define PS3AV_CMD_AV_INPUTLEN_24			0x0b
9562306a36Sopenharmony_ci/* av_layout */
9662306a36Sopenharmony_ci#define PS3AV_CMD_AV_LAYOUT_32				(1 << 0)
9762306a36Sopenharmony_ci#define PS3AV_CMD_AV_LAYOUT_44				(1 << 1)
9862306a36Sopenharmony_ci#define PS3AV_CMD_AV_LAYOUT_48				(1 << 2)
9962306a36Sopenharmony_ci#define PS3AV_CMD_AV_LAYOUT_88				(1 << 3)
10062306a36Sopenharmony_ci#define PS3AV_CMD_AV_LAYOUT_96				(1 << 4)
10162306a36Sopenharmony_ci#define PS3AV_CMD_AV_LAYOUT_176				(1 << 5)
10262306a36Sopenharmony_ci#define PS3AV_CMD_AV_LAYOUT_192				(1 << 6)
10362306a36Sopenharmony_ci/* hdmi_mode */
10462306a36Sopenharmony_ci#define PS3AV_CMD_AV_HDMI_MODE_NORMAL			0xff
10562306a36Sopenharmony_ci#define PS3AV_CMD_AV_HDMI_HDCP_OFF			0x01
10662306a36Sopenharmony_ci#define PS3AV_CMD_AV_HDMI_EDID_PASS			0x80
10762306a36Sopenharmony_ci#define PS3AV_CMD_AV_HDMI_DVI				0x40
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci/* for video module */
11062306a36Sopenharmony_ci/* video_head */
11162306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_HEAD_A				0x0000
11262306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_HEAD_B				0x0001
11362306a36Sopenharmony_ci/* video_cs_out video_cs_in */
11462306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_NONE				0x0000
11562306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_RGB_8			0x0001
11662306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_YUV444_8			0x0002
11762306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_YUV422_8			0x0003
11862306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_XVYCC_8			0x0004
11962306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_RGB_10			0x0005
12062306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_YUV444_10			0x0006
12162306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_YUV422_10			0x0007
12262306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_XVYCC_10			0x0008
12362306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_RGB_12			0x0009
12462306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_YUV444_12			0x000a
12562306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_YUV422_12			0x000b
12662306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_XVYCC_12			0x000c
12762306a36Sopenharmony_ci/* video_vid */
12862306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_NONE			0x0000
12962306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_480I			0x0001
13062306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_576I			0x0003
13162306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_480P			0x0005
13262306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_576P			0x0006
13362306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_1080I_60HZ			0x0007
13462306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_1080I_50HZ			0x0008
13562306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_720P_60HZ			0x0009
13662306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_720P_50HZ			0x000a
13762306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_1080P_60HZ			0x000b
13862306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_1080P_50HZ			0x000c
13962306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_WXGA			0x000d
14062306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_SXGA			0x000e
14162306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_WUXGA			0x000f
14262306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_VID_480I_A			0x0010
14362306a36Sopenharmony_ci/* video_format */
14462306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_FORMAT_BLACK			0x0000
14562306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_FORMAT_ARGB_8BIT		0x0007
14662306a36Sopenharmony_ci/* video_order */
14762306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_ORDER_RGB			0x0000
14862306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_ORDER_BGR			0x0001
14962306a36Sopenharmony_ci/* video_fmt */
15062306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_FMT_X8R8G8B8			0x0000
15162306a36Sopenharmony_ci/* video_out_format */
15262306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT		0x0000
15362306a36Sopenharmony_ci/* video_cl_cnv */
15462306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CL_CNV_ENABLE_LUT		0x0000
15562306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CL_CNV_DISABLE_LUT		0x0010
15662306a36Sopenharmony_ci/* video_sync */
15762306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_SYNC_VSYNC			0x0001
15862306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_SYNC_CSYNC			0x0004
15962306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_SYNC_HSYNC			0x0010
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci/* for audio module */
16262306a36Sopenharmony_ci/* num_of_ch */
16362306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_NUM_OF_CH_2			0x0000
16462306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_NUM_OF_CH_3			0x0001
16562306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_NUM_OF_CH_4			0x0002
16662306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_NUM_OF_CH_5			0x0003
16762306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_NUM_OF_CH_6			0x0004
16862306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_NUM_OF_CH_7			0x0005
16962306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_NUM_OF_CH_8			0x0006
17062306a36Sopenharmony_ci/* audio_fs */
17162306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_FS_32K				0x0001
17262306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_FS_44K				0x0002
17362306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_FS_48K				0x0003
17462306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_FS_88K				0x0004
17562306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_FS_96K				0x0005
17662306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_FS_176K				0x0006
17762306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_FS_192K				0x0007
17862306a36Sopenharmony_ci/* audio_word_bits */
17962306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_WORD_BITS_16			0x0001
18062306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_WORD_BITS_20			0x0002
18162306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_WORD_BITS_24			0x0003
18262306a36Sopenharmony_ci/* audio_format */
18362306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_FORMAT_PCM			0x0001
18462306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_FORMAT_BITSTREAM		0x00ff
18562306a36Sopenharmony_ci/* audio_source */
18662306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_SOURCE_SERIAL			0x0000
18762306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_SOURCE_SPDIF			0x0001
18862306a36Sopenharmony_ci/* audio_swap */
18962306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_SWAP_0				0x0000
19062306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_SWAP_1				0x0000
19162306a36Sopenharmony_ci/* audio_map */
19262306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_MAP_OUTPUT_0			0x0000
19362306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_MAP_OUTPUT_1			0x0001
19462306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_MAP_OUTPUT_2			0x0002
19562306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_MAP_OUTPUT_3			0x0003
19662306a36Sopenharmony_ci/* audio_layout */
19762306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_LAYOUT_2CH			0x0000
19862306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_LAYOUT_6CH			0x000b	/* LREClr */
19962306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_LAYOUT_8CH			0x001f	/* LREClrXY */
20062306a36Sopenharmony_ci/* audio_downmix */
20162306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_DOWNMIX_PERMITTED		0x0000
20262306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_DOWNMIX_PROHIBITED		0x0001
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ci/* audio_port */
20562306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_PORT_HDMI_0			( 1 << 0 )
20662306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_PORT_HDMI_1			( 1 << 1 )
20762306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_PORT_AVMULTI_0			( 1 << 10 )
20862306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_PORT_SPDIF_0			( 1 << 20 )
20962306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_PORT_SPDIF_1			( 1 << 21 )
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci/* audio_ctrl_id */
21262306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_CTRL_ID_DAC_RESET		0x0000
21362306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_CTRL_ID_DAC_DE_EMPHASIS		0x0001
21462306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_CTRL_ID_AVCLK			0x0002
21562306a36Sopenharmony_ci/* audio_ctrl_data[0] reset */
21662306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_CTRL_RESET_NEGATE		0x0000
21762306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_CTRL_RESET_ASSERT		0x0001
21862306a36Sopenharmony_ci/* audio_ctrl_data[0] de-emphasis */
21962306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_CTRL_DE_EMPHASIS_OFF		0x0000
22062306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_CTRL_DE_EMPHASIS_ON		0x0001
22162306a36Sopenharmony_ci/* audio_ctrl_data[0] avclk */
22262306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_CTRL_AVCLK_22			0x0000
22362306a36Sopenharmony_ci#define PS3AV_CMD_AUDIO_CTRL_AVCLK_18			0x0001
22462306a36Sopenharmony_ci
22562306a36Sopenharmony_ci/* av_vid */
22662306a36Sopenharmony_ci/* do not use these params directly, use vid_video2av */
22762306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_480I				0x0000
22862306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_480P				0x0001
22962306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_720P_60HZ			0x0002
23062306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_1080I_60HZ			0x0003
23162306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_1080P_60HZ			0x0004
23262306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_576I				0x0005
23362306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_576P				0x0006
23462306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_720P_50HZ			0x0007
23562306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_1080I_50HZ			0x0008
23662306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_1080P_50HZ			0x0009
23762306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_WXGA				0x000a
23862306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_SXGA				0x000b
23962306a36Sopenharmony_ci#define PS3AV_CMD_AV_VID_WUXGA				0x000c
24062306a36Sopenharmony_ci/* av_cs_out av_cs_in */
24162306a36Sopenharmony_ci/* use cs_video2av() */
24262306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_RGB_8				0x0000
24362306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_YUV444_8			0x0001
24462306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_YUV422_8			0x0002
24562306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_XVYCC_8				0x0003
24662306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_RGB_10				0x0004
24762306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_YUV444_10			0x0005
24862306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_YUV422_10			0x0006
24962306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_XVYCC_10			0x0007
25062306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_RGB_12				0x0008
25162306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_YUV444_12			0x0009
25262306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_YUV422_12			0x000a
25362306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_XVYCC_12			0x000b
25462306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_8				0x0000
25562306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_10				0x0001
25662306a36Sopenharmony_ci#define PS3AV_CMD_AV_CS_12				0x0002
25762306a36Sopenharmony_ci/* dither */
25862306a36Sopenharmony_ci#define PS3AV_CMD_AV_DITHER_OFF				0x0000
25962306a36Sopenharmony_ci#define PS3AV_CMD_AV_DITHER_ON				0x0001
26062306a36Sopenharmony_ci#define PS3AV_CMD_AV_DITHER_8BIT			0x0000
26162306a36Sopenharmony_ci#define PS3AV_CMD_AV_DITHER_10BIT			0x0002
26262306a36Sopenharmony_ci#define PS3AV_CMD_AV_DITHER_12BIT			0x0004
26362306a36Sopenharmony_ci/* super_white */
26462306a36Sopenharmony_ci#define PS3AV_CMD_AV_SUPER_WHITE_OFF			0x0000
26562306a36Sopenharmony_ci#define PS3AV_CMD_AV_SUPER_WHITE_ON			0x0001
26662306a36Sopenharmony_ci/* aspect */
26762306a36Sopenharmony_ci#define PS3AV_CMD_AV_ASPECT_16_9			0x0000
26862306a36Sopenharmony_ci#define PS3AV_CMD_AV_ASPECT_4_3				0x0001
26962306a36Sopenharmony_ci/* video_cs_cnv() */
27062306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_RGB				0x0001
27162306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_YUV422			0x0002
27262306a36Sopenharmony_ci#define PS3AV_CMD_VIDEO_CS_YUV444			0x0003
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci/* for broadcast automode */
27562306a36Sopenharmony_ci#define PS3AV_RESBIT_720x480P			0x0003	/* 0x0001 | 0x0002 */
27662306a36Sopenharmony_ci#define PS3AV_RESBIT_720x576P			0x0003	/* 0x0001 | 0x0002 */
27762306a36Sopenharmony_ci#define PS3AV_RESBIT_1280x720P			0x0004
27862306a36Sopenharmony_ci#define PS3AV_RESBIT_1920x1080I			0x0008
27962306a36Sopenharmony_ci#define PS3AV_RESBIT_1920x1080P			0x4000
28062306a36Sopenharmony_ci#define PS3AV_RES_MASK_60			(PS3AV_RESBIT_720x480P \
28162306a36Sopenharmony_ci						| PS3AV_RESBIT_1280x720P \
28262306a36Sopenharmony_ci						| PS3AV_RESBIT_1920x1080I \
28362306a36Sopenharmony_ci						| PS3AV_RESBIT_1920x1080P)
28462306a36Sopenharmony_ci#define PS3AV_RES_MASK_50			(PS3AV_RESBIT_720x576P \
28562306a36Sopenharmony_ci						| PS3AV_RESBIT_1280x720P \
28662306a36Sopenharmony_ci						| PS3AV_RESBIT_1920x1080I \
28762306a36Sopenharmony_ci						| PS3AV_RESBIT_1920x1080P)
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ci/* for VESA automode */
29062306a36Sopenharmony_ci#define PS3AV_RESBIT_VGA			0x0001
29162306a36Sopenharmony_ci#define PS3AV_RESBIT_WXGA			0x0002
29262306a36Sopenharmony_ci#define PS3AV_RESBIT_SXGA			0x0004
29362306a36Sopenharmony_ci#define PS3AV_RESBIT_WUXGA			0x0008
29462306a36Sopenharmony_ci#define PS3AV_RES_MASK_VESA			(PS3AV_RESBIT_WXGA |\
29562306a36Sopenharmony_ci						 PS3AV_RESBIT_SXGA |\
29662306a36Sopenharmony_ci						 PS3AV_RESBIT_WUXGA)
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ci#define PS3AV_MONITOR_TYPE_HDMI			1	/* HDMI */
29962306a36Sopenharmony_ci#define PS3AV_MONITOR_TYPE_DVI			2	/* DVI */
30062306a36Sopenharmony_ci
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ci/* for video mode */
30362306a36Sopenharmony_cienum ps3av_mode_num {
30462306a36Sopenharmony_ci	PS3AV_MODE_AUTO				= 0,
30562306a36Sopenharmony_ci	PS3AV_MODE_480I				= 1,
30662306a36Sopenharmony_ci	PS3AV_MODE_480P				= 2,
30762306a36Sopenharmony_ci	PS3AV_MODE_720P60			= 3,
30862306a36Sopenharmony_ci	PS3AV_MODE_1080I60			= 4,
30962306a36Sopenharmony_ci	PS3AV_MODE_1080P60			= 5,
31062306a36Sopenharmony_ci	PS3AV_MODE_576I				= 6,
31162306a36Sopenharmony_ci	PS3AV_MODE_576P				= 7,
31262306a36Sopenharmony_ci	PS3AV_MODE_720P50			= 8,
31362306a36Sopenharmony_ci	PS3AV_MODE_1080I50			= 9,
31462306a36Sopenharmony_ci	PS3AV_MODE_1080P50			= 10,
31562306a36Sopenharmony_ci	PS3AV_MODE_WXGA				= 11,
31662306a36Sopenharmony_ci	PS3AV_MODE_SXGA				= 12,
31762306a36Sopenharmony_ci	PS3AV_MODE_WUXGA			= 13,
31862306a36Sopenharmony_ci};
31962306a36Sopenharmony_ci
32062306a36Sopenharmony_ci#define PS3AV_MODE_MASK				0x000F
32162306a36Sopenharmony_ci#define PS3AV_MODE_HDCP_OFF			0x1000	/* Retail PS3 product doesn't support this */
32262306a36Sopenharmony_ci#define PS3AV_MODE_DITHER			0x0800
32362306a36Sopenharmony_ci#define PS3AV_MODE_COLOR			0x0400
32462306a36Sopenharmony_ci#define PS3AV_MODE_WHITE			0x0200
32562306a36Sopenharmony_ci#define PS3AV_MODE_FULL				0x0080
32662306a36Sopenharmony_ci#define PS3AV_MODE_DVI				0x0040
32762306a36Sopenharmony_ci#define PS3AV_MODE_RGB				0x0020
32862306a36Sopenharmony_ci
32962306a36Sopenharmony_ci
33062306a36Sopenharmony_ci#define PS3AV_DEFAULT_HDMI_MODE_ID_REG_60	PS3AV_MODE_480P
33162306a36Sopenharmony_ci#define PS3AV_DEFAULT_AVMULTI_MODE_ID_REG_60	PS3AV_MODE_480I
33262306a36Sopenharmony_ci#define PS3AV_DEFAULT_HDMI_MODE_ID_REG_50	PS3AV_MODE_576P
33362306a36Sopenharmony_ci#define PS3AV_DEFAULT_AVMULTI_MODE_ID_REG_50	PS3AV_MODE_576I
33462306a36Sopenharmony_ci
33562306a36Sopenharmony_ci#define PS3AV_REGION_60				0x01
33662306a36Sopenharmony_ci#define PS3AV_REGION_50				0x02
33762306a36Sopenharmony_ci#define PS3AV_REGION_RGB			0x10
33862306a36Sopenharmony_ci
33962306a36Sopenharmony_ci#define get_status(buf)				(((__u32 *)buf)[2])
34062306a36Sopenharmony_ci#define PS3AV_HDR_SIZE				4	/* version + size */
34162306a36Sopenharmony_ci
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_ci/** command packet structure **/
34462306a36Sopenharmony_cistruct ps3av_send_hdr {
34562306a36Sopenharmony_ci	u16 version;
34662306a36Sopenharmony_ci	u16 size;		/* size of command packet */
34762306a36Sopenharmony_ci	u32 cid;		/* command id */
34862306a36Sopenharmony_ci};
34962306a36Sopenharmony_ci
35062306a36Sopenharmony_cistruct ps3av_reply_hdr {
35162306a36Sopenharmony_ci	u16 version;
35262306a36Sopenharmony_ci	u16 size;
35362306a36Sopenharmony_ci	u32 cid;
35462306a36Sopenharmony_ci	u32 status;
35562306a36Sopenharmony_ci};
35662306a36Sopenharmony_ci
35762306a36Sopenharmony_ci/* backend: initialization */
35862306a36Sopenharmony_cistruct ps3av_pkt_av_init {
35962306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
36062306a36Sopenharmony_ci	u32 event_bit;
36162306a36Sopenharmony_ci};
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_ci/* backend: finalize */
36462306a36Sopenharmony_cistruct ps3av_pkt_av_fin {
36562306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
36662306a36Sopenharmony_ci	/* recv */
36762306a36Sopenharmony_ci	u32 reserved;
36862306a36Sopenharmony_ci};
36962306a36Sopenharmony_ci
37062306a36Sopenharmony_ci/* backend: get port */
37162306a36Sopenharmony_cistruct ps3av_pkt_av_get_hw_conf {
37262306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
37362306a36Sopenharmony_ci	/* recv */
37462306a36Sopenharmony_ci	u32 status;
37562306a36Sopenharmony_ci	u16 num_of_hdmi;	/* out: number of hdmi */
37662306a36Sopenharmony_ci	u16 num_of_avmulti;	/* out: number of avmulti */
37762306a36Sopenharmony_ci	u16 num_of_spdif;	/* out: number of hdmi */
37862306a36Sopenharmony_ci	u16 reserved;
37962306a36Sopenharmony_ci};
38062306a36Sopenharmony_ci
38162306a36Sopenharmony_ci/* backend: get monitor info */
38262306a36Sopenharmony_cistruct ps3av_info_resolution {
38362306a36Sopenharmony_ci	u32 res_bits;
38462306a36Sopenharmony_ci	u32 native;
38562306a36Sopenharmony_ci};
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_cistruct ps3av_info_cs {
38862306a36Sopenharmony_ci	u8 rgb;
38962306a36Sopenharmony_ci	u8 yuv444;
39062306a36Sopenharmony_ci	u8 yuv422;
39162306a36Sopenharmony_ci	u8 reserved;
39262306a36Sopenharmony_ci};
39362306a36Sopenharmony_ci
39462306a36Sopenharmony_cistruct ps3av_info_color {
39562306a36Sopenharmony_ci	u16 red_x;
39662306a36Sopenharmony_ci	u16 red_y;
39762306a36Sopenharmony_ci	u16 green_x;
39862306a36Sopenharmony_ci	u16 green_y;
39962306a36Sopenharmony_ci	u16 blue_x;
40062306a36Sopenharmony_ci	u16 blue_y;
40162306a36Sopenharmony_ci	u16 white_x;
40262306a36Sopenharmony_ci	u16 white_y;
40362306a36Sopenharmony_ci	u32 gamma;
40462306a36Sopenharmony_ci};
40562306a36Sopenharmony_ci
40662306a36Sopenharmony_cistruct ps3av_info_audio {
40762306a36Sopenharmony_ci	u8 type;
40862306a36Sopenharmony_ci	u8 max_num_of_ch;
40962306a36Sopenharmony_ci	u8 fs;
41062306a36Sopenharmony_ci	u8 sbit;
41162306a36Sopenharmony_ci};
41262306a36Sopenharmony_ci
41362306a36Sopenharmony_cistruct ps3av_info_monitor {
41462306a36Sopenharmony_ci	u8 avport;
41562306a36Sopenharmony_ci	u8 monitor_id[10];
41662306a36Sopenharmony_ci	u8 monitor_type;
41762306a36Sopenharmony_ci	u8 monitor_name[16];
41862306a36Sopenharmony_ci	struct ps3av_info_resolution res_60;
41962306a36Sopenharmony_ci	struct ps3av_info_resolution res_50;
42062306a36Sopenharmony_ci	struct ps3av_info_resolution res_other;
42162306a36Sopenharmony_ci	struct ps3av_info_resolution res_vesa;
42262306a36Sopenharmony_ci	struct ps3av_info_cs cs;
42362306a36Sopenharmony_ci	struct ps3av_info_color color;
42462306a36Sopenharmony_ci	u8 supported_ai;
42562306a36Sopenharmony_ci	u8 speaker_info;
42662306a36Sopenharmony_ci	u8 num_of_audio_block;
42762306a36Sopenharmony_ci	struct ps3av_info_audio audio[0];	/* 0 or more audio blocks */
42862306a36Sopenharmony_ci	u8 reserved[169];
42962306a36Sopenharmony_ci} __attribute__ ((packed));
43062306a36Sopenharmony_ci
43162306a36Sopenharmony_cistruct ps3av_pkt_av_get_monitor_info {
43262306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
43362306a36Sopenharmony_ci	u16 avport;		/* in: avport */
43462306a36Sopenharmony_ci	u16 reserved;
43562306a36Sopenharmony_ci	/* recv */
43662306a36Sopenharmony_ci	struct ps3av_info_monitor info;	/* out: monitor info */
43762306a36Sopenharmony_ci};
43862306a36Sopenharmony_ci
43962306a36Sopenharmony_ci/* backend: enable/disable event */
44062306a36Sopenharmony_cistruct ps3av_pkt_av_event {
44162306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
44262306a36Sopenharmony_ci	u32 event_bit;		/* in */
44362306a36Sopenharmony_ci};
44462306a36Sopenharmony_ci
44562306a36Sopenharmony_ci/* backend: video cs param */
44662306a36Sopenharmony_cistruct ps3av_pkt_av_video_cs {
44762306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
44862306a36Sopenharmony_ci	u16 avport;		/* in: avport */
44962306a36Sopenharmony_ci	u16 av_vid;		/* in: video resolution */
45062306a36Sopenharmony_ci	u16 av_cs_out;		/* in: output color space */
45162306a36Sopenharmony_ci	u16 av_cs_in;		/* in: input color space */
45262306a36Sopenharmony_ci	u8 dither;		/* in: dither bit length */
45362306a36Sopenharmony_ci	u8 bitlen_out;		/* in: bit length */
45462306a36Sopenharmony_ci	u8 super_white;		/* in: super white */
45562306a36Sopenharmony_ci	u8 aspect;		/* in: aspect ratio */
45662306a36Sopenharmony_ci};
45762306a36Sopenharmony_ci
45862306a36Sopenharmony_ci/* backend: video mute */
45962306a36Sopenharmony_cistruct ps3av_av_mute {
46062306a36Sopenharmony_ci	u16 avport;		/* in: avport */
46162306a36Sopenharmony_ci	u16 mute;		/* in: mute on/off */
46262306a36Sopenharmony_ci};
46362306a36Sopenharmony_ci
46462306a36Sopenharmony_cistruct ps3av_pkt_av_video_mute {
46562306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
46662306a36Sopenharmony_ci	struct ps3av_av_mute mute[PS3AV_MUTE_PORT_MAX];
46762306a36Sopenharmony_ci};
46862306a36Sopenharmony_ci
46962306a36Sopenharmony_ci/* backend: video disable signal */
47062306a36Sopenharmony_cistruct ps3av_pkt_av_video_disable_sig {
47162306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
47262306a36Sopenharmony_ci	u16 avport;		/* in: avport */
47362306a36Sopenharmony_ci	u16 reserved;
47462306a36Sopenharmony_ci};
47562306a36Sopenharmony_ci
47662306a36Sopenharmony_ci/* backend: audio param */
47762306a36Sopenharmony_cistruct ps3av_audio_info_frame {
47862306a36Sopenharmony_ci	struct pb1_bit {
47962306a36Sopenharmony_ci		u8 ct:4;
48062306a36Sopenharmony_ci		u8 rsv:1;
48162306a36Sopenharmony_ci		u8 cc:3;
48262306a36Sopenharmony_ci	} pb1;
48362306a36Sopenharmony_ci	struct pb2_bit {
48462306a36Sopenharmony_ci		u8 rsv:3;
48562306a36Sopenharmony_ci		u8 sf:3;
48662306a36Sopenharmony_ci		u8 ss:2;
48762306a36Sopenharmony_ci	} pb2;
48862306a36Sopenharmony_ci	u8 pb3;
48962306a36Sopenharmony_ci	u8 pb4;
49062306a36Sopenharmony_ci	struct pb5_bit {
49162306a36Sopenharmony_ci		u8 dm:1;
49262306a36Sopenharmony_ci		u8 lsv:4;
49362306a36Sopenharmony_ci		u8 rsv:3;
49462306a36Sopenharmony_ci	} pb5;
49562306a36Sopenharmony_ci};
49662306a36Sopenharmony_ci
49762306a36Sopenharmony_cistruct ps3av_pkt_av_audio_param {
49862306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
49962306a36Sopenharmony_ci	u16 avport;		/* in: avport */
50062306a36Sopenharmony_ci	u16 reserved;
50162306a36Sopenharmony_ci	u8 mclk;		/* in: audio mclk */
50262306a36Sopenharmony_ci	u8 ns[3];		/* in: audio ns val */
50362306a36Sopenharmony_ci	u8 enable;		/* in: audio enable */
50462306a36Sopenharmony_ci	u8 swaplr;		/* in: audio swap */
50562306a36Sopenharmony_ci	u8 fifomap;		/* in: audio fifomap */
50662306a36Sopenharmony_ci	u8 inputctrl;		/* in: audio input ctrl */
50762306a36Sopenharmony_ci	u8 inputlen;		/* in: sample bit size */
50862306a36Sopenharmony_ci	u8 layout;		/* in: speaker layout param */
50962306a36Sopenharmony_ci	struct ps3av_audio_info_frame info;	/* in: info */
51062306a36Sopenharmony_ci	u8 chstat[5];		/* in: ch stat */
51162306a36Sopenharmony_ci};
51262306a36Sopenharmony_ci
51362306a36Sopenharmony_ci/* backend: audio_mute */
51462306a36Sopenharmony_cistruct ps3av_pkt_av_audio_mute {
51562306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
51662306a36Sopenharmony_ci	struct ps3av_av_mute mute[PS3AV_MUTE_PORT_MAX];
51762306a36Sopenharmony_ci};
51862306a36Sopenharmony_ci
51962306a36Sopenharmony_ci/* backend: hdmi_mode */
52062306a36Sopenharmony_cistruct ps3av_pkt_av_hdmi_mode {
52162306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
52262306a36Sopenharmony_ci	u8 mode;		/* in: hdmi_mode */
52362306a36Sopenharmony_ci	u8 reserved0;
52462306a36Sopenharmony_ci	u8 reserved1;
52562306a36Sopenharmony_ci	u8 reserved2;
52662306a36Sopenharmony_ci};
52762306a36Sopenharmony_ci
52862306a36Sopenharmony_ci/* backend: tv_mute */
52962306a36Sopenharmony_cistruct ps3av_pkt_av_tv_mute {
53062306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
53162306a36Sopenharmony_ci	u16 avport;		/* in: avport HDMI only */
53262306a36Sopenharmony_ci	u16 mute;		/* in: mute */
53362306a36Sopenharmony_ci};
53462306a36Sopenharmony_ci
53562306a36Sopenharmony_ci/* video: initialize */
53662306a36Sopenharmony_cistruct ps3av_pkt_video_init {
53762306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
53862306a36Sopenharmony_ci	/* recv */
53962306a36Sopenharmony_ci	u32 reserved;
54062306a36Sopenharmony_ci};
54162306a36Sopenharmony_ci
54262306a36Sopenharmony_ci/* video: mode setting */
54362306a36Sopenharmony_cistruct ps3av_pkt_video_mode {
54462306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
54562306a36Sopenharmony_ci	u32 video_head;		/* in: head */
54662306a36Sopenharmony_ci	u32 reserved;
54762306a36Sopenharmony_ci	u32 video_vid;		/* in: video resolution */
54862306a36Sopenharmony_ci	u16 reserved1;
54962306a36Sopenharmony_ci	u16 width;		/* in: width in pixel */
55062306a36Sopenharmony_ci	u16 reserved2;
55162306a36Sopenharmony_ci	u16 height;		/* in: height in pixel */
55262306a36Sopenharmony_ci	u32 pitch;		/* in: line size in byte */
55362306a36Sopenharmony_ci	u32 video_out_format;	/* in: out format */
55462306a36Sopenharmony_ci	u32 video_format;	/* in: input frame buffer format */
55562306a36Sopenharmony_ci	u8 reserved3;
55662306a36Sopenharmony_ci	u8 video_cl_cnv;	/* in: color conversion */
55762306a36Sopenharmony_ci	u16 video_order;	/* in: input RGB order */
55862306a36Sopenharmony_ci	u32 reserved4;
55962306a36Sopenharmony_ci};
56062306a36Sopenharmony_ci
56162306a36Sopenharmony_ci/* video: format */
56262306a36Sopenharmony_cistruct ps3av_pkt_video_format {
56362306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
56462306a36Sopenharmony_ci	u32 video_head;		/* in: head */
56562306a36Sopenharmony_ci	u32 video_format;	/* in: frame buffer format */
56662306a36Sopenharmony_ci	u8 reserved;
56762306a36Sopenharmony_ci	u8 video_cl_cnv;	/* in: color conversion */
56862306a36Sopenharmony_ci	u16 video_order;	/* in: input RGB order */
56962306a36Sopenharmony_ci};
57062306a36Sopenharmony_ci
57162306a36Sopenharmony_ci/* video: pitch */
57262306a36Sopenharmony_cistruct ps3av_pkt_video_pitch {
57362306a36Sopenharmony_ci	u16 version;
57462306a36Sopenharmony_ci	u16 size;		/* size of command packet */
57562306a36Sopenharmony_ci	u32 cid;		/* command id */
57662306a36Sopenharmony_ci	u32 video_head;		/* in: head */
57762306a36Sopenharmony_ci	u32 pitch;		/* in: line size in byte */
57862306a36Sopenharmony_ci};
57962306a36Sopenharmony_ci
58062306a36Sopenharmony_ci/* audio: initialize */
58162306a36Sopenharmony_cistruct ps3av_pkt_audio_init {
58262306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
58362306a36Sopenharmony_ci	/* recv */
58462306a36Sopenharmony_ci	u32 reserved;
58562306a36Sopenharmony_ci};
58662306a36Sopenharmony_ci
58762306a36Sopenharmony_ci/* audio: mode setting */
58862306a36Sopenharmony_cistruct ps3av_pkt_audio_mode {
58962306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
59062306a36Sopenharmony_ci	u8 avport;		/* in: avport */
59162306a36Sopenharmony_ci	u8 reserved0[3];
59262306a36Sopenharmony_ci	u32 mask;		/* in: mask */
59362306a36Sopenharmony_ci	u32 audio_num_of_ch;	/* in: number of ch */
59462306a36Sopenharmony_ci	u32 audio_fs;		/* in: sampling freq */
59562306a36Sopenharmony_ci	u32 audio_word_bits;	/* in: sample bit size */
59662306a36Sopenharmony_ci	u32 audio_format;	/* in: audio output format */
59762306a36Sopenharmony_ci	u32 audio_source;	/* in: audio source */
59862306a36Sopenharmony_ci	u8 audio_enable[4];	/* in: audio enable */
59962306a36Sopenharmony_ci	u8 audio_swap[4];	/* in: audio swap */
60062306a36Sopenharmony_ci	u8 audio_map[4];	/* in: audio map */
60162306a36Sopenharmony_ci	u32 audio_layout;	/* in: speaker layout */
60262306a36Sopenharmony_ci	u32 audio_downmix;	/* in: audio downmix permission */
60362306a36Sopenharmony_ci	u32 audio_downmix_level;
60462306a36Sopenharmony_ci	u8 audio_cs_info[8];	/* in: IEC channel status */
60562306a36Sopenharmony_ci};
60662306a36Sopenharmony_ci
60762306a36Sopenharmony_ci/* audio: mute */
60862306a36Sopenharmony_cistruct ps3av_audio_mute {
60962306a36Sopenharmony_ci	u8 avport;		/* in: opt_port optical */
61062306a36Sopenharmony_ci	u8 reserved[3];
61162306a36Sopenharmony_ci	u32 mute;		/* in: mute */
61262306a36Sopenharmony_ci};
61362306a36Sopenharmony_ci
61462306a36Sopenharmony_cistruct ps3av_pkt_audio_mute {
61562306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
61662306a36Sopenharmony_ci	struct ps3av_audio_mute mute[PS3AV_OPT_PORT_MAX];
61762306a36Sopenharmony_ci};
61862306a36Sopenharmony_ci
61962306a36Sopenharmony_ci/* audio: active/inactive */
62062306a36Sopenharmony_cistruct ps3av_pkt_audio_active {
62162306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
62262306a36Sopenharmony_ci	u32 audio_port;		/* in: audio active/inactive port */
62362306a36Sopenharmony_ci};
62462306a36Sopenharmony_ci
62562306a36Sopenharmony_ci/* audio: SPDIF user bit */
62662306a36Sopenharmony_cistruct ps3av_pkt_audio_spdif_bit {
62762306a36Sopenharmony_ci	u16 version;
62862306a36Sopenharmony_ci	u16 size;		/* size of command packet */
62962306a36Sopenharmony_ci	u32 cid;		/* command id */
63062306a36Sopenharmony_ci	u8 avport;		/* in: avport SPDIF only */
63162306a36Sopenharmony_ci	u8 reserved[3];
63262306a36Sopenharmony_ci	u32 audio_port;		/* in: SPDIF only */
63362306a36Sopenharmony_ci	u32 spdif_bit_data[12];	/* in: user bit data */
63462306a36Sopenharmony_ci};
63562306a36Sopenharmony_ci
63662306a36Sopenharmony_ci/* audio: audio control */
63762306a36Sopenharmony_cistruct ps3av_pkt_audio_ctrl {
63862306a36Sopenharmony_ci	u16 version;
63962306a36Sopenharmony_ci	u16 size;		/* size of command packet */
64062306a36Sopenharmony_ci	u32 cid;		/* command id */
64162306a36Sopenharmony_ci	u32 audio_ctrl_id;	/* in: control id */
64262306a36Sopenharmony_ci	u32 audio_ctrl_data[4];	/* in: control data */
64362306a36Sopenharmony_ci};
64462306a36Sopenharmony_ci
64562306a36Sopenharmony_ci/* avb:param */
64662306a36Sopenharmony_ci#define PS3AV_PKT_AVB_PARAM_MAX_BUF_SIZE	\
64762306a36Sopenharmony_ci	(PS3AV_AVB_NUM_VIDEO*sizeof(struct ps3av_pkt_video_mode) + \
64862306a36Sopenharmony_ci	 PS3AV_AVB_NUM_AUDIO*sizeof(struct ps3av_pkt_audio_mode) + \
64962306a36Sopenharmony_ci	 PS3AV_AVB_NUM_AV_VIDEO*sizeof(struct ps3av_pkt_av_video_cs) + \
65062306a36Sopenharmony_ci	 PS3AV_AVB_NUM_AV_AUDIO*sizeof(struct ps3av_pkt_av_audio_param))
65162306a36Sopenharmony_ci
65262306a36Sopenharmony_cistruct ps3av_pkt_avb_param {
65362306a36Sopenharmony_ci	struct ps3av_send_hdr send_hdr;
65462306a36Sopenharmony_ci	u16 num_of_video_pkt;
65562306a36Sopenharmony_ci	u16 num_of_audio_pkt;
65662306a36Sopenharmony_ci	u16 num_of_av_video_pkt;
65762306a36Sopenharmony_ci	u16 num_of_av_audio_pkt;
65862306a36Sopenharmony_ci	/*
65962306a36Sopenharmony_ci	 * The actual buffer layout depends on the fields above:
66062306a36Sopenharmony_ci	 *
66162306a36Sopenharmony_ci	 * struct ps3av_pkt_video_mode video[num_of_video_pkt];
66262306a36Sopenharmony_ci	 * struct ps3av_pkt_audio_mode audio[num_of_audio_pkt];
66362306a36Sopenharmony_ci	 * struct ps3av_pkt_av_video_cs av_video[num_of_av_video_pkt];
66462306a36Sopenharmony_ci	 * struct ps3av_pkt_av_audio_param av_audio[num_of_av_audio_pkt];
66562306a36Sopenharmony_ci	 */
66662306a36Sopenharmony_ci	u8 buf[PS3AV_PKT_AVB_PARAM_MAX_BUF_SIZE];
66762306a36Sopenharmony_ci};
66862306a36Sopenharmony_ci
66962306a36Sopenharmony_ci/* channel status */
67062306a36Sopenharmony_ciextern u8 ps3av_mode_cs_info[];
67162306a36Sopenharmony_ci
67262306a36Sopenharmony_ci/** command status **/
67362306a36Sopenharmony_ci#define PS3AV_STATUS_SUCCESS			0x0000	/* success */
67462306a36Sopenharmony_ci#define PS3AV_STATUS_RECEIVE_VUART_ERROR	0x0001	/* receive vuart error */
67562306a36Sopenharmony_ci#define PS3AV_STATUS_SYSCON_COMMUNICATE_FAIL	0x0002	/* syscon communication error */
67662306a36Sopenharmony_ci#define PS3AV_STATUS_INVALID_COMMAND		0x0003	/* obsolete invalid CID */
67762306a36Sopenharmony_ci#define PS3AV_STATUS_INVALID_PORT		0x0004	/* invalid port number */
67862306a36Sopenharmony_ci#define PS3AV_STATUS_INVALID_VID		0x0005	/* invalid video format */
67962306a36Sopenharmony_ci#define PS3AV_STATUS_INVALID_COLOR_SPACE	0x0006	/* invalid video colose space */
68062306a36Sopenharmony_ci#define PS3AV_STATUS_INVALID_FS			0x0007	/* invalid audio sampling freq */
68162306a36Sopenharmony_ci#define PS3AV_STATUS_INVALID_AUDIO_CH		0x0008	/* invalid audio channel number */
68262306a36Sopenharmony_ci#define PS3AV_STATUS_UNSUPPORTED_VERSION	0x0009	/* version mismatch  */
68362306a36Sopenharmony_ci#define PS3AV_STATUS_INVALID_SAMPLE_SIZE	0x000a	/* invalid audio sample bit size */
68462306a36Sopenharmony_ci#define PS3AV_STATUS_FAILURE			0x000b	/* other failures */
68562306a36Sopenharmony_ci#define PS3AV_STATUS_UNSUPPORTED_COMMAND	0x000c	/* unsupported cid */
68662306a36Sopenharmony_ci#define PS3AV_STATUS_BUFFER_OVERFLOW		0x000d	/* write buffer overflow */
68762306a36Sopenharmony_ci#define PS3AV_STATUS_INVALID_VIDEO_PARAM	0x000e	/* invalid video param */
68862306a36Sopenharmony_ci#define PS3AV_STATUS_NO_SEL			0x000f	/* not exist selector */
68962306a36Sopenharmony_ci#define PS3AV_STATUS_INVALID_AV_PARAM		0x0010	/* invalid backend param */
69062306a36Sopenharmony_ci#define PS3AV_STATUS_INVALID_AUDIO_PARAM	0x0011	/* invalid audio param */
69162306a36Sopenharmony_ci#define PS3AV_STATUS_UNSUPPORTED_HDMI_MODE	0x0012	/* unsupported hdmi mode */
69262306a36Sopenharmony_ci#define PS3AV_STATUS_NO_SYNC_HEAD		0x0013	/* sync head failed */
69362306a36Sopenharmony_ci
69462306a36Sopenharmony_ciextern void ps3av_set_hdr(u32, u16, struct ps3av_send_hdr *);
69562306a36Sopenharmony_ciextern int ps3av_do_pkt(u32, u16, size_t, struct ps3av_send_hdr *);
69662306a36Sopenharmony_ci
69762306a36Sopenharmony_ciextern int ps3av_cmd_init(void);
69862306a36Sopenharmony_ciextern int ps3av_cmd_fin(void);
69962306a36Sopenharmony_ciextern int ps3av_cmd_av_video_mute(int, u32 *, u32);
70062306a36Sopenharmony_ciextern int ps3av_cmd_av_video_disable_sig(u32);
70162306a36Sopenharmony_ciextern int ps3av_cmd_av_tv_mute(u32, u32);
70262306a36Sopenharmony_ciextern int ps3av_cmd_enable_event(void);
70362306a36Sopenharmony_ciextern int ps3av_cmd_av_hdmi_mode(u8);
70462306a36Sopenharmony_ciextern u32 ps3av_cmd_set_av_video_cs(void *, u32, int, int, int, u32);
70562306a36Sopenharmony_ciextern u32 ps3av_cmd_set_video_mode(void *, u32, int, int, u32);
70662306a36Sopenharmony_ciextern int ps3av_cmd_video_format_black(u32, u32, u32);
70762306a36Sopenharmony_ciextern int ps3av_cmd_av_audio_mute(int, u32 *, u32);
70862306a36Sopenharmony_ciextern u32 ps3av_cmd_set_av_audio_param(void *, u32,
70962306a36Sopenharmony_ci					const struct ps3av_pkt_audio_mode *,
71062306a36Sopenharmony_ci					u32);
71162306a36Sopenharmony_ciextern void ps3av_cmd_set_audio_mode(struct ps3av_pkt_audio_mode *, u32, u32,
71262306a36Sopenharmony_ci				     u32, u32, u32, u32);
71362306a36Sopenharmony_ciextern int ps3av_cmd_audio_mode(struct ps3av_pkt_audio_mode *);
71462306a36Sopenharmony_ciextern int ps3av_cmd_audio_mute(int, u32 *, u32);
71562306a36Sopenharmony_ciextern int ps3av_cmd_audio_active(int, u32);
71662306a36Sopenharmony_ciextern int ps3av_cmd_avb_param(struct ps3av_pkt_avb_param *, u32);
71762306a36Sopenharmony_ciextern int ps3av_cmd_av_get_hw_conf(struct ps3av_pkt_av_get_hw_conf *);
71862306a36Sopenharmony_ciextern int ps3av_cmd_video_get_monitor_info(struct ps3av_pkt_av_get_monitor_info *,
71962306a36Sopenharmony_ci					    u32);
72062306a36Sopenharmony_ci
72162306a36Sopenharmony_ciextern int ps3av_set_video_mode(int);
72262306a36Sopenharmony_ciextern int ps3av_set_audio_mode(u32, u32, u32, u32, u32);
72362306a36Sopenharmony_ciextern int ps3av_get_auto_mode(void);
72462306a36Sopenharmony_ciextern int ps3av_get_mode(void);
72562306a36Sopenharmony_ciextern int ps3av_video_mode2res(u32, u32 *, u32 *);
72662306a36Sopenharmony_ciextern int ps3av_video_mute(int);
72762306a36Sopenharmony_ciextern int ps3av_audio_mute(int);
72862306a36Sopenharmony_ciextern int ps3av_audio_mute_analog(int);
72962306a36Sopenharmony_ci#endif	/* _ASM_POWERPC_PS3AV_H_ */
730