Lines 774-798
Link Here
|
774 |
|
774 |
|
775 |
d = device_get_softc(dev); |
775 |
d = device_get_softc(dev); |
776 |
pdev = mixer_get_devt(dev); |
776 |
pdev = mixer_get_devt(dev); |
777 |
if (d == NULL || pdev == NULL || pdev->si_drv1 == NULL) |
777 |
if (d == NULL || pdev == NULL || (m = pdev->si_drv1) == NULL) |
778 |
return EBADF; |
778 |
return EBADF; |
779 |
|
779 |
|
780 |
m = pdev->si_drv1; |
|
|
781 |
KASSERT(m != NULL, ("NULL snd_mixer")); |
780 |
KASSERT(m != NULL, ("NULL snd_mixer")); |
782 |
KASSERT(m->type == MIXER_TYPE_PRIMARY, |
781 |
KASSERT(m->type == MIXER_TYPE_PRIMARY, |
783 |
("%s(): illegal mixer type=%d", __func__, m->type)); |
782 |
("%s(): illegal mixer type=%d", __func__, m->type)); |
784 |
|
783 |
|
785 |
snd_mtxlock(m->lock); |
784 |
d->mixer_dev = NULL; |
786 |
|
|
|
787 |
if (m->busy) { |
788 |
snd_mtxunlock(m->lock); |
789 |
return EBUSY; |
790 |
} |
791 |
|
792 |
/* destroy dev can sleep --hps */ |
793 |
|
794 |
snd_mtxunlock(m->lock); |
795 |
|
796 |
pdev->si_drv1 = NULL; |
785 |
pdev->si_drv1 = NULL; |
797 |
destroy_dev(pdev); |
786 |
destroy_dev(pdev); |
798 |
|
787 |
|
Lines 812-818
Link Here
|
812 |
snd_mtxfree(m->lock); |
801 |
snd_mtxfree(m->lock); |
813 |
kobj_delete((kobj_t)m, M_MIXER); |
802 |
kobj_delete((kobj_t)m, M_MIXER); |
814 |
|
803 |
|
815 |
d->mixer_dev = NULL; |
|
|
816 |
|
804 |
|
817 |
--mixer_count; |
805 |
--mixer_count; |
818 |
|
806 |
|