Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 53307
b: refs/heads/master
c: 5caf5db
h: refs/heads/master
i:
  53305: 2c49b1b
  53303: 7496745
v: v3
  • Loading branch information
Geert Uytterhoeven authored and Linus Torvalds committed May 5, 2007
1 parent f62af85 commit 84f2147
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 19 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: eca28743b74736456bd75e0dabeb7d2df09fc03e
refs/heads/master: 5caf5db887b2bc87d74a78674d8e3e4774fa2a14
30 changes: 14 additions & 16 deletions trunk/drivers/ps3/ps3av.c
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,7 @@ static int ps3av_set_videomode(void)
ps3av_set_av_video_mute(PS3AV_CMD_MUTE_ON);

/* wake up ps3avd to do the actual video mode setting */
up(&ps3av.ping);
queue_work(ps3av.wq, &ps3av.work);

return 0;
}
Expand Down Expand Up @@ -515,18 +515,10 @@ static void ps3av_set_videomode_cont(u32 id, u32 old_id)
ps3av_set_av_video_mute(PS3AV_CMD_MUTE_OFF);
}

static int ps3avd(void *p)
static void ps3avd(struct work_struct *work)
{
struct ps3av *info = p;

daemonize("ps3avd");
while (1) {
down(&info->ping);
ps3av_set_videomode_cont(info->ps3av_mode,
info->ps3av_mode_old);
up(&info->pong);
}
return 0;
ps3av_set_videomode_cont(ps3av.ps3av_mode, ps3av.ps3av_mode_old);
complete(&ps3av.done);
}

static int ps3av_vid2table_id(int vid)
Expand Down Expand Up @@ -725,7 +717,7 @@ int ps3av_set_video_mode(u32 id, int boot)
}

/* set videomode */
down(&ps3av.pong);
wait_for_completion(&ps3av.done);
ps3av.ps3av_mode_old = ps3av.ps3av_mode;
ps3av.ps3av_mode = id;
if (ps3av_set_videomode())
Expand Down Expand Up @@ -881,12 +873,16 @@ static int ps3av_probe(struct ps3_vuart_port_device *dev)
memset(&ps3av, 0, sizeof(ps3av));

init_MUTEX(&ps3av.sem);
init_MUTEX_LOCKED(&ps3av.ping);
init_MUTEX(&ps3av.pong);
mutex_init(&ps3av.mutex);
ps3av.ps3av_mode = 0;
ps3av.dev = dev;
kernel_thread(ps3avd, &ps3av, CLONE_KERNEL);

INIT_WORK(&ps3av.work, ps3avd);
init_completion(&ps3av.done);
complete(&ps3av.done);
ps3av.wq = create_singlethread_workqueue("ps3avd");
if (!ps3av.wq)
return -ENOMEM;

ps3av.available = 1;
switch (ps3_os_area_get_av_multi_out()) {
Expand Down Expand Up @@ -926,6 +922,8 @@ static int ps3av_remove(struct ps3_vuart_port_device *dev)
{
if (ps3av.available) {
ps3av_cmd_fin();
if (ps3av.wq)
destroy_workqueue(ps3av.wq);
ps3av.available = 0;
}

Expand Down
5 changes: 3 additions & 2 deletions trunk/include/asm-powerpc/ps3av.h
Original file line number Diff line number Diff line change
Expand Up @@ -646,8 +646,9 @@ struct ps3av_pkt_avb_param {
struct ps3av {
int available;
struct semaphore sem;
struct semaphore ping;
struct semaphore pong;
struct work_struct work;
struct completion done;
struct workqueue_struct *wq;
struct mutex mutex;
int open_count;
struct ps3_vuart_port_device *dev;
Expand Down

0 comments on commit 84f2147

Please sign in to comment.