ALSA: hda - Clean up the code to check bdl_pos_adj option
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>
This commit is contained in:
parent
17074c1a5f
commit
4f0189be3d
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user