aboutsummaryrefslogtreecommitdiffstats
path: root/sound/hda/ext/hdac_ext_stream.c
diff options
context:
space:
mode:
authorRakesh Ughreja <rakesh.a.ughreja@intel.com>2018-06-01 23:53:50 -0400
committerTakashi Iwai <tiwai@suse.de>2018-06-28 01:33:29 -0400
commit76f56fae1cf9040325a58d1375291baf71dfaf03 (patch)
treeecc691b24f517dbaf6729b3a0e4d80f3f16a669b /sound/hda/ext/hdac_ext_stream.c
parent3787a39852b0d6a9e67336f8fb5815c13ab78bb6 (diff)
ALSA: hdac: Remove usage of struct hdac_ext_bus and use hdac_bus instead
This patch removes the hdac_ext_bus structure. The legacy and enhanced HDaudio capabilities can be handled in a backward-compatible way without separate definitions. Follow-up patches in this series handle the driver definition. Signed-off-by: Rakesh Ughreja <rakesh.a.ughreja@intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/hda/ext/hdac_ext_stream.c')
-rw-r--r--sound/hda/ext/hdac_ext_stream.c104
1 files changed, 45 insertions, 59 deletions
diff --git a/sound/hda/ext/hdac_ext_stream.c b/sound/hda/ext/hdac_ext_stream.c
index c96d7a7a36af..1bd27576db98 100644
--- a/sound/hda/ext/hdac_ext_stream.c
+++ b/sound/hda/ext/hdac_ext_stream.c
@@ -25,7 +25,7 @@
25 25
26/** 26/**
27 * snd_hdac_ext_stream_init - initialize each stream (aka device) 27 * snd_hdac_ext_stream_init - initialize each stream (aka device)
28 * @ebus: HD-audio ext core bus 28 * @bus: HD-audio core bus
29 * @stream: HD-audio ext core stream object to initialize 29 * @stream: HD-audio ext core stream object to initialize
30 * @idx: stream index number 30 * @idx: stream index number
31 * @direction: stream direction (SNDRV_PCM_STREAM_PLAYBACK or SNDRV_PCM_STREAM_CAPTURE) 31 * @direction: stream direction (SNDRV_PCM_STREAM_PLAYBACK or SNDRV_PCM_STREAM_CAPTURE)
@@ -34,18 +34,16 @@
34 * initialize the stream, if ppcap is enabled then init those and then 34 * initialize the stream, if ppcap is enabled then init those and then
35 * invoke hdac stream initialization routine 35 * invoke hdac stream initialization routine
36 */ 36 */
37void snd_hdac_ext_stream_init(struct hdac_ext_bus *ebus, 37void snd_hdac_ext_stream_init(struct hdac_bus *bus,
38 struct hdac_ext_stream *stream, 38 struct hdac_ext_stream *stream,
39 int idx, int direction, int tag) 39 int idx, int direction, int tag)
40{ 40{
41 struct hdac_bus *bus = &ebus->bus;
42
43 if (bus->ppcap) { 41 if (bus->ppcap) {
44 stream->pphc_addr = bus->ppcap + AZX_PPHC_BASE + 42 stream->pphc_addr = bus->ppcap + AZX_PPHC_BASE +
45 AZX_PPHC_INTERVAL * idx; 43 AZX_PPHC_INTERVAL * idx;
46 44
47 stream->pplc_addr = bus->ppcap + AZX_PPLC_BASE + 45 stream->pplc_addr = bus->ppcap + AZX_PPLC_BASE +
48 AZX_PPLC_MULTI * ebus->num_streams + 46 AZX_PPLC_MULTI * bus->num_streams +
49 AZX_PPLC_INTERVAL * idx; 47 AZX_PPLC_INTERVAL * idx;
50 } 48 }
51 49
@@ -71,12 +69,12 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_init);
71/** 69/**
72 * snd_hdac_ext_stream_init_all - create and initialize the stream objects 70 * snd_hdac_ext_stream_init_all - create and initialize the stream objects
73 * for an extended hda bus 71 * for an extended hda bus
74 * @ebus: HD-audio ext core bus 72 * @bus: HD-audio core bus
75 * @start_idx: start index for streams 73 * @start_idx: start index for streams
76 * @num_stream: number of streams to initialize 74 * @num_stream: number of streams to initialize
77 * @dir: direction of streams 75 * @dir: direction of streams
78 */ 76 */
79int snd_hdac_ext_stream_init_all(struct hdac_ext_bus *ebus, int start_idx, 77int snd_hdac_ext_stream_init_all(struct hdac_bus *bus, int start_idx,
80 int num_stream, int dir) 78 int num_stream, int dir)
81{ 79{
82 int stream_tag = 0; 80 int stream_tag = 0;
@@ -88,7 +86,7 @@ int snd_hdac_ext_stream_init_all(struct hdac_ext_bus *ebus, int start_idx,
88 if (!stream) 86 if (!stream)
89 return -ENOMEM; 87 return -ENOMEM;
90 tag = ++stream_tag; 88 tag = ++stream_tag;
91 snd_hdac_ext_stream_init(ebus, stream, idx, dir, tag); 89 snd_hdac_ext_stream_init(bus, stream, idx, dir, tag);
92 idx++; 90 idx++;
93 } 91 }
94 92
@@ -100,17 +98,16 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_init_all);
100/** 98/**
101 * snd_hdac_stream_free_all - free hdac extended stream objects 99 * snd_hdac_stream_free_all - free hdac extended stream objects
102 * 100 *
103 * @ebus: HD-audio ext core bus 101 * @bus: HD-audio core bus
104 */ 102 */
105void snd_hdac_stream_free_all(struct hdac_ext_bus *ebus) 103void snd_hdac_stream_free_all(struct hdac_bus *bus)
106{ 104{
107 struct hdac_stream *s, *_s; 105 struct hdac_stream *s, *_s;
108 struct hdac_ext_stream *stream; 106 struct hdac_ext_stream *stream;
109 struct hdac_bus *bus = ebus_to_hbus(ebus);
110 107
111 list_for_each_entry_safe(s, _s, &bus->stream_list, list) { 108 list_for_each_entry_safe(s, _s, &bus->stream_list, list) {
112 stream = stream_to_hdac_ext_stream(s); 109 stream = stream_to_hdac_ext_stream(s);
113 snd_hdac_ext_stream_decouple(ebus, stream, false); 110 snd_hdac_ext_stream_decouple(bus, stream, false);
114 list_del(&s->list); 111 list_del(&s->list);
115 kfree(stream); 112 kfree(stream);
116 } 113 }
@@ -119,15 +116,14 @@ EXPORT_SYMBOL_GPL(snd_hdac_stream_free_all);
119 116
120/** 117/**
121 * snd_hdac_ext_stream_decouple - decouple the hdac stream 118 * snd_hdac_ext_stream_decouple - decouple the hdac stream
122 * @ebus: HD-audio ext core bus 119 * @bus: HD-audio core bus
123 * @stream: HD-audio ext core stream object to initialize 120 * @stream: HD-audio ext core stream object to initialize
124 * @decouple: flag to decouple 121 * @decouple: flag to decouple
125 */ 122 */
126void snd_hdac_ext_stream_decouple(struct hdac_ext_bus *ebus, 123void snd_hdac_ext_stream_decouple(struct hdac_bus *bus,
127 struct hdac_ext_stream *stream, bool decouple) 124 struct hdac_ext_stream *stream, bool decouple)
128{ 125{
129 struct hdac_stream *hstream = &stream->hstream; 126 struct hdac_stream *hstream = &stream->hstream;
130 struct hdac_bus *bus = &ebus->bus;
131 u32 val; 127 u32 val;
132 int mask = AZX_PPCTL_PROCEN(hstream->index); 128 int mask = AZX_PPCTL_PROCEN(hstream->index);
133 129
@@ -251,19 +247,18 @@ void snd_hdac_ext_link_clear_stream_id(struct hdac_ext_link *link,
251EXPORT_SYMBOL_GPL(snd_hdac_ext_link_clear_stream_id); 247EXPORT_SYMBOL_GPL(snd_hdac_ext_link_clear_stream_id);
252 248
253static struct hdac_ext_stream * 249static struct hdac_ext_stream *
254hdac_ext_link_stream_assign(struct hdac_ext_bus *ebus, 250hdac_ext_link_stream_assign(struct hdac_bus *bus,
255 struct snd_pcm_substream *substream) 251 struct snd_pcm_substream *substream)
256{ 252{
257 struct hdac_ext_stream *res = NULL; 253 struct hdac_ext_stream *res = NULL;
258 struct hdac_stream *stream = NULL; 254 struct hdac_stream *stream = NULL;
259 struct hdac_bus *hbus = &ebus->bus;
260 255
261 if (!hbus->ppcap) { 256 if (!bus->ppcap) {
262 dev_err(hbus->dev, "stream type not supported\n"); 257 dev_err(bus->dev, "stream type not supported\n");
263 return NULL; 258 return NULL;
264 } 259 }
265 260
266 list_for_each_entry(stream, &hbus->stream_list, list) { 261 list_for_each_entry(stream, &bus->stream_list, list) {
267 struct hdac_ext_stream *hstream = container_of(stream, 262 struct hdac_ext_stream *hstream = container_of(stream,
268 struct hdac_ext_stream, 263 struct hdac_ext_stream,
269 hstream); 264 hstream);
@@ -277,34 +272,33 @@ hdac_ext_link_stream_assign(struct hdac_ext_bus *ebus,
277 } 272 }
278 273
279 if (!hstream->link_locked) { 274 if (!hstream->link_locked) {
280 snd_hdac_ext_stream_decouple(ebus, hstream, true); 275 snd_hdac_ext_stream_decouple(bus, hstream, true);
281 res = hstream; 276 res = hstream;
282 break; 277 break;
283 } 278 }
284 } 279 }
285 if (res) { 280 if (res) {
286 spin_lock_irq(&hbus->reg_lock); 281 spin_lock_irq(&bus->reg_lock);
287 res->link_locked = 1; 282 res->link_locked = 1;
288 res->link_substream = substream; 283 res->link_substream = substream;
289 spin_unlock_irq(&hbus->reg_lock); 284 spin_unlock_irq(&bus->reg_lock);
290 } 285 }
291 return res; 286 return res;
292} 287}
293 288
294static struct hdac_ext_stream * 289static struct hdac_ext_stream *
295hdac_ext_host_stream_assign(struct hdac_ext_bus *ebus, 290hdac_ext_host_stream_assign(struct hdac_bus *bus,
296 struct snd_pcm_substream *substream) 291 struct snd_pcm_substream *substream)
297{ 292{
298 struct hdac_ext_stream *res = NULL; 293 struct hdac_ext_stream *res = NULL;
299 struct hdac_stream *stream = NULL; 294 struct hdac_stream *stream = NULL;
300 struct hdac_bus *hbus = &ebus->bus;
301 295
302 if (!hbus->ppcap) { 296 if (!bus->ppcap) {
303 dev_err(hbus->dev, "stream type not supported\n"); 297 dev_err(bus->dev, "stream type not supported\n");
304 return NULL; 298 return NULL;
305 } 299 }
306 300
307 list_for_each_entry(stream, &hbus->stream_list, list) { 301 list_for_each_entry(stream, &bus->stream_list, list) {
308 struct hdac_ext_stream *hstream = container_of(stream, 302 struct hdac_ext_stream *hstream = container_of(stream,
309 struct hdac_ext_stream, 303 struct hdac_ext_stream,
310 hstream); 304 hstream);
@@ -313,17 +307,17 @@ hdac_ext_host_stream_assign(struct hdac_ext_bus *ebus,
313 307
314 if (!stream->opened) { 308 if (!stream->opened) {
315 if (!hstream->decoupled) 309 if (!hstream->decoupled)
316 snd_hdac_ext_stream_decouple(ebus, hstream, true); 310 snd_hdac_ext_stream_decouple(bus, hstream, true);
317 res = hstream; 311 res = hstream;
318 break; 312 break;
319 } 313 }
320 } 314 }
321 if (res) { 315 if (res) {
322 spin_lock_irq(&hbus->reg_lock); 316 spin_lock_irq(&bus->reg_lock);
323 res->hstream.opened = 1; 317 res->hstream.opened = 1;
324 res->hstream.running = 0; 318 res->hstream.running = 0;
325 res->hstream.substream = substream; 319 res->hstream.substream = substream;
326 spin_unlock_irq(&hbus->reg_lock); 320 spin_unlock_irq(&bus->reg_lock);
327 } 321 }
328 322
329 return res; 323 return res;
@@ -331,7 +325,7 @@ hdac_ext_host_stream_assign(struct hdac_ext_bus *ebus,
331 325
332/** 326/**
333 * snd_hdac_ext_stream_assign - assign a stream for the PCM 327 * snd_hdac_ext_stream_assign - assign a stream for the PCM
334 * @ebus: HD-audio ext core bus 328 * @bus: HD-audio core bus
335 * @substream: PCM substream to assign 329 * @substream: PCM substream to assign
336 * @type: type of stream (coupled, host or link stream) 330 * @type: type of stream (coupled, host or link stream)
337 * 331 *
@@ -346,27 +340,26 @@ hdac_ext_host_stream_assign(struct hdac_ext_bus *ebus,
346 * the same stream object when it's used beforehand. when a stream is 340 * the same stream object when it's used beforehand. when a stream is
347 * decoupled, it becomes a host stream and link stream. 341 * decoupled, it becomes a host stream and link stream.
348 */ 342 */
349struct hdac_ext_stream *snd_hdac_ext_stream_assign(struct hdac_ext_bus *ebus, 343struct hdac_ext_stream *snd_hdac_ext_stream_assign(struct hdac_bus *bus,
350 struct snd_pcm_substream *substream, 344 struct snd_pcm_substream *substream,
351 int type) 345 int type)
352{ 346{
353 struct hdac_ext_stream *hstream = NULL; 347 struct hdac_ext_stream *hstream = NULL;
354 struct hdac_stream *stream = NULL; 348 struct hdac_stream *stream = NULL;
355 struct hdac_bus *hbus = &ebus->bus;
356 349
357 switch (type) { 350 switch (type) {
358 case HDAC_EXT_STREAM_TYPE_COUPLED: 351 case HDAC_EXT_STREAM_TYPE_COUPLED:
359 stream = snd_hdac_stream_assign(hbus, substream); 352 stream = snd_hdac_stream_assign(bus, substream);
360 if (stream) 353 if (stream)
361 hstream = container_of(stream, 354 hstream = container_of(stream,
362 struct hdac_ext_stream, hstream); 355 struct hdac_ext_stream, hstream);
363 return hstream; 356 return hstream;
364 357
365 case HDAC_EXT_STREAM_TYPE_HOST: 358 case HDAC_EXT_STREAM_TYPE_HOST:
366 return hdac_ext_host_stream_assign(ebus, substream); 359 return hdac_ext_host_stream_assign(bus, substream);
367 360
368 case HDAC_EXT_STREAM_TYPE_LINK: 361 case HDAC_EXT_STREAM_TYPE_LINK:
369 return hdac_ext_link_stream_assign(ebus, substream); 362 return hdac_ext_link_stream_assign(bus, substream);
370 363
371 default: 364 default:
372 return NULL; 365 return NULL;
@@ -384,7 +377,6 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_assign);
384void snd_hdac_ext_stream_release(struct hdac_ext_stream *stream, int type) 377void snd_hdac_ext_stream_release(struct hdac_ext_stream *stream, int type)
385{ 378{
386 struct hdac_bus *bus = stream->hstream.bus; 379 struct hdac_bus *bus = stream->hstream.bus;
387 struct hdac_ext_bus *ebus = hbus_to_ebus(bus);
388 380
389 switch (type) { 381 switch (type) {
390 case HDAC_EXT_STREAM_TYPE_COUPLED: 382 case HDAC_EXT_STREAM_TYPE_COUPLED:
@@ -393,13 +385,13 @@ void snd_hdac_ext_stream_release(struct hdac_ext_stream *stream, int type)
393 385
394 case HDAC_EXT_STREAM_TYPE_HOST: 386 case HDAC_EXT_STREAM_TYPE_HOST:
395 if (stream->decoupled && !stream->link_locked) 387 if (stream->decoupled && !stream->link_locked)
396 snd_hdac_ext_stream_decouple(ebus, stream, false); 388 snd_hdac_ext_stream_decouple(bus, stream, false);
397 snd_hdac_stream_release(&stream->hstream); 389 snd_hdac_stream_release(&stream->hstream);
398 break; 390 break;
399 391
400 case HDAC_EXT_STREAM_TYPE_LINK: 392 case HDAC_EXT_STREAM_TYPE_LINK:
401 if (stream->decoupled && !stream->hstream.opened) 393 if (stream->decoupled && !stream->hstream.opened)
402 snd_hdac_ext_stream_decouple(ebus, stream, false); 394 snd_hdac_ext_stream_decouple(bus, stream, false);
403 spin_lock_irq(&bus->reg_lock); 395 spin_lock_irq(&bus->reg_lock);
404 stream->link_locked = 0; 396 stream->link_locked = 0;
405 stream->link_substream = NULL; 397 stream->link_substream = NULL;
@@ -415,16 +407,15 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_release);
415 407
416/** 408/**
417 * snd_hdac_ext_stream_spbcap_enable - enable SPIB for a stream 409 * snd_hdac_ext_stream_spbcap_enable - enable SPIB for a stream
418 * @ebus: HD-audio ext core bus 410 * @bus: HD-audio core bus
419 * @enable: flag to enable/disable SPIB 411 * @enable: flag to enable/disable SPIB
420 * @index: stream index for which SPIB need to be enabled 412 * @index: stream index for which SPIB need to be enabled
421 */ 413 */
422void snd_hdac_ext_stream_spbcap_enable(struct hdac_ext_bus *ebus, 414void snd_hdac_ext_stream_spbcap_enable(struct hdac_bus *bus,
423 bool enable, int index) 415 bool enable, int index)
424{ 416{
425 u32 mask = 0; 417 u32 mask = 0;
426 u32 register_mask = 0; 418 u32 register_mask = 0;
427 struct hdac_bus *bus = &ebus->bus;
428 419
429 if (!bus->spbcap) { 420 if (!bus->spbcap) {
430 dev_err(bus->dev, "Address of SPB capability is NULL\n"); 421 dev_err(bus->dev, "Address of SPB capability is NULL\n");
@@ -446,14 +437,13 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_spbcap_enable);
446 437
447/** 438/**
448 * snd_hdac_ext_stream_set_spib - sets the spib value of a stream 439 * snd_hdac_ext_stream_set_spib - sets the spib value of a stream
449 * @ebus: HD-audio ext core bus 440 * @bus: HD-audio core bus
450 * @stream: hdac_ext_stream 441 * @stream: hdac_ext_stream
451 * @value: spib value to set 442 * @value: spib value to set
452 */ 443 */
453int snd_hdac_ext_stream_set_spib(struct hdac_ext_bus *ebus, 444int snd_hdac_ext_stream_set_spib(struct hdac_bus *bus,
454 struct hdac_ext_stream *stream, u32 value) 445 struct hdac_ext_stream *stream, u32 value)
455{ 446{
456 struct hdac_bus *bus = &ebus->bus;
457 447
458 if (!bus->spbcap) { 448 if (!bus->spbcap) {
459 dev_err(bus->dev, "Address of SPB capability is NULL\n"); 449 dev_err(bus->dev, "Address of SPB capability is NULL\n");
@@ -468,15 +458,14 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_set_spib);
468 458
469/** 459/**
470 * snd_hdac_ext_stream_get_spbmaxfifo - gets the spib value of a stream 460 * snd_hdac_ext_stream_get_spbmaxfifo - gets the spib value of a stream
471 * @ebus: HD-audio ext core bus 461 * @bus: HD-audio core bus
472 * @stream: hdac_ext_stream 462 * @stream: hdac_ext_stream
473 * 463 *
474 * Return maxfifo for the stream 464 * Return maxfifo for the stream
475 */ 465 */
476int snd_hdac_ext_stream_get_spbmaxfifo(struct hdac_ext_bus *ebus, 466int snd_hdac_ext_stream_get_spbmaxfifo(struct hdac_bus *bus,
477 struct hdac_ext_stream *stream) 467 struct hdac_ext_stream *stream)
478{ 468{
479 struct hdac_bus *bus = &ebus->bus;
480 469
481 if (!bus->spbcap) { 470 if (!bus->spbcap) {
482 dev_err(bus->dev, "Address of SPB capability is NULL\n"); 471 dev_err(bus->dev, "Address of SPB capability is NULL\n");
@@ -490,11 +479,10 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_get_spbmaxfifo);
490 479
491/** 480/**
492 * snd_hdac_ext_stop_streams - stop all stream if running 481 * snd_hdac_ext_stop_streams - stop all stream if running
493 * @ebus: HD-audio ext core bus 482 * @bus: HD-audio core bus
494 */ 483 */
495void snd_hdac_ext_stop_streams(struct hdac_ext_bus *ebus) 484void snd_hdac_ext_stop_streams(struct hdac_bus *bus)
496{ 485{
497 struct hdac_bus *bus = ebus_to_hbus(ebus);
498 struct hdac_stream *stream; 486 struct hdac_stream *stream;
499 487
500 if (bus->chip_init) { 488 if (bus->chip_init) {
@@ -507,16 +495,15 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stop_streams);
507 495
508/** 496/**
509 * snd_hdac_ext_stream_drsm_enable - enable DMA resume for a stream 497 * snd_hdac_ext_stream_drsm_enable - enable DMA resume for a stream
510 * @ebus: HD-audio ext core bus 498 * @bus: HD-audio core bus
511 * @enable: flag to enable/disable DRSM 499 * @enable: flag to enable/disable DRSM
512 * @index: stream index for which DRSM need to be enabled 500 * @index: stream index for which DRSM need to be enabled
513 */ 501 */
514void snd_hdac_ext_stream_drsm_enable(struct hdac_ext_bus *ebus, 502void snd_hdac_ext_stream_drsm_enable(struct hdac_bus *bus,
515 bool enable, int index) 503 bool enable, int index)
516{ 504{
517 u32 mask = 0; 505 u32 mask = 0;
518 u32 register_mask = 0; 506 u32 register_mask = 0;
519 struct hdac_bus *bus = &ebus->bus;
520 507
521 if (!bus->drsmcap) { 508 if (!bus->drsmcap) {
522 dev_err(bus->dev, "Address of DRSM capability is NULL\n"); 509 dev_err(bus->dev, "Address of DRSM capability is NULL\n");
@@ -538,14 +525,13 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_drsm_enable);
538 525
539/** 526/**
540 * snd_hdac_ext_stream_set_dpibr - sets the dpibr value of a stream 527 * snd_hdac_ext_stream_set_dpibr - sets the dpibr value of a stream
541 * @ebus: HD-audio ext core bus 528 * @bus: HD-audio core bus
542 * @stream: hdac_ext_stream 529 * @stream: hdac_ext_stream
543 * @value: dpib value to set 530 * @value: dpib value to set
544 */ 531 */
545int snd_hdac_ext_stream_set_dpibr(struct hdac_ext_bus *ebus, 532int snd_hdac_ext_stream_set_dpibr(struct hdac_bus *bus,
546 struct hdac_ext_stream *stream, u32 value) 533 struct hdac_ext_stream *stream, u32 value)
547{ 534{
548 struct hdac_bus *bus = &ebus->bus;
549 535
550 if (!bus->drsmcap) { 536 if (!bus->drsmcap) {
551 dev_err(bus->dev, "Address of DRSM capability is NULL\n"); 537 dev_err(bus->dev, "Address of DRSM capability is NULL\n");
@@ -560,7 +546,7 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_set_dpibr);
560 546
561/** 547/**
562 * snd_hdac_ext_stream_set_lpib - sets the lpib value of a stream 548 * snd_hdac_ext_stream_set_lpib - sets the lpib value of a stream
563 * @ebus: HD-audio ext core bus 549 * @bus: HD-audio core bus
564 * @stream: hdac_ext_stream 550 * @stream: hdac_ext_stream
565 * @value: lpib value to set 551 * @value: lpib value to set
566 */ 552 */