anchor.diff:    ())
   (defclass audio-volume-knob (audio-widget widget-connections-mixin)
     ())
  +(defmethod widget-connection-direction ((widget audio-volume-knob))
  +  (declare (ignore widget))
  +  :undirected)
   (defclass audio-beep-generator (audio-widget)
     ())
   (defclass audio-vendor-defined (audio-widget)
  
positive.code:     (t (format nil "Unknown ~2,'0X" location))))
  
  (defparameter *pin-default-device*
    #("Line Out" "Speaker" "HP Out" "CD" "SPDIF Out" "Digital Other Out" "Modem Line Side" "Modem Handset Side"
      "Line In" "AUX" "Mic In" "Telephony" "SPDIF In" "Digital Other In" "Reserved" "Other"))
  
  (defparameter *pin-connection-type*
    #("Unknown"
      "1/8\" stereo/mono"
      "1/4\" stereo/mono"
      "ATAPI internal"
      "RCA"
      "Optical"
  
negative.code:          (hda (make-hda :pci-device pci-device :register-set bar0)))
      (format t "Found Intel HDA controller at ~S.~%" pci-device)
      ;; Perform a controller reset by pulsing crst to 0.
      (setf (reg/32 bar0 +gctl+) 0)
      (format t "Begin reset.~%")
      ;; Wait for it to read back 0.
      (loop while (not (zerop (gctl-crst (reg/32 bar0 +gctl+)))))
      (format t "Leaving reset.~%")
      (setf (reg/32 bar0 +gctl+) (mask-field +gctl-crst+ -1))
      ;; Wait for it to read 1. FIXME: Timeouts...
      (loop while (zerop (gctl-crst (reg/32 bar0 +gctl+))))
      (format t "Waiting for codecs.~%")
      ;; Wait for the codecs to report in. 521µs.
      (loop while (< (reg/32 bar0 +walclk+) 14000))
      (format t "HDA version ~D.~D~%" (reg/8 bar0 +vmaj+) (reg/8 bar0 +vmin+))
  