]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | Subject: ps3: Add passthru support for non-audio streams |
2 | From: Takashi Iwai tiwai@suse.de Mon Oct 20 08:05:10 2008 +0200 | |
3 | Date: Mon Oct 20 08:05:15 2008 +0200: | |
4 | Git: 64931a4be03dbc49bd50d10d211592cf98b523bb | |
5 | ||
6 | Add support for the channel status bit setting so that non-PCM | |
7 | data stream can be sent (i.e. pass-through) via SPDIF/HDMI. | |
8 | ||
9 | Signed-off-by: Masakazu Mokuno <mokuno@sm.sony.co.jp> | |
10 | Acked-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> | |
11 | Signed-off-by: Takashi Iwai <tiwai@suse.de> | |
12 | Signed-off-by: Stefan Assmann <sassmann@suse.de> | |
13 | ||
14 | diff --git a/arch/powerpc/include/asm/ps3av.h b/arch/powerpc/include/asm/ps3av.h | |
15 | index d30bde2..5aa22cf 100644 | |
16 | --- a/arch/powerpc/include/asm/ps3av.h | |
17 | +++ b/arch/powerpc/include/asm/ps3av.h | |
18 | @@ -678,6 +678,8 @@ struct ps3av_pkt_avb_param { | |
19 | u8 buf[PS3AV_PKT_AVB_PARAM_MAX_BUF_SIZE]; | |
20 | }; | |
21 | ||
22 | +/* channel status */ | |
23 | +extern u8 ps3av_mode_cs_info[]; | |
24 | ||
25 | /** command status **/ | |
26 | #define PS3AV_STATUS_SUCCESS 0x0000 /* success */ | |
27 | diff --git a/drivers/ps3/ps3av_cmd.c b/drivers/ps3/ps3av_cmd.c | |
28 | index 7f880c2..11eb503 100644 | |
29 | --- a/drivers/ps3/ps3av_cmd.c | |
30 | +++ b/drivers/ps3/ps3av_cmd.c | |
31 | @@ -660,9 +660,10 @@ u32 ps3av_cmd_set_av_audio_param(void *p, u32 port, | |
32 | } | |
33 | ||
34 | /* default cs val */ | |
35 | -static const u8 ps3av_mode_cs_info[] = { | |
36 | +u8 ps3av_mode_cs_info[] = { | |
37 | 0x00, 0x09, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00 | |
38 | }; | |
39 | +EXPORT_SYMBOL_GPL(ps3av_mode_cs_info); | |
40 | ||
41 | #define CS_44 0x00 | |
42 | #define CS_48 0x02 | |
43 | @@ -677,7 +678,7 @@ void ps3av_cmd_set_audio_mode(struct ps3av_pkt_audio_mode *audio, u32 avport, | |
44 | u32 ch, u32 fs, u32 word_bits, u32 format, | |
45 | u32 source) | |
46 | { | |
47 | - int spdif_through, spdif_bitstream; | |
48 | + int spdif_through; | |
49 | int i; | |
50 | ||
51 | if (!(ch | fs | format | word_bits | source)) { | |
52 | @@ -687,7 +688,6 @@ void ps3av_cmd_set_audio_mode(struct ps3av_pkt_audio_mode *audio, u32 avport, | |
53 | format = PS3AV_CMD_AUDIO_FORMAT_PCM; | |
54 | source = PS3AV_CMD_AUDIO_SOURCE_SERIAL; | |
55 | } | |
56 | - spdif_through = spdif_bitstream = 0; /* XXX not supported */ | |
57 | ||
58 | /* audio mode */ | |
59 | memset(audio, 0, sizeof(*audio)); | |
60 | @@ -777,16 +777,17 @@ void ps3av_cmd_set_audio_mode(struct ps3av_pkt_audio_mode *audio, u32 avport, | |
61 | break; | |
62 | } | |
63 | ||
64 | + /* non-audio bit */ | |
65 | + spdif_through = audio->audio_cs_info[0] & 0x02; | |
66 | + | |
67 | /* pass through setting */ | |
68 | if (spdif_through && | |
69 | (avport == PS3AV_CMD_AVPORT_SPDIF_0 || | |
70 | - avport == PS3AV_CMD_AVPORT_SPDIF_1)) { | |
71 | + avport == PS3AV_CMD_AVPORT_SPDIF_1 || | |
72 | + avport == PS3AV_CMD_AVPORT_HDMI_0 || | |
73 | + avport == PS3AV_CMD_AVPORT_HDMI_1)) { | |
74 | audio->audio_word_bits = PS3AV_CMD_AUDIO_WORD_BITS_16; | |
75 | - audio->audio_source = PS3AV_CMD_AUDIO_SOURCE_SPDIF; | |
76 | - if (spdif_bitstream) { | |
77 | - audio->audio_format = PS3AV_CMD_AUDIO_FORMAT_BITSTREAM; | |
78 | - audio->audio_cs_info[0] |= CS_BIT; | |
79 | - } | |
80 | + audio->audio_format = PS3AV_CMD_AUDIO_FORMAT_BITSTREAM; | |
81 | } | |
82 | } | |
83 |