[POWERPC] PS3: Rework AV settings driver

Make the PS3 ps3av driver a loadable module.
  - Replace static data with kmalloc()'ed.
      o Allocate struct ps3av dynamically, as it contains data used as vuart
        receive/transmit buffers
      o Move static recv_buf from ps3av_do_pkt() to struct ps3av
  - Move ps3av_vuart_{read,write}() from drivers/ps3/ps3av_cmd.c to
    drivers/ps3/ps3av.c and make them static as they're used in that file only.
  - Make device a PS3 system-bus device.
  - Update copyright formatting.
  - Make two new routines ps3av_register_flip_ctl() and ps3av_flip_ctl() to
    support late binding of the frame buffer flip control routine.

Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
Geoff Levand
2007-06-16 08:05:01 +10:00
committed by Paul Mackerras
parent 66c63b84b2
commit 13a5e30cf7
4 changed files with 222 additions and 228 deletions

View File

@@ -868,7 +868,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),
@@ -882,7 +882,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;
}
@@ -1003,34 +1003,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;
}