towards a standard audio hal for linux · •relies on audio hal plugins to implement policy...

19
www.wolfsonmicro.com 1 Towards a standard audio HAL for Linux Introducing TinyHAL February 2012 © 2012 Wolfson Microelectronics plc

Upload: others

Post on 11-May-2020

7 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com 1

Towards a standard audio HAL for Linux

Introducing TinyHAL

February 2012 © 2012 Wolfson Microelectronics plc

Page 2: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

• Introduction to smartphone audio

• System integration in the Android audio stack

• Existing audio HALs

• Introducing TinyHAL

Overview

2 February 2012 © 2012 Wolfson Microelectronics plc

Page 3: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

Smartphone audio hardware

3 © 2012 Wolfson Microelectronics plc February 2012

CPU DSP

HDMI

Bluetooth

Analogue

Baseband

Page 4: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

A smartphone CODEC

4 © 2012 Wolfson Microelectronics plc February 2012

Page 5: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

A tablet CODEC

5 © 2012 Wolfson Microelectronics plc February 2012

Page 6: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

• Product configuration • Configuring audio paths

• Acoustic engineering

• DSP algorithm configuration

• Many aspects require specialist measurement techniques

• Use case management • Transitions

• Overlapping use cases

• Many interdependencies

• May need different tunings for different markets

Audio configuration development

6 © 2012 Wolfson Microelectronics plc February 2012

Page 7: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

• AudioFlinger manages all audio in the system • Standard Android code

• High level policy decisions • “Output to headphones and speaker”

• “Record from headset microphone”

• “Output to HDMI”

• Common behaviour between Android devices • Can be overridden, but usually done by editing code

• Not really anything to do with the tuning

Android audio - AudioFlinger

7 © 2012 Wolfson Microelectronics plc February 2012

Page 8: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

• Relies on audio HAL plugins to implement policy • Totally system specific code

• Tell AudioFlinger which devices are available

• Implement audio streams to and from hardware

• Linux kernel provides standard interfaces below HAL • ASoC – ALSA subsystem for embedded devices

• Accessory detection

• Not adopted by key vendors when Android was architected • ...but are now, even by out of tree vendors

Android audio - HAL

8 © 2012 Wolfson Microelectronics plc February 2012

Page 9: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

• Google AOSP code for Nexus phones

• alsa_sound

• System integrator implementations • SoC vendor code

• Product vendor code

• Much parallel development

Current implementations

9 © 2012 Wolfson Microelectronics plc February 2012

Page 10: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

• Nexus S and Galaxy Nexus

• Based on TinyALSA, Apache licensed • Requirement for core Android/AOSP code

• Desirable for many system integrators

• Device specific

• Difficult to reuse directly on other products

• Configuration in code • Only software engineers need apply!

Google AOSP code for Nexus phones

10 © 2012 Wolfson Microelectronics plc February 2012

Page 11: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

struct route_setting vx_ul_bt[] = {

{

.ctl_name = MIXER_MUX_VX0,

.strval = MIXER_BT_LEFT,

},

return strcmp(property,

PRODUCT_DEVICE_TORO) == 0;

Google AOSP code for Nexus phones

11 © 2012 Wolfson Microelectronics plc February 2012

Page 12: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

• In AOSP as an external project • Contributed by Windriver early on

• Based on standard ALSA library • LGPL, unsuitable for standard AOSP usage

• Use cases configured in asound.conf • Good for maintainability but...

• ...not designed for transitions

• UCM not yet supported

• Not yet updated to ICS HAL API

alsa_sound

12 © 2012 Wolfson Microelectronics plc February 2012

Page 13: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

• Often based on alsa_sound • Working around limitations in the configuration files

• Sometimes adding features like DSP integration

• Typically proprietary • Device and system assumptions

• Licensing

System integrator HALs

13 © 2012 Wolfson Microelectronics plc February 2012

Page 14: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

• Need a license suitable for AOSP • Use TinyALSA

• Configuration moved out to files • UCM style

• XML parsed using expat

• Prototype done last year for Gingerbread • In active use by some users

• Still in early development

• Sample configuration for Nexus S

TinyHAL

14 © 2012 Wolfson Microelectronics plc February 2012

Page 15: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

• System defaults

• Top level use cases • Media/default

• Telephony

• Per device routes

• Modifiers • Notification tone in call

TinyHAL configuration

15 © 2012 Wolfson Microelectronics plc February 2012

Page 16: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

<!-- We are able to have most of our routing static so do that -->

5 <path>

6 <!-- AIF1->DAC1 -->

7 <ctl name="DAC1 Switch" val="1" />

8 <ctl name="DAC1L Mixer AIF1.1 Switch" val="1" />

9 <ctl name="DAC1R Mixer AIF1.1 Switch" val="1" />

10

11 <!-- DAC1->Headphone -->

12 <ctl name="Left Headphone Mux" val="DAC" />

13 <ctl name="Right Headphone Mux" val="DAC" />

Configuration example

16 © 2012 Wolfson Microelectronics plc February 2012

Page 17: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

56 <device name="headphone">

57 <path name="on">

58 <ctl name="HP Switch" val="1" />

59 </path>

60 <path name="off">

61 <ctl name="HP Switch" val="0" />

62 </path>

63 </device>

Configuration example

17 © 2012 Wolfson Microelectronics plc February 2012

Page 18: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

• Record support

• Baseband support

• Dynamic power optimisations

• Algorithm plugins

• Support for explicit use case transition sequences

• Support for new ALSA features

• Contributions welcome!

Future plans

18 © 2012 Wolfson Microelectronics plc February 2012

Page 19: Towards a standard audio HAL for Linux · •Relies on audio HAL plugins to implement policy •Totally system specific code •Tell AudioFlinger which devices are available •Implement

www.wolfsonmicro.com

• http://opensource.wolfsonmicro.com/content/tinyhal

More info & any questions

19 © 2012 Wolfson Microelectronics plc February 2012