Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 124310
b: refs/heads/master
c: 572bfea
h: refs/heads/master
v: v3
  • Loading branch information
Andy Walls authored and Mauro Carvalho Chehab committed Dec 30, 2008
1 parent 98876f5 commit 5c429db
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 24 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: 9af0ef27a06f3e8976b90a4ed4758e25ea0f2df5
refs/heads/master: 572bfea71b0fb2efb36407b4e284c1e7962d4779
33 changes: 12 additions & 21 deletions trunk/drivers/media/video/cx18/cx18-driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,6 @@ struct cx18 *cx18_cards[CX18_MAX_CARDS];
/* Protects cx18_cards_active */
DEFINE_SPINLOCK(cx18_cards_lock);

/* Queue for deferrable IRQ handling work for all cx18 cards in system */
struct workqueue_struct *cx18_work_queue;

/* add your revision and whatnot here */
static struct pci_device_id cx18_pci_tbl[] __devinitdata = {
{PCI_VENDOR_ID_CX, PCI_DEVICE_ID_CX23418,
Expand Down Expand Up @@ -446,6 +443,12 @@ static int __devinit cx18_init_struct1(struct cx18 *cx)

spin_lock_init(&cx->lock);

cx->work_queue = create_singlethread_workqueue(cx->name);
if (cx->work_queue == NULL) {
CX18_ERR("Unable to create work hander thread\n");
return -ENOMEM;
}

for (i = 0; i < CX18_MAX_EPU_WORK_ORDERS; i++) {
cx->epu_work_order[i].cx = cx;
cx->epu_work_order[i].str = cx->epu_debug_str;
Expand Down Expand Up @@ -655,12 +658,9 @@ static int __devinit cx18_probe(struct pci_dev *dev,

/* PCI Device Setup */
retval = cx18_setup_pci(cx, dev, pci_id);
if (retval != 0) {
if (retval == -EIO)
goto free_workqueue;
else if (retval == -ENXIO)
goto free_mem;
}
if (retval != 0)
goto free_workqueue;

/* save cx in the pci struct for later use */
pci_set_drvdata(dev, cx);

Expand Down Expand Up @@ -830,6 +830,7 @@ static int __devinit cx18_probe(struct pci_dev *dev,
free_mem:
release_mem_region(cx->base_addr, CX18_MEM_SIZE);
free_workqueue:
destroy_workqueue(cx->work_queue);
err:
if (retval == 0)
retval = -ENODEV;
Expand Down Expand Up @@ -938,6 +939,8 @@ static void cx18_remove(struct pci_dev *pci_dev)

cx18_cancel_epu_work_orders(cx);

destroy_workqueue(cx->work_queue);

cx18_streams_cleanup(cx, 1);

exit_cx18_i2c(cx);
Expand Down Expand Up @@ -979,17 +982,8 @@ static int module_start(void)
printk(KERN_INFO "cx18: Debug value must be >= 0 and <= 511!\n");
}

cx18_work_queue = create_singlethread_workqueue("cx18");
if (cx18_work_queue == NULL) {
printk(KERN_ERR
"cx18: Unable to create work hander thread\n");
return -ENOMEM;
}

if (pci_register_driver(&cx18_pci_driver)) {
printk(KERN_ERR "cx18: Error detecting PCI card\n");
destroy_workqueue(cx18_work_queue);
cx18_work_queue = NULL;
return -ENODEV;
}
printk(KERN_INFO "cx18: End initialization\n");
Expand All @@ -1002,9 +996,6 @@ static void module_cleanup(void)

pci_unregister_driver(&cx18_pci_driver);

destroy_workqueue(cx18_work_queue);
cx18_work_queue = NULL;

for (i = 0; i < cx18_cards_active; i++) {
if (cx18_cards[i] == NULL)
continue;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/media/video/cx18/cx18-driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,7 @@ struct cx18 {
u32 sw2_irq_mask;
u32 hw2_irq_mask;

struct workqueue_struct *work_queue;
struct cx18_epu_work_order epu_work_order[CX18_MAX_EPU_WORK_ORDERS];
char epu_debug_str[256]; /* CX18_EPU_DEBUG is rare: use shared space */

Expand Down Expand Up @@ -478,7 +479,6 @@ extern struct cx18 *cx18_cards[];
extern int cx18_cards_active;
extern int cx18_first_minor;
extern spinlock_t cx18_cards_lock;
extern struct workqueue_struct *cx18_work_queue;

/*==============Prototypes==================*/

Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/media/video/cx18/cx18-mailbox.c
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ void cx18_api_epu_cmd_irq(struct cx18 *cx, int rpu)
*/
submit = epu_cmd_irq(cx, order);
if (submit > 0) {
queue_work(cx18_work_queue, &order->work);
queue_work(cx->work_queue, &order->work);
}
}

Expand Down

0 comments on commit 5c429db

Please sign in to comment.