Author: mmadia Date: 2010-11-07 01:35:40 +0100 (Sun, 07 Nov 2010) New Revision: 39338 Changeset: http://dev.haiku-os.org/changeset/39338 Ticket: http://dev.haiku-os.org/ticket/6798 Modified: haiku/trunk/src/add-ons/kernel/drivers/audio/ice1712/ice1712.c Log: * Initial attempt at updating to utilize (un)reserve_device. * Also unreserve the device on driver uninit. * Improved some TRACE messages Compiles but otherwise untested. Relates to #6798. Modified: haiku/trunk/src/add-ons/kernel/drivers/audio/ice1712/ice1712.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/audio/ice1712/ice1712.c 2010-11-07 00:22:24 UTC (rev 39337) +++ haiku/trunk/src/add-ons/kernel/drivers/audio/ice1712/ice1712.c 2010-11-07 00:35:40 UTC (rev 39338) @@ -77,7 +77,7 @@ pci_info info; memset(cards, 0, sizeof(ice1712) * NUM_CARDS); - TRACE("===init_hardware()===\n"); + TRACE("ice1712: init_hardware()\n"); if (get_module(B_PCI_MODULE_NAME, (module_info **)&pci)) return ENOSYS; @@ -356,9 +356,10 @@ init_driver(void) { int i = 0; + status_t err; num_cards = 0; - TRACE("===init_driver()===\n"); + TRACE("ice1712: init_driver()\n"); if (get_module(B_PCI_MODULE_NAME, (module_info **)&pci)) return ENOSYS; @@ -377,9 +378,26 @@ break; } +#ifdef __HAIKU__ + if ((err = (*pci->reserve_device)(cards[num_cards].info.bus, + cards[num_cards].info.device, cards[num_cards].info.function, + DRIVER_NAME, &cards[num_cards])) < B_OK) { + dprintf("%s: failed to reserve_device(%d, %d, %d,): %s\n", + DRIVER_NAME, cards[num_cards].info.bus, + cards[num_cards].info.device, + cards[num_cards].info.function, strerror(err)); + continue; + } +#endif if (ice1712_setup(&cards[num_cards]) != B_OK) { //Vendor_ID and Device_ID has been modified TRACE("Setup of ice1712 %d failed\n", (int)(num_cards + 1)); +#ifdef __HAIKU__ + (*pci->unreserve_device)(cards[num_cards].info.bus, + cards[num_cards].info.device, + cards[num_cards].info.function, + DRIVER_NAME, &cards[num_cards]); +#endif } else { num_cards++; } @@ -420,6 +438,11 @@ codec_write(ice, AK45xx_RESET_REGISTER, 0x00); save_settings(ice); + +#ifdef __HAIKU__ + (*pci->unreserve_device)(ice->info.bus, ice->info.device, + ice->info.function, DRIVER_NAME, ice); +#endif }