Commit 67ae482a authored by Sameer Pujar's avatar Sameer Pujar Committed by Takashi Iwai

ALSA: hda: add member to store ratio for stripe control

Stripe control programming is governed by following formula, which is
referenced from the HD Audio specification(Revision 1.0a).
  { ((num_channels * bits_per_sample) / number of SDOs) >= 8 }

Currently above is implemented in snd_hdac_get_stream_stripe_ctl().
This patch introduces a structure member to store the default factor
of '8'. If any HW wants to use a different value, this member can be
easily updated.
Signed-off-by: default avatarSameer Pujar <spujar@nvidia.com>
Link: https://lore.kernel.org/r/1588580176-2801-3-git-send-email-spujar@nvidia.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent bb9b02a4
...@@ -364,6 +364,9 @@ struct hdac_bus { ...@@ -364,6 +364,9 @@ struct hdac_bus {
/* link management */ /* link management */
struct list_head hlink_list; struct list_head hlink_list;
bool cmd_dma_state; bool cmd_dma_state;
/* factor used to derive STRIPE control value */
unsigned int sdo_limit;
}; };
int snd_hdac_bus_init(struct hdac_bus *bus, struct device *dev, int snd_hdac_bus_init(struct hdac_bus *bus, struct device *dev,
......
...@@ -527,6 +527,18 @@ bool snd_hdac_bus_init_chip(struct hdac_bus *bus, bool full_reset) ...@@ -527,6 +527,18 @@ bool snd_hdac_bus_init_chip(struct hdac_bus *bus, bool full_reset)
} }
bus->chip_init = true; bus->chip_init = true;
/*
* Default value of '8' is as per the HD audio specification (Rev 1.0a).
* Following relation is used to derive STRIPE control value.
* For sample rate <= 48K:
* { ((num_channels * bits_per_sample) / number of SDOs) >= 8 }
* For sample rate > 48K:
* { ((num_channels * bits_per_sample * rate/48000) /
* number of SDOs) >= 8 }
*/
bus->sdo_limit = 8;
return true; return true;
} }
EXPORT_SYMBOL_GPL(snd_hdac_bus_init_chip); EXPORT_SYMBOL_GPL(snd_hdac_bus_init_chip);
......
...@@ -38,7 +38,7 @@ int snd_hdac_get_stream_stripe_ctl(struct hdac_bus *bus, ...@@ -38,7 +38,7 @@ int snd_hdac_get_stream_stripe_ctl(struct hdac_bus *bus,
else else
value = (channels * bits_per_sample) / sdo_line; value = (channels * bits_per_sample) / sdo_line;
if (value >= 8) if (value >= bus->sdo_limit)
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment