aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2009-03-13 12:24:19 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-03-30 11:43:20 -0400
commitafd96668d8491f762e35c16ce65781da820a67fa (patch)
tree6248b90ae6a523b311d903283374358cea8b73fb
parent9832d765f82769799ba15ac9d2e8edf8f7de6898 (diff)
V4L/DVB (10987): cx23885: fix crash on non-netup cards
The new support for the CX23885_BOARD_NETUP_DUAL_DVBS2_CI board broke the existing boards. Interrupts for the netup part were enabled and handled without testing whether the current board actually had a netup -> instant and fatal crash. I've added tests to do this only for the CX23885_BOARD_NETUP_DUAL_DVBS2_CI board. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Reviewed-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/cx23885/cx23885-core.c10
-rw-r--r--drivers/media/video/cx23885/cx23885-dvb.c6
2 files changed, 13 insertions, 3 deletions
diff --git a/drivers/media/video/cx23885/cx23885-core.c b/drivers/media/video/cx23885/cx23885-core.c
index 1b401457d42e..d19d453cf62a 100644
--- a/drivers/media/video/cx23885/cx23885-core.c
+++ b/drivers/media/video/cx23885/cx23885-core.c
@@ -1699,7 +1699,8 @@ static irqreturn_t cx23885_irq(int irq, void *dev_id)
1699 PCI_MSK_GPIO1); 1699 PCI_MSK_GPIO1);
1700 } 1700 }
1701 1701
1702 if ((pci_status & PCI_MSK_GPIO0) || (pci_status & PCI_MSK_GPIO1)) 1702 if (cx23885_boards[dev->board].cimax > 0 &&
1703 ((pci_status & PCI_MSK_GPIO0) || (pci_status & PCI_MSK_GPIO1)))
1703 /* handled += cx23885_irq_gpio(dev, pci_status); */ 1704 /* handled += cx23885_irq_gpio(dev, pci_status); */
1704 handled += netup_ci_slot_status(dev, pci_status); 1705 handled += netup_ci_slot_status(dev, pci_status);
1705 1706
@@ -1775,7 +1776,12 @@ static int __devinit cx23885_initdev(struct pci_dev *pci_dev,
1775 } 1776 }
1776 1777
1777 pci_set_drvdata(pci_dev, dev); 1778 pci_set_drvdata(pci_dev, dev);
1778 cx_set(PCI_INT_MSK, 0x01800000); /* for NetUP */ 1779
1780 switch (dev->board) {
1781 case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
1782 cx_set(PCI_INT_MSK, 0x01800000); /* for NetUP */
1783 break;
1784 }
1779 1785
1780 return 0; 1786 return 0;
1781 1787
diff --git a/drivers/media/video/cx23885/cx23885-dvb.c b/drivers/media/video/cx23885/cx23885-dvb.c
index 9a0bc6e84a95..8d731fffad58 100644
--- a/drivers/media/video/cx23885/cx23885-dvb.c
+++ b/drivers/media/video/cx23885/cx23885-dvb.c
@@ -778,7 +778,11 @@ int cx23885_dvb_unregister(struct cx23885_tsport *port)
778 if (fe0->dvb.frontend) 778 if (fe0->dvb.frontend)
779 videobuf_dvb_unregister_bus(&port->frontends); 779 videobuf_dvb_unregister_bus(&port->frontends);
780 780
781 netup_ci_exit(port); 781 switch (port->dev->board) {
782 case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
783 netup_ci_exit(port);
784 break;
785 }
782 786
783 return 0; 787 return 0;
784} 788}