diff options
Diffstat (limited to 'drivers/media/video/cx18/cx18-driver.c')
-rw-r--r-- | drivers/media/video/cx18/cx18-driver.c | 29 |
1 files changed, 11 insertions, 18 deletions
diff --git a/drivers/media/video/cx18/cx18-driver.c b/drivers/media/video/cx18/cx18-driver.c index 3f55d47bc4b9..0dd4e0529970 100644 --- a/drivers/media/video/cx18/cx18-driver.c +++ b/drivers/media/video/cx18/cx18-driver.c | |||
@@ -164,16 +164,6 @@ MODULE_LICENSE("GPL"); | |||
164 | 164 | ||
165 | MODULE_VERSION(CX18_VERSION); | 165 | MODULE_VERSION(CX18_VERSION); |
166 | 166 | ||
167 | int cx18_waitq(wait_queue_head_t *waitq) | ||
168 | { | ||
169 | DEFINE_WAIT(wait); | ||
170 | |||
171 | prepare_to_wait(waitq, &wait, TASK_INTERRUPTIBLE); | ||
172 | schedule(); | ||
173 | finish_wait(waitq, &wait); | ||
174 | return signal_pending(current) ? -EINTR : 0; | ||
175 | } | ||
176 | |||
177 | /* Generic utility functions */ | 167 | /* Generic utility functions */ |
178 | int cx18_msleep_timeout(unsigned int msecs, int intr) | 168 | int cx18_msleep_timeout(unsigned int msecs, int intr) |
179 | { | 169 | { |
@@ -220,13 +210,13 @@ static void cx18_process_eeprom(struct cx18 *cx) | |||
220 | 210 | ||
221 | /* Many thanks to Steven Toth from Hauppauge for providing the | 211 | /* Many thanks to Steven Toth from Hauppauge for providing the |
222 | model numbers */ | 212 | model numbers */ |
213 | /* Note: the Samsung memory models cannot be reliably determined | ||
214 | from the model number. Use the cardtype module option if you | ||
215 | have one of these preproduction models. */ | ||
223 | switch (tv.model) { | 216 | switch (tv.model) { |
224 | case 74000 ... 74099: | 217 | case 74000 ... 74999: |
225 | cx->card = cx18_get_card(CX18_CARD_HVR_1600_ESMT); | 218 | cx->card = cx18_get_card(CX18_CARD_HVR_1600_ESMT); |
226 | break; | 219 | break; |
227 | case 74700 ... 74799: | ||
228 | cx->card = cx18_get_card(CX18_CARD_HVR_1600_SAMSUNG); | ||
229 | break; | ||
230 | case 0: | 220 | case 0: |
231 | CX18_ERR("Invalid EEPROM\n"); | 221 | CX18_ERR("Invalid EEPROM\n"); |
232 | return; | 222 | return; |
@@ -548,6 +538,7 @@ static int cx18_setup_pci(struct cx18 *cx, struct pci_dev *dev, | |||
548 | return 0; | 538 | return 0; |
549 | } | 539 | } |
550 | 540 | ||
541 | #ifdef MODULE | ||
551 | static u32 cx18_request_module(struct cx18 *cx, u32 hw, | 542 | static u32 cx18_request_module(struct cx18 *cx, u32 hw, |
552 | const char *name, u32 id) | 543 | const char *name, u32 id) |
553 | { | 544 | { |
@@ -560,12 +551,14 @@ static u32 cx18_request_module(struct cx18 *cx, u32 hw, | |||
560 | CX18_DEBUG_INFO("Loaded module %s\n", name); | 551 | CX18_DEBUG_INFO("Loaded module %s\n", name); |
561 | return hw; | 552 | return hw; |
562 | } | 553 | } |
554 | #endif | ||
563 | 555 | ||
564 | static void cx18_load_and_init_modules(struct cx18 *cx) | 556 | static void cx18_load_and_init_modules(struct cx18 *cx) |
565 | { | 557 | { |
566 | u32 hw = cx->card->hw_all; | 558 | u32 hw = cx->card->hw_all; |
567 | int i; | 559 | int i; |
568 | 560 | ||
561 | #ifdef MODULE | ||
569 | /* load modules */ | 562 | /* load modules */ |
570 | #ifndef CONFIG_MEDIA_TUNER | 563 | #ifndef CONFIG_MEDIA_TUNER |
571 | hw = cx18_request_module(cx, hw, "tuner", CX18_HW_TUNER); | 564 | hw = cx18_request_module(cx, hw, "tuner", CX18_HW_TUNER); |
@@ -573,6 +566,7 @@ static void cx18_load_and_init_modules(struct cx18 *cx) | |||
573 | #ifndef CONFIG_VIDEO_CS5345 | 566 | #ifndef CONFIG_VIDEO_CS5345 |
574 | hw = cx18_request_module(cx, hw, "cs5345", CX18_HW_CS5345); | 567 | hw = cx18_request_module(cx, hw, "cs5345", CX18_HW_CS5345); |
575 | #endif | 568 | #endif |
569 | #endif | ||
576 | 570 | ||
577 | /* check which i2c devices are actually found */ | 571 | /* check which i2c devices are actually found */ |
578 | for (i = 0; i < 32; i++) { | 572 | for (i = 0; i < 32; i++) { |
@@ -801,7 +795,7 @@ static int __devinit cx18_probe(struct pci_dev *dev, | |||
801 | return 0; | 795 | return 0; |
802 | 796 | ||
803 | free_streams: | 797 | free_streams: |
804 | cx18_streams_cleanup(cx); | 798 | cx18_streams_cleanup(cx, 1); |
805 | free_irq: | 799 | free_irq: |
806 | free_irq(cx->dev->irq, (void *)cx); | 800 | free_irq(cx->dev->irq, (void *)cx); |
807 | free_i2c: | 801 | free_i2c: |
@@ -904,14 +898,13 @@ static void cx18_remove(struct pci_dev *pci_dev) | |||
904 | 898 | ||
905 | cx18_halt_firmware(cx); | 899 | cx18_halt_firmware(cx); |
906 | 900 | ||
907 | cx18_streams_cleanup(cx); | 901 | cx18_streams_cleanup(cx, 1); |
908 | 902 | ||
909 | exit_cx18_i2c(cx); | 903 | exit_cx18_i2c(cx); |
910 | 904 | ||
911 | free_irq(cx->dev->irq, (void *)cx); | 905 | free_irq(cx->dev->irq, (void *)cx); |
912 | 906 | ||
913 | if (cx->dev) | 907 | cx18_iounmap(cx); |
914 | cx18_iounmap(cx); | ||
915 | 908 | ||
916 | release_mem_region(cx->base_addr, CX18_MEM_SIZE); | 909 | release_mem_region(cx->base_addr, CX18_MEM_SIZE); |
917 | 910 | ||