diff options
author | Geoff Levand <geoffrey.levand@am.sony.com> | 2007-06-15 18:05:01 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-06-28 05:16:42 -0400 |
commit | 13a5e30cf7407415387b5592b15ef4b352d28283 (patch) | |
tree | 8db7937b82960d0f59f3bbdf4715b347fc7a04d1 /drivers/ps3/ps3av_cmd.c | |
parent | 66c63b84b23d39ce191a18833b5a769370114ec9 (diff) |
[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>
Diffstat (limited to 'drivers/ps3/ps3av_cmd.c')
-rw-r--r-- | drivers/ps3/ps3av_cmd.c | 35 |
1 files changed, 2 insertions, 33 deletions
diff --git a/drivers/ps3/ps3av_cmd.c b/drivers/ps3/ps3av_cmd.c index 7c4fb264dda2..f72f5ddf18e4 100644 --- a/drivers/ps3/ps3av_cmd.c +++ b/drivers/ps3/ps3av_cmd.c | |||
@@ -868,7 +868,7 @@ int ps3av_cmd_avb_param(struct ps3av_pkt_avb_param *avb, u32 send_len) | |||
868 | { | 868 | { |
869 | int res; | 869 | int res; |
870 | 870 | ||
871 | ps3fb_flip_ctl(0); /* flip off */ | 871 | ps3av_flip_ctl(0); /* flip off */ |
872 | 872 | ||
873 | /* avb packet */ | 873 | /* avb packet */ |
874 | res = ps3av_do_pkt(PS3AV_CID_AVB_PARAM, send_len, sizeof(*avb), | 874 | 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) | |||
882 | res); | 882 | res); |
883 | 883 | ||
884 | out: | 884 | out: |
885 | ps3fb_flip_ctl(1); /* flip on */ | 885 | ps3av_flip_ctl(1); /* flip on */ |
886 | return res; | 886 | return res; |
887 | } | 887 | } |
888 | 888 | ||
@@ -1003,34 +1003,3 @@ void ps3av_cmd_av_monitor_info_dump(const struct ps3av_pkt_av_get_monitor_info * | |||
1003 | | PS3AV_CMD_AV_LAYOUT_176 \ | 1003 | | PS3AV_CMD_AV_LAYOUT_176 \ |
1004 | | PS3AV_CMD_AV_LAYOUT_192) | 1004 | | PS3AV_CMD_AV_LAYOUT_192) |
1005 | 1005 | ||
1006 | /************************* vuart ***************************/ | ||
1007 | |||
1008 | #define POLLING_INTERVAL 25 /* in msec */ | ||
1009 | |||
1010 | int ps3av_vuart_write(struct ps3_vuart_port_device *dev, const void *buf, | ||
1011 | unsigned long size) | ||
1012 | { | ||
1013 | int error = ps3_vuart_write(dev, buf, size); | ||
1014 | return error ? error : size; | ||
1015 | } | ||
1016 | |||
1017 | int ps3av_vuart_read(struct ps3_vuart_port_device *dev, void *buf, | ||
1018 | unsigned long size, int timeout) | ||
1019 | { | ||
1020 | int error; | ||
1021 | int loopcnt = 0; | ||
1022 | |||
1023 | timeout = (timeout + POLLING_INTERVAL - 1) / POLLING_INTERVAL; | ||
1024 | while (loopcnt++ <= timeout) { | ||
1025 | error = ps3_vuart_read(dev, buf, size); | ||
1026 | if (!error) | ||
1027 | return size; | ||
1028 | if (error != -EAGAIN) { | ||
1029 | printk(KERN_ERR "%s: ps3_vuart_read failed %d\n", | ||
1030 | __func__, error); | ||
1031 | return error; | ||
1032 | } | ||
1033 | msleep(POLLING_INTERVAL); | ||
1034 | } | ||
1035 | return -EWOULDBLOCK; | ||
1036 | } | ||