#! /bin/sh
set -e

# Detect hardware from Open Firmware's exported device tree, including
# things on the mac-io bus. This is a grab-bag of stuff at the moment; it
# should really move into discover or be hotpluggable.
#
# If the hardware is of use within d-i, then echo it and register-module it;
# otherwise, just use register-module.

for dir in $(find "/proc/device-tree/" -type d); do
	name="$(cat "$dir/name" 2>/dev/null || true)"
	device_type="$(cat "$dir/device_type" 2>/dev/null || true)"
	compatible="$(cat "$dir/compatible" 2>/dev/null || true)"

	# drivers/macintosh
	if [ "$name" = fan ]; then
		case $compatible in
		    adt7460|adt7467)
			# not in d-i yet
			# echo "therm_adt746x:iBook/AlBook G4 ADT746x thermostat"
			register-module therm_adt746x
			;;
		    adm1030)
			# not in d-i yet
			# echo "therm_windtunnel:G4 Windtunnel thermostat"
			register-module therm_windtunnel
			;;
		esac
	# drivers/net
	elif [ "$name" = radio ]; then
		echo "airport:Airport wireless"
		register-module airport
	elif [ "$name" = bmac ] || ([ "$device_type" = network ] && [ "$compatible" = bmac+ ]); then
		echo "bmac:PowerMac BMAC Ethernet"
		register-module bmac
	elif [ "$name" = mace ]; then
		echo "mace:PowerMac MACE Ethernet"
		register-module mace
	# drivers/scsi
	elif [ "$name" = 53c94 ]; then
		echo "mac53c94:PowerMac 53c94 SCSI bus adaptor"
		register-module mac53c94
	elif [ "$name" = mesh ] || ([ "$device_type" = scsi ] && [ "$compatible" = chrp,mesh0 ]); then
		echo "mesh:Macintosh Enhanced SCSI Hardware"
		register-module mesh
	# drivers/ata
	elif [ "$device_type" = ata ] ; then
		case "$compatible" in
		    keylargo-ata)
		        echo "pata_macio:KeyLargo ATA"
		        register-module -i pata_macio
                        ;;
		    heathrow-ata)
		        echo "pata_macio:Heathrow/Paddington ATA"
		        register-module -i pata_macio
                        ;;
		    ohare-ata)
		        echo "pata_macio:OHare ATA"
		        register-module -i pata_macio
		        ;;
		esac
	# sound/ppc, sound/oss/dmasound
	elif [ "$name" = awacs ]; then
		# probably best to go for ALSA
		register-module snd-powermac
	elif [ "$name" = davbus ] || [ "$name" = i2s-a ]; then
		for child in "$dir"/*; do
			if [ -f "$child/name" ]; then
				childname="$(cat "$child/name" 2>/dev/null || true)"
				if [ "$childname" = sound ] && \
				   [ ! -f "$child/layout-id" ]; then
					# blacklist snd-aoa modules so snd-powermac is loaded
					register-module -b snd-aoa-codec-tas
					register-module -b snd-aoa-fabric-layout
					register-module -b snd-aoa-i2sbus
					register-module -b snd-aoa-soundbus
					register-module -b snd-aoa
					register-module snd-powermac
				fi
			fi
		done
	elif [ "$name" = via-pmu ]; then
		# APM emulation is useful for some applications, such as the
		# GNOME battery applet.
		register-module apm_emu
	fi
done
