diff options
author | Hans Verkuil <hverkuil@xs4all.nl> | 2009-03-13 12:24:19 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-03-30 11:43:20 -0400 |
commit | afd96668d8491f762e35c16ce65781da820a67fa (patch) | |
tree | 6248b90ae6a523b311d903283374358cea8b73fb | |
parent | 9832d765f82769799ba15ac9d2e8edf8f7de6898 (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.c | 10 | ||||
-rw-r--r-- | drivers/media/video/cx23885/cx23885-dvb.c | 6 |
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 | } |