If the bus is detached and deleted by a call to device_delete_child() or device_delete_children() on a device higher in the tree, I²C children were already detached and deleted. So the device_t pointer stored in sc points to freed memory: we must not try to delete it again.
The same change is applied to my i915 WIP branch to the i915 driver. This fixes a general protection fault users reported.