diff --git a/sound/pci/oxygen/oxygen.c b/sound/pci/oxygen/oxygen.c
index f2c37f379d39..1d8e2b29745d 100644
--- a/sound/pci/oxygen/oxygen.c
+++ b/sound/pci/oxygen/oxygen.c
@@ -196,6 +196,12 @@ static void meridian_init(struct oxygen *chip)
 	ak5385_init(chip);
 }
 
+static void halo_init(struct oxygen *chip)
+{
+	ak4396_init(chip);
+	ak5385_init(chip);
+}
+
 static void generic_cleanup(struct oxygen *chip)
 {
 }
@@ -211,6 +217,11 @@ static void meridian_resume(struct oxygen *chip)
 	ak4396_registers_init(chip);
 }
 
+static void halo_resume(struct oxygen *chip)
+{
+	ak4396_registers_init(chip);
+}
+
 static void set_ak4396_params(struct oxygen *chip,
 			      struct snd_pcm_hw_params *params)
 {
@@ -335,6 +346,11 @@ static int __devinit get_oxygen_model(struct oxygen *chip,
 					    CAPTURE_0_FROM_I2S_2 |
 					    CAPTURE_1_FROM_SPDIF;
 		break;
+	case MODEL_HALO:
+		chip->model.init = halo_init;
+		chip->model.resume = halo_resume;
+		chip->model.set_adc_params = set_ak5385_params;
+		break;
 	}
 	if (id->driver_data == MODEL_MERIDIAN ||
 	    id->driver_data == MODEL_HALO) {