]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/ps3/ps3av_cmd.c
[SCSI] export busy state via q->lld_busy_fn()
[linux-2.6-omap-h63xx.git] / drivers / ps3 / ps3av_cmd.c
index 0145ea173c42579067b1654404dff801f5edadee..7f880c26122f36a11b7390a14587693f10898229 100644 (file)
@@ -143,6 +143,14 @@ static u32 ps3av_vid_video2av(int vid)
        return PS3AV_CMD_AV_VID_480P;
 }
 
+static int ps3av_hdmi_range(void)
+{
+       if (ps3_compare_firmware_version(1, 8, 0) < 0)
+               return 0;
+       else
+               return 1; /* supported */
+}
+
 int ps3av_cmd_init(void)
 {
        int res;
@@ -350,6 +358,10 @@ u32 ps3av_cmd_set_av_video_cs(void *p, u32 avport, int video_vid, int cs_out,
        /* should be same as video_mode.video_cs_out */
        av_video_cs->av_cs_in = ps3av_cs_video2av(PS3AV_CMD_VIDEO_CS_RGB_8);
        av_video_cs->bitlen_out = ps3av_cs_video2av_bitlen(cs_out);
+       if ((id & PS3AV_MODE_WHITE) && ps3av_hdmi_range())
+               av_video_cs->super_white = PS3AV_CMD_AV_SUPER_WHITE_ON;
+       else /* default off */
+               av_video_cs->super_white = PS3AV_CMD_AV_SUPER_WHITE_OFF;
        av_video_cs->aspect = aspect;
        if (id & PS3AV_MODE_DITHER) {
                av_video_cs->dither = PS3AV_CMD_AV_DITHER_ON
@@ -392,6 +404,10 @@ u32 ps3av_cmd_set_video_mode(void *p, u32 head, int video_vid, int video_fmt,
        video_mode->pitch = video_mode->width * 4;      /* line_length */
        video_mode->video_out_format = PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT;
        video_mode->video_format = ps3av_video_fmt_table[video_fmt].format;
+       if ((id & PS3AV_MODE_COLOR) && ps3av_hdmi_range())
+               video_mode->video_cl_cnv = PS3AV_CMD_VIDEO_CL_CNV_DISABLE_LUT;
+       else /* default enable */
+               video_mode->video_cl_cnv = PS3AV_CMD_VIDEO_CL_CNV_ENABLE_LUT;
        video_mode->video_order = ps3av_video_fmt_table[video_fmt].order;
 
        pr_debug("%s: video_mode:vid:%x width:%d height:%d pitch:%d out_format:%d format:%x order:%x\n",
@@ -496,7 +512,6 @@ static const u32 ps3av_ns_table[][5] = {
 static void ps3av_cnv_ns(u8 *ns, u32 fs, u32 video_vid)
 {
        u32 av_vid, ns_val;
-       u8 *p = ns;
        int d;
 
        d = ns_val = 0;
@@ -535,24 +550,22 @@ static void ps3av_cnv_ns(u8 *ns, u32 fs, u32 video_vid)
        else
                ns_val = ps3av_ns_table[PS3AV_CMD_AUDIO_FS_44K-BASE][d];
 
-       *p++ = ns_val & 0x000000FF;
-       *p++ = (ns_val & 0x0000FF00) >> 8;
-       *p = (ns_val & 0x00FF0000) >> 16;
+       *ns++ = ns_val & 0x000000FF;
+       *ns++ = (ns_val & 0x0000FF00) >> 8;
+       *ns = (ns_val & 0x00FF0000) >> 16;
 }
 
 #undef BASE
 
 static u8 ps3av_cnv_enable(u32 source, const u8 *enable)
 {
-       const u8 *p;
        u8 ret = 0;
 
        if (source == PS3AV_CMD_AUDIO_SOURCE_SPDIF) {
                ret = 0x03;
        } else if (source == PS3AV_CMD_AUDIO_SOURCE_SERIAL) {
-               p = enable;
-               ret = ((p[0] << 4) + (p[1] << 5) + (p[2] << 6) + (p[3] << 7)) |
-                     0x01;
+               ret = ((enable[0] << 4) + (enable[1] << 5) + (enable[2] << 6) +
+                      (enable[3] << 7)) | 0x01;
        } else
                printk(KERN_ERR "%s failed, source:%x\n", __func__, source);
        return ret;
@@ -560,11 +573,9 @@ static u8 ps3av_cnv_enable(u32 source, const u8 *enable)
 
 static u8 ps3av_cnv_fifomap(const u8 *map)
 {
-       const u8 *p;
        u8 ret = 0;
 
-       p = map;
-       ret = p[0] + (p[1] << 2) + (p[2] << 4) + (p[3] << 6);
+       ret = map[0] + (map[1] << 2) + (map[2] << 4) + (map[3] << 6);
        return ret;
 }
 
@@ -852,7 +863,7 @@ int ps3av_cmd_avb_param(struct ps3av_pkt_avb_param *avb, u32 send_len)
 {
        int res;
 
-       ps3fb_flip_ctl(0);      /* flip off */
+       ps3av_flip_ctl(0);      /* flip off */
 
        /* avb packet */
        res = ps3av_do_pkt(PS3AV_CID_AVB_PARAM, send_len, sizeof(*avb),
@@ -866,7 +877,7 @@ int ps3av_cmd_avb_param(struct ps3av_pkt_avb_param *avb, u32 send_len)
                         res);
 
       out:
-       ps3fb_flip_ctl(1);      /* flip on */
+       ps3av_flip_ctl(1);      /* flip on */
        return res;
 }
 
@@ -911,72 +922,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)
@@ -987,34 +932,3 @@ void ps3av_cmd_av_monitor_info_dump(const struct ps3av_pkt_av_get_monitor_info *
                | PS3AV_CMD_AV_LAYOUT_176 \
                | PS3AV_CMD_AV_LAYOUT_192)
 
-/************************* vuart ***************************/
-
-#define POLLING_INTERVAL  25   /* in msec */
-
-int ps3av_vuart_write(struct ps3_vuart_port_device *dev, const void *buf,
-                     unsigned long size)
-{
-       int error = ps3_vuart_write(dev, buf, size);
-       return error ? error : size;
-}
-
-int ps3av_vuart_read(struct ps3_vuart_port_device *dev, void *buf,
-                    unsigned long size, int timeout)
-{
-       int error;
-       int loopcnt = 0;
-
-       timeout = (timeout + POLLING_INTERVAL - 1) / POLLING_INTERVAL;
-       while (loopcnt++ <= timeout) {
-               error = ps3_vuart_read(dev, buf, size);
-               if (!error)
-                       return size;
-               if (error != -EAGAIN) {
-                       printk(KERN_ERR "%s: ps3_vuart_read failed %d\n",
-                              __func__, error);
-                       return error;
-               }
-               msleep(POLLING_INTERVAL);
-       }
-       return -EWOULDBLOCK;
-}