ALSA: hda - Clean up the code to check bdl_pos_adj option
authorTakashi Iwai <tiwai@suse.de>
Thu, 10 Dec 2015 15:44:08 +0000 (16:44 +0100)
committerTakashi Iwai <tiwai@suse.de>
Tue, 15 Dec 2015 13:01:28 +0000 (14:01 +0100)
Just a minor cleanup; instead of passing an array, pass the assigned
bdl_pos_adj option value directory in struct azx.  Also split the code
to get the default bdl_pos_adj value for the change that will follow
after this.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_controller.c
sound/pci/hda/hda_controller.h
sound/pci/hda/hda_intel.c

index 22dbfa563919fca4ace4d3d50b7c822008c7bb34..10c77074b4dcb810746b45936f13f4d3a1fed449 100644 (file)
@@ -1050,8 +1050,7 @@ int azx_bus_init(struct azx *chip, const char *model,
        if (chip->get_position[0] != azx_get_pos_lpib ||
            chip->get_position[1] != azx_get_pos_lpib)
                bus->core.use_posbuf = true;
-       if (chip->bdl_pos_adj)
-               bus->core.bdl_pos_adj = chip->bdl_pos_adj[chip->dev_index];
+       bus->core.bdl_pos_adj = chip->bdl_pos_adj;
        if (chip->driver_caps & AZX_DCAPS_CORBRP_SELF_CLEAR)
                bus->core.corbrp_self_clear = true;
 
index c1d28a657f19f2413c778a484e6b6e7665e5f405..a32ec9004edd55d50411f79fe7137bf908d84f9a 100644 (file)
@@ -147,7 +147,7 @@ struct azx {
 #endif
 
        /* flags */
-       const int *bdl_pos_adj;
+       int bdl_pos_adj;
        int poll_count;
        unsigned int running:1;
        unsigned int single_cmd:1;
index fe9bef339ceabab327c7a9319c9f0043316e0b3c..a17bf0467edc2820bb0d2e06291769deca620ffa 100644 (file)
@@ -632,7 +632,7 @@ static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)
        if (wallclk < (azx_dev->core.period_wallclk * 5) / 4 &&
            pos % azx_dev->core.period_bytes > azx_dev->core.period_bytes / 2)
                /* NG - it's below the first next period boundary */
-               return chip->bdl_pos_adj[chip->dev_index] ? 0 : -1;
+               return chip->bdl_pos_adj ? 0 : -1;
        azx_dev->core.start_wallclk += wallclk;
        return 1; /* OK, it's fine */
 }
@@ -1488,6 +1488,17 @@ static void azx_probe_work(struct work_struct *work)
        azx_probe_continue(&hda->chip);
 }
 
+static int default_bdl_pos_adj(struct azx *chip)
+{
+       switch (chip->driver_type) {
+       case AZX_DRIVER_ICH:
+       case AZX_DRIVER_PCH:
+               return 1;
+       default:
+               return 32;
+       }
+}
+
 /*
  * constructor
  */
@@ -1541,18 +1552,10 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci,
        chip->single_cmd = single_cmd;
        azx_check_snoop_available(chip);
 
-       if (bdl_pos_adj[dev] < 0) {
-               switch (chip->driver_type) {
-               case AZX_DRIVER_ICH:
-               case AZX_DRIVER_PCH:
-                       bdl_pos_adj[dev] = 1;
-                       break;
-               default:
-                       bdl_pos_adj[dev] = 32;
-                       break;
-               }
-       }
-       chip->bdl_pos_adj = bdl_pos_adj;
+       if (bdl_pos_adj[dev] < 0)
+               chip->bdl_pos_adj = default_bdl_pos_adj(chip);
+       else
+               chip->bdl_pos_adj = bdl_pos_adj[dev];
 
        err = azx_bus_init(chip, model[dev], &pci_hda_io_ops);
        if (err < 0) {