<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Technicalities &#187; kernel</title>
	<atom:link href="http://www.sirena.org.uk/log/tag/kernel/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sirena.org.uk/log</link>
	<description>Just another random blog</description>
	<lastBuildDate>Sat, 21 Jan 2012 23:41:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>regmap updates in 3.2</title>
		<link>http://www.sirena.org.uk/log/2012/01/06/regmap-updates-in-3-2/</link>
		<comments>http://www.sirena.org.uk/log/2012/01/06/regmap-updates-in-3-2/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 23:59:19 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planet Debian]]></category>
		<category><![CDATA[regmap]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[ASoC]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=458</guid>
		<description><![CDATA[Version 3.1 of the Linux kernel was the first release to include regmap support and only included a bare minimum of features in order to ease review so version 3.2 has been a pretty big one for regmap development with some pretty major features being built on top of the core code. Support for register [...]]]></description>
			<content:encoded><![CDATA[<p>Version 3.1 of the Linux kernel was the first release to include regmap support and only included a bare minimum of features in order to ease review so version 3.2 has been a pretty big one for regmap development with some pretty major features being built on top of the core code.</p>
<ul>
<li>Support for register caches &#8211; Dimitris Papastamos ported his code for rbtree and LZO caches from ASoC over to regmap. This makes it easy for drivers to cache the current values of the device registers, improving performance by eliminating reads when doing read/modify/write cycles and providing functions to restore the register cache when resuming from power down. An indexed cache type was also added but this will be removed in 3.3 as it offers no real advantage over rbtree.</li>
<li>Support for a wider range of SPI register transfer formats contributed by Lars-Peter Clausen.</li>
<li>Tracepoints supporting both register access logging and monitoring of the time spent on register I/O operations.</li>
<li>Register map dumps via debugfs to help provide diagnostic information during development.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2012/01/06/regmap-updates-in-3-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s wrong with switch statements?</title>
		<link>http://www.sirena.org.uk/log/2011/12/20/whats-wrong-with-switch-statements/</link>
		<comments>http://www.sirena.org.uk/log/2011/12/20/whats-wrong-with-switch-statements/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 13:24:55 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planet Debian]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=463</guid>
		<description><![CDATA[Recently I&#8217;ve been noticing a surprising pattern in code I&#8217;m reviewing for the kernel. A lot of people seem to have taken to writing code that I&#8217;d expect to look like this: switch (thing) { case VALUE: /* Stuff */ break; case BAR: /* Nonsense */ break; default: /* Whatever */ break; } with if [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve been noticing a surprising pattern in code I&#8217;m reviewing for the kernel. A lot of people seem to have taken to writing code that I&#8217;d expect to look like this:</p>
<pre>switch (thing) {
case VALUE:
        /* Stuff */
        break;
case BAR:
        /* Nonsense */
        break;
default:
        /* Whatever */
        break;
}</pre>
<p>with if statements instead:</p>
<pre>if (thing == VALUE) {
        /* Stuff */
} else if (thing == BAR) {
        /* Nonsense */
} else {
        /* Whatever */
}</pre>
<p>(where stuff, nonsense and whatever are usually a bit larger). I really don&#8217;t understand where this has come from &#8211; the if based form isn&#8217;t nearly so idiomatic for selecting between a range of values and this seems to have come from nowhere pretty much. Is there some code base out there where this is common practice or something?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2011/12/20/whats-wrong-with-switch-statements/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>regmap &#8211; a register map abstraction for the Linux kernel</title>
		<link>http://www.sirena.org.uk/log/2011/09/30/regmap-a-register-map-abstraction-for-the-linux-kernel/</link>
		<comments>http://www.sirena.org.uk/log/2011/09/30/regmap-a-register-map-abstraction-for-the-linux-kernel/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 12:46:54 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planet Debian]]></category>
		<category><![CDATA[regmap]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[I2C]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[SPI]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=422</guid>
		<description><![CDATA[A good proportion of I2C and SPI device drivers in the kernel contain some very similar code for accessing the register maps of hardware connected to those buses &#8211; most hardware designers have solved the problem of providing very similar ways. Linux 3.1 introduces a new kernel API called regmap which factors out this code [...]]]></description>
			<content:encoded><![CDATA[<p>A good proportion of I2C and SPI device drivers in the kernel contain some very similar code for accessing the register maps of hardware connected to those buses &#8211; most hardware designers have solved the problem of providing very similar ways. Linux 3.1 introduces a new kernel API called regmap which factors out this code from the drivers, saving code and making it much easier to share infrastructure. There&#8217;s been an implementation of this in ASoC for some time now, the regmap API makes it available to all drivers.</p>
<p>The version of this API in version 3.1 is very simple, just factoring out the simplest level of physical I/O from the devices. Devices register with the regmap API by providing a struct regmap_config (which currently only allows the sizes of the register addresses and values to be specified) and the bus-specific structure to it. They can then use simple read and write operations on the device:</p>
<pre>int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val);
int regmap_write(struct regmap *map, unsigned int reg, unsigned int val);</pre>
<p>The API handles everything to do with formatting the data for transmission and parsing data coming back from the device. Block functions are also provided to allow multiple registers to be read or written simultaneously. Even with this basic level of support we end up saving quite a bit of code as drivers are converted to use the API.</p>
<p>The changes sitting in -next for version 3.2 take this a step further, adding support for more variations on SPI registers, a debugfs interface for dumping the device registers, register cache support courtesy of my colleague Dimitris Papastamos and trace points for dynamic instrumentation of the system.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2011/09/30/regmap-a-register-map-abstraction-for-the-linux-kernel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ASoC updates in 3.0</title>
		<link>http://www.sirena.org.uk/log/2011/07/22/asoc-updates-in-3-0/</link>
		<comments>http://www.sirena.org.uk/log/2011/07/22/asoc-updates-in-3-0/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 08:49:47 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[ASoC]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[AK4641]]></category>
		<category><![CDATA[Asahi Kasei]]></category>
		<category><![CDATA[hx4700]]></category>
		<category><![CDATA[iPAQ]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[MAX98095]]></category>
		<category><![CDATA[Maxim]]></category>
		<category><![CDATA[Samsung]]></category>
		<category><![CDATA[WM8580]]></category>
		<category><![CDATA[WM8996]]></category>
		<category><![CDATA[Wolfson Microelectronics]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=398</guid>
		<description><![CDATA[Linux 3.0 was released today &#8211; another fairly quiet release for the ASoC core, plus the usual collection of new drivers: Support DAPM controls that affect multiple paths &#8211; mainly used for single register bits that affect the routing for a stereo pair of audio streams. Simplifications in the cache infrastructure. New machine drivers for [...]]]></description>
			<content:encoded><![CDATA[<p>Linux 3.0 was released today &#8211; another fairly quiet release for the ASoC core, plus the usual collection of new drivers:</p>
<ul>
<li>Support DAPM controls that affect multiple paths &#8211; mainly used for single register bits that affect the routing for a stereo pair of audio streams.</li>
<li>Simplifications in the cache infrastructure.</li>
<li>New machine drivers for iPAQ hx4700, PCM hookup for WM8580 on Samsung reference platforms and Wolfson Speyside, plus a generalization of the Tegra Harmony driver to cover a range of other platforms based off a similar reference design.</li>
<li>New CODEC drivers for AK4641, MAX98095 and WM8996.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2011/07/22/asoc-updates-in-3-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changing core code</title>
		<link>http://www.sirena.org.uk/log/2011/03/13/changing-core-code/</link>
		<comments>http://www.sirena.org.uk/log/2011/03/13/changing-core-code/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 21:12:10 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planet Debian]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=383</guid>
		<description><![CDATA[One of the biggest differences between working on most other OSs and working upstream on drivers for the Linux kernel is that elsewhere the core is usually a fixed thing that has been released and can&#8217;t really be changed, even if source is available (which may not even be the case). If whatever subsystem you&#8217;re [...]]]></description>
			<content:encoded><![CDATA[<p>One of the biggest differences between working on most other OSs and working upstream on drivers for the Linux kernel is that elsewhere the core is usually a fixed thing that has been released and can&#8217;t really be changed, even if source is available (which may not even be the case). If whatever subsystem you&#8217;re working in can&#8217;t cope with the thing you&#8217;re trying to express then one of the things it&#8217;s really useful to be good at is working out ways to implement the behaviour that&#8217;s required behind the back of the subsystem. It&#8217;s very common to see such code in drivers submitted by hardware vendors, particularly those that are new to Linux, as this is such a big mindset shift.</p>
<p>With kernel development the approach is much more to make sure that the core can cope with whatever needs expressing. It&#8217;s not always done in the core &#8211; for example, sometimes the issue is due to unusually limited hardware and very likely to never come up again &#8211; but it&#8217;s very unusual to see code merged that doesn&#8217;t at least fit in with the design of the subsystem.</p>
<p>This post is inspired by <a href="https://lkml.org/lkml/2011/3/11/324">a brief exchange with Thomas Gleixner on linux-kernel</a> who articulated the advantages of doing things this way very well:</p>
<blockquote>
<pre> - It's usually simpler and faster as the core code has all the
   necessary information. So that's even an argument which managers
   might understand.

 - Such workarounds, when not caught, tend to spread themself
   magically because driver writers checkout the existing code of
   similar devices and copy/paste/modify^Wuglify them over and over.

 - In the worst case such workarounds make the core maintainence
   harder and in some cases impossible, because they silently imply
   semantics on the core w/o the core maintainer knowing about them.</pre>
</blockquote>
<p>The last point is the most important one to me as a subsystem maintainer &#8211; I really don&#8217;t want to be merging code that is going to create issues with ongoing development of the subsystem. This is all another facet of the <a href="http://lxr.linux.no/linux/Documentation/stable_api_nonsense.txt">policy on stable APIs</a>: APIs are only worth working around if they&#8217;re fixed, and the assumptions that end up embedded in a workaroud are as much part of the API as the explicit interfaces.</p>
<p>It&#8217;s things like this that make Linux such a pleasure to work on.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2011/03/13/changing-core-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Updating the kernel on the Nexus S</title>
		<link>http://www.sirena.org.uk/log/2011/02/14/updating-the-kernel-on-the-nexus-s/</link>
		<comments>http://www.sirena.org.uk/log/2011/02/14/updating-the-kernel-on-the-nexus-s/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 13:12:15 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planet Debian]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[crespo]]></category>
		<category><![CDATA[herring]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[Nexus S]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=372</guid>
		<description><![CDATA[Building the kernel for the Nexus S is straightforward &#8211; the kernel is public as one would expect so it&#8217;s simply a matter of building it using the standard Linux build system (the machine is called herring in the code). There is one gotcha, though &#8211; the driver for the BCM4329 WiFi controller is a [...]]]></description>
			<content:encoded><![CDATA[<p>Building the kernel for the Nexus S is straightforward &#8211; the <a href="http://android.git.kernel.org/?p=kernel/samsung.git;a=summary">kernel is public as one would expect</a> so it&#8217;s simply a matter of building it using the standard Linux build system (the machine is called herring in the code). There is one gotcha, though &#8211; the driver for the BCM4329 WiFi controller is a loadable kernel module rather than being built into the image. This means you need to copy it onto the device filesystem separately to flashing the kernel itself if you&#8217;re only updating the kernel. The procedure I use for this is below &#8211; it&#8217;s straightforward but I&#8217;m posting it here to make it a bit more discoverable.</p>
<p>First we make the system partition writable:</p>
<pre>adb root
adb remount</pre>
<p>Then copy the BCM4329 driver over (the path to the driver here is running from the root of the kernel tree:</p>
<pre>adb push drivers/net/wireless/bcm4329/bcm4329.ko /system/modules</pre>
<p>Finally, reboot into the bootloader and flash the actual kernel:</p>
<pre>adb reboot bootloader
fastboot flash zimage arch/arm/boot/zImage
fastboot reboot</pre>
<p>Note that some of these commands may return before the operation they&#8217;ve started has completed so you may need to wait for the phone at various points.</p>
<p>As with updating the main system firmware the above requires an unlocked device which voids your warranty. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2011/02/14/updating-the-kernel-on-the-nexus-s/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tracing ASoC with trace events</title>
		<link>http://www.sirena.org.uk/log/2011/01/22/tracing-asoc-with-trace-points/</link>
		<comments>http://www.sirena.org.uk/log/2011/01/22/tracing-asoc-with-trace-points/#comments</comments>
		<pubDate>Sat, 22 Jan 2011 16:21:50 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[ASoC]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planet Debian]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[alsa]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[trace]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=330</guid>
		<description><![CDATA[Kernel 2.6.38 will add support for tracing ASoC using trace points. Previously all logging for ASoC had been done using printk(), meaning that changing the active logging required a kernel rebuild and that when trace was enabled the volume of trace could easily become very disruptive to other logging within the system. Trace points solve these [...]]]></description>
			<content:encoded><![CDATA[<p>Kernel 2.6.38 will add support for tracing ASoC using <a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/trace/tracepoints.txt;h=c0e1ceed75a441b692bf447b3fcdc49d8abdd1cc;hb=refs/heads/master">trace points</a>. Previously all logging for ASoC had been done using printk(), meaning that changing the active logging required a kernel rebuild and that when trace was enabled the volume of trace could easily become very disruptive to other logging within the system. Trace points solve these problems by providing a framework for enabling and disabling individual traces dynamically and separate logging infrastructure designed for easy filtering and post-processing. When using trace points it&#8217;s reasonable to leave them enabled all the time, making life much easier especially when debugging intermittent problems.</p>
<p>There&#8217;s a bunch of existing documentation out there for the trace subsystem, including some in the kernel under <a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree;f=Documentation/trace;hb=refs/heads/master">Documentation/trace</a>, which I won&#8217;t repeat here. The ASoC events are grouped together under &#8216;asoc&#8217;. The raw log can be viewed by looking at the file tracing/trace in debugfs. Here&#8217;s a sample output from starting playback of an MP3 on a Samsung SMDK6410 reference system using WM8580, a high performance six channel CODEC with a very simple software interface:</p>
<pre>mplayer-1673  [000]   183.920000: snd_soc_dapm_start: card=SMDK-I2S
mplayer-1673  [000]   183.920000: snd_soc_dapm_widget_power: widget=Rear val=1
mplayer-1673  [000]   183.920000: snd_soc_dapm_widget_power: widget=Center+Sub val=1
mplayer-1673  [000]   183.920000: snd_soc_dapm_widget_power: widget=Front val=1
mplayer-1673  [000]   183.920000: snd_soc_dapm_widget_power: widget=VOUT3R val=1
mplayer-1673  [000]   183.920000: snd_soc_dapm_widget_power: widget=VOUT3L val=1
mplayer-1673  [000]   183.920000: snd_soc_dapm_widget_power: widget=VOUT2R val=1
mplayer-1673  [000]   183.920000: snd_soc_dapm_widget_power: widget=VOUT2L val=1
mplayer-1673  [000]   183.920000: snd_soc_dapm_widget_power: widget=VOUT1R val=1
mplayer-1673  [000]   183.920000: snd_soc_dapm_widget_power: widget=VOUT1L val=1
mplayer-1673  [000]   183.920000: snd_soc_dapm_widget_power: widget=DAC3 val=1
mplayer-1673  [000]   183.920000: snd_soc_dapm_widget_power: widget=DAC2 val=1
mplayer-1673  [000]   183.920000: snd_soc_dapm_widget_power: widget=DAC1 val=1
mplayer-1673  [000]   183.920000: snd_soc_bias_level_start: card=SMDK-I2S val=2
mplayer-1673  [000]   183.920000: snd_soc_bias_level_done: card=SMDK-I2S val=2
mplayer-1673  [000]   183.920000: snd_soc_reg_read: codec=wm8580-codec.0-001b.27 reg=32 val=1e
mplayer-1673  [000]   183.920000: snd_soc_reg_write: codec=wm8580-codec.0-001b.27 reg=32 val=2
mplayer-1673  [000]   183.920000: snd_soc_bias_level_start: card=SMDK-I2S val=3
mplayer-1673  [000]   183.920000: snd_soc_bias_level_done: card=SMDK-I2S val=3
mplayer-1673  [000]   183.920000: snd_soc_dapm_done: card=SMDK-I2S
mplayer-1673  [000]   183.920000: snd_soc_reg_read: codec=wm8580-codec.0-001b.27 reg=13 val=10
mplayer-1673  [000]   183.920000: snd_soc_reg_write: codec=wm8580-codec.0-001b.27 reg=13 val=0</pre>
<p>Each line represents a trace event, showing the process that initiated the event, the CPU it ran on and the time it was recorded at together with event-specific details. On this system the time is reported with 10ms accuracy and the CODEC is very simple so the timing information is not terribly informative, but more accurate timers can be really helpful in analysing what&#8217;s going on with more complex CODECs. The set of events available will change over time, the key ones currently present in the kernel are:</p>
<ul>
<li>snd_soc_dapm_start and snd_soc_dapm_done: These events show the start and stop of the DAPM algorithms, showing the time spent on power management decisions.</li>
<li>snd_soc_dapm_widget_power events are generated for each of the widgets which DAPM has determined needs to change state. The &#8216;val=1&#8242; means that all these widgets are being powered up, val=0 would show power down.</li>
<li>snd_soc_reg_write events show values written to registers.</li>
<li>snd_soc_reg_read events show values read from registers &#8211; these reads may be done from the register cache, or may be from the hardware.</li>
<li>snd_soc_dapm_widget_event_start and snd_soc_dapm_widget_event_done show the time spent in per-widget event callbacks.</li>
</ul>
<p>The set of events traced will change as the subsystem develops and as people gain more experience with using the trace API.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2011/01/22/tracing-asoc-with-trace-points/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASoC changes in 2.6.37</title>
		<link>http://www.sirena.org.uk/log/2011/01/05/asoc-changes-in-2-6-37/</link>
		<comments>http://www.sirena.org.uk/log/2011/01/05/asoc-changes-in-2-6-37/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 11:34:45 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[ASoC]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planet Debian]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[88PM860x]]></category>
		<category><![CDATA[EP93xx]]></category>
		<category><![CDATA[Freescale]]></category>
		<category><![CDATA[HDMI]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[Marvell]]></category>
		<category><![CDATA[MAX98088]]></category>
		<category><![CDATA[MAX98089]]></category>
		<category><![CDATA[MPC85xx]]></category>
		<category><![CDATA[multi component]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[SH]]></category>
		<category><![CDATA[WM8804]]></category>
		<category><![CDATA[WM8962]]></category>
		<category><![CDATA[WM8985]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=313</guid>
		<description><![CDATA[2.6.37, which was released today, has been a very big release for ASoC &#8211; about 40,000 lines of changes covering every single file within the subsystem plus a bunch of new drivers. The highlights are: Overhaul of the core APIs for registration of all kinds of devices from my co-maintainer Liam Girdwood, reducing the level of [...]]]></description>
			<content:encoded><![CDATA[<p>2.6.37, which was released today, has been a very big release for ASoC &#8211; about 40,000 lines of changes covering every single file within the subsystem plus a bunch of new drivers. The highlights are:</p>
<ul>
<li>Overhaul of the core APIs for registration of all kinds of devices from my co-maintainer <a href="http://www.slimlogic.co.uk/">Liam Girdwood,</a> reducing the level of direct coupling between machine drivers and their CODEC and CPU drivers allowing ASoC machines to have multiple CODEC devices and multiple instances of the same CODEC device within a system.</li>
<li>New CODEC drivers for  88PM860x CODEC, MAX98088/9, WL1273, WM8962, WM8804, and WM8985.</li>
<li>New CPU drivers for EP93xx AC&#8217;97 controllers, MPC﻿85xx SSI ports, and SH HDMI controllers.</li>
<li>Machine support for Freescale P1022 DS, Marvell Tavor and Saarb and Simplemachines Sim.One</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2011/01/05/asoc-changes-in-2-6-37/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASoC updates in 2.6.35</title>
		<link>http://www.sirena.org.uk/log/2010/08/03/asoc-updates-in-2-6-35/</link>
		<comments>http://www.sirena.org.uk/log/2010/08/03/asoc-updates-in-2-6-35/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 07:08:40 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[ASoC]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planet Debian]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=274</guid>
		<description><![CDATA[Linux 2.6.35 has been a fairly interesting release from an ASoC point of view, with several notable framework enhancements: Support for keeping audio paths through the CODEC up during system suspend, primarily intended for use with devices where the Linux system is one of several independent systems running on the device and the other systems [...]]]></description>
			<content:encoded><![CDATA[<p>Linux 2.6.35 has been a fairly interesting release from an ASoC point of view, with several notable framework enhancements:</p>
<ul>
<li>Support for keeping audio paths through the CODEC up during system suspend, primarily intended for use with devices where the Linux system is one of several independent systems running on the device and the other systems (like the cellular modem in a phone) can maintain useful audio paths even when the Linux system is inactive.</li>
<li>Enhancements to the jack detection infrastructure, including the addition of notifiers on jack status changes (allowing better integration of physical jack detection with electronic methods) and snd_soc_dapm_force_enable_pin() (which allows DAPM managed supplies such as microphone biases to be forced on). For example, jack status change notifications can be used to enable microphone detection via bias current sense only when a microphone is physically present.</li>
<li>Support for knot and continuous PCM rates in the core.</li>
<li>SMDK6410 5.1 audio support, TI SDP4030 audio support, and basic support for playback on the 1133-EV1 PMIC module for Freescale i.MX31ADS systems (currently limited by the support for the SSI interface on the i.MX31).</li>
<li>Support for DaVinci integrated voice CODECs, Philips UDA1345 CODEC, SuperH FSI2 interfaces, TI OMAP4, TWL6040 CODECs, WM9090 audio subsystem.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2010/08/03/asoc-updates-in-2-6-35/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASoC updates in 2.6.34</title>
		<link>http://www.sirena.org.uk/log/2010/05/17/asoc-updates-in-2-6-34/</link>
		<comments>http://www.sirena.org.uk/log/2010/05/17/asoc-updates-in-2-6-34/#comments</comments>
		<pubDate>Mon, 17 May 2010 04:03:43 +0000</pubDate>
		<dc:creator>Mark Brown</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planet Debian]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[ASoC]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://www.sirena.org.uk/log/?p=251</guid>
		<description><![CDATA[Linux 2.6.34 was released today. This contains a fairly substantial batch of ASoC updates, including: Support for turning CODEC biases off completely when idle, providing power savings for modern devices with ground referenced outputs where this can be done quickly at runtime without pops and clicks. Support for disabling physical writes to the device in [...]]]></description>
			<content:encoded><![CDATA[<p>Linux 2.6.34 was released today. This contains a fairly substantial batch of ASoC updates, including:</p>
<ul>
<li>Support for turning CODEC biases off completely when idle, providing power savings for modern devices with ground referenced outputs where this can be done quickly at runtime without pops and clicks.</li>
<li>Support for disabling physical writes to the device in the generic cache control code, allowing devices to be completely powered off when idle while still providing their control to userspace through the standard register interfaces.</li>
<li>Support for tuning the time ASoC waits before powering things down after playback has finished (in order to involve issues between tracks or similar) at runtime or from the machine driver.</li>
<li>New drivers for DA7210, DB1200 I2S and AC97 controllers, i.MX3x SSI ports, OMAP4 McPDM ports, S3C64xx AC97 controller, SH SIU (Sound Interface Unit), WM2000, WM8904, WM8912, WM8955, WM8978, and WM8994</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sirena.org.uk/log/2010/05/17/asoc-updates-in-2-6-34/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

