nfsd4: reshuffle lease-setting code to allow reuse
[safe/jmp/linux-2.6] / drivers / ps3 / ps3av_cmd.c
index 83d7e8f..f555fed 100644 (file)
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/delay.h>
+
 #include <asm/ps3av.h>
-#include <asm/ps3fb.h>
 #include <asm/ps3.h>
+#include <asm/ps3gpu.h>
 
 #include "vuart.h"
 
@@ -660,9 +661,10 @@ u32 ps3av_cmd_set_av_audio_param(void *p, u32 port,
 }
 
 /* default cs val */
-static const u8 ps3av_mode_cs_info[] = {
+u8 ps3av_mode_cs_info[] = {
        0x00, 0x09, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00
 };
+EXPORT_SYMBOL_GPL(ps3av_mode_cs_info);
 
 #define CS_44  0x00
 #define CS_48  0x02
@@ -677,7 +679,7 @@ void ps3av_cmd_set_audio_mode(struct ps3av_pkt_audio_mode *audio, u32 avport,
                              u32 ch, u32 fs, u32 word_bits, u32 format,
                              u32 source)
 {
-       int spdif_through, spdif_bitstream;
+       int spdif_through;
        int i;
 
        if (!(ch | fs | format | word_bits | source)) {
@@ -687,7 +689,6 @@ void ps3av_cmd_set_audio_mode(struct ps3av_pkt_audio_mode *audio, u32 avport,
                format = PS3AV_CMD_AUDIO_FORMAT_PCM;
                source = PS3AV_CMD_AUDIO_SOURCE_SERIAL;
        }
-       spdif_through = spdif_bitstream = 0;    /* XXX not supported */
 
        /* audio mode */
        memset(audio, 0, sizeof(*audio));
@@ -777,16 +778,17 @@ void ps3av_cmd_set_audio_mode(struct ps3av_pkt_audio_mode *audio, u32 avport,
                break;
        }
 
+       /* non-audio bit */
+       spdif_through = audio->audio_cs_info[0] & 0x02;
+
        /* pass through setting */
        if (spdif_through &&
            (avport == PS3AV_CMD_AVPORT_SPDIF_0 ||
-            avport == PS3AV_CMD_AVPORT_SPDIF_1)) {
+            avport == PS3AV_CMD_AVPORT_SPDIF_1 ||
+            avport == PS3AV_CMD_AVPORT_HDMI_0 ||
+            avport == PS3AV_CMD_AVPORT_HDMI_1)) {
                audio->audio_word_bits = PS3AV_CMD_AUDIO_WORD_BITS_16;
-               audio->audio_source = PS3AV_CMD_AUDIO_SOURCE_SPDIF;
-               if (spdif_bitstream) {
-                       audio->audio_format = PS3AV_CMD_AUDIO_FORMAT_BITSTREAM;
-                       audio->audio_cs_info[0] |= CS_BIT;
-               }
+               audio->audio_format = PS3AV_CMD_AUDIO_FORMAT_BITSTREAM;
        }
 }
 
@@ -863,7 +865,7 @@ int ps3av_cmd_avb_param(struct ps3av_pkt_avb_param *avb, u32 send_len)
 {
        int res;
 
-       ps3av_flip_ctl(0);      /* flip off */
+       mutex_lock(&ps3_gpu_mutex);
 
        /* avb packet */
        res = ps3av_do_pkt(PS3AV_CID_AVB_PARAM, send_len, sizeof(*avb),
@@ -877,7 +879,7 @@ int ps3av_cmd_avb_param(struct ps3av_pkt_avb_param *avb, u32 send_len)
                         res);
 
       out:
-       ps3av_flip_ctl(1);      /* flip on */
+       mutex_unlock(&ps3_gpu_mutex);
        return res;
 }
 
@@ -922,72 +924,6 @@ int ps3av_cmd_video_get_monitor_info(struct ps3av_pkt_av_get_monitor_info *info,
        return res;
 }
 
-#ifdef PS3AV_DEBUG
-void ps3av_cmd_av_hw_conf_dump(const struct ps3av_pkt_av_get_hw_conf *hw_conf)
-{
-       printk("av_h_conf:num of hdmi:%d\n", hw_conf->num_of_hdmi);
-       printk("av_h_conf:num of avmulti:%d\n", hw_conf->num_of_avmulti);
-       printk("av_h_conf:num of spdif:%d\n", hw_conf->num_of_spdif);
-}
-
-void ps3av_cmd_av_monitor_info_dump(const struct ps3av_pkt_av_get_monitor_info *monitor_info)
-{
-       const struct ps3av_info_monitor *info = &monitor_info->info;
-       const struct ps3av_info_audio *audio = info->audio;
-       int i;
-
-       printk("Monitor Info: size%d\n", monitor_info->send_hdr.size);
-
-       printk("avport:%02x\n", info->avport);
-       printk("monitor_id:");
-       for (i = 0; i < 10; i++)
-               printk("%02x ", info->monitor_id[i]);
-       printk("\nmonitor_type:%02x\n", info->monitor_type);
-       printk("monitor_name:");
-       for (i = 0; i < 16; i++)
-               printk("%c", info->monitor_name[i]);
-
-       /* resolution */
-       printk("\nresolution_60: bits:%08x native:%08x\n",
-              info->res_60.res_bits, info->res_60.native);
-       printk("resolution_50: bits:%08x native:%08x\n",
-              info->res_50.res_bits, info->res_50.native);
-       printk("resolution_other: bits:%08x native:%08x\n",
-              info->res_other.res_bits, info->res_other.native);
-       printk("resolution_vesa: bits:%08x native:%08x\n",
-              info->res_vesa.res_bits, info->res_vesa.native);
-
-       /* color space */
-       printk("color space    rgb:%02x\n", info->cs.rgb);
-       printk("color space yuv444:%02x\n", info->cs.yuv444);
-       printk("color space yuv422:%02x\n", info->cs.yuv422);
-
-       /* color info */
-       printk("color info   red:X %04x Y %04x\n",
-              info->color.red_x, info->color.red_y);
-       printk("color info green:X %04x Y %04x\n",
-              info->color.green_x, info->color.green_y);
-       printk("color info  blue:X %04x Y %04x\n",
-              info->color.blue_x, info->color.blue_y);
-       printk("color info white:X %04x Y %04x\n",
-              info->color.white_x, info->color.white_y);
-       printk("color info gamma: %08x\n", info->color.gamma);
-
-       /* other info */
-       printk("supported_AI:%02x\n", info->supported_ai);
-       printk("speaker_info:%02x\n", info->speaker_info);
-       printk("num of audio:%02x\n", info->num_of_audio_block);
-
-       /* audio block */
-       for (i = 0; i < info->num_of_audio_block; i++) {
-               printk("audio[%d] type:%02x max_ch:%02x fs:%02x sbit:%02x\n",
-                      i, audio->type, audio->max_num_of_ch, audio->fs,
-                      audio->sbit);
-               audio++;
-       }
-}
-#endif /* PS3AV_DEBUG */
-
 #define PS3AV_AV_LAYOUT_0 (PS3AV_CMD_AV_LAYOUT_32 \
                | PS3AV_CMD_AV_LAYOUT_44 \
                | PS3AV_CMD_AV_LAYOUT_48)