<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.openmoko.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.openmoko.org/api.php?action=feedcontributions&amp;user=CesarB&amp;feedformat=atom</id>
		<title>Openmoko - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.openmoko.org/api.php?action=feedcontributions&amp;user=CesarB&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Special:Contributions/CesarB"/>
		<updated>2013-05-20T08:23:04Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.6</generator>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-07T11:17:13Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: add wiki user for Brenda&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
== Officials members of the Openmoko Team ==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || {{user|allen_chang}} || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Candy Chou || || {{user|candy_chou}} || || GTA/HXD Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Dkay Chen || || {{user|dkay_chen}} || || GTA/HXD Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Graeme Gregory || ''graeme'' at openmoko dot ''org'' || || XorA ||&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || raster || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || {{user|Matt}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || {{user|Mickey}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || {{user|Tim}} || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || {{user|steve}} || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || {{user|Sean}} || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Shawn Lin || || {{user|shawn_lin}} || || RF Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || {{user|jOERG}} || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || ''michael'' at openmoko dot ''org'' || {{user|Michaelshiloh}} || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || {{user|Roh}} || roh || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || {{user|Tony Tu}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || {{user|Coolcat}} || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || ''laforge'' at openmoko dot ''org'' || {{user|HaraldWelte}} || LaF0rge || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || {{user|DanielWillmann}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || {{user|ThomasWood}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proeminent community members ==&lt;br /&gt;
&lt;br /&gt;
Only add people who made a significant contribution to the Openmoko community.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Lorn Potter || ''lpotter'' at ''trolltech'' dot ''com'' || || lpotter || Qtopia developer&lt;br /&gt;
|-&lt;br /&gt;
| Rod Whitby || || {{user|RodWhitby}} || rwhitby || [[MokoMakefile]] author&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[The original core team]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko Inc]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wiki_statistic_numbers</id>
		<title>Wiki statistic numbers</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wiki_statistic_numbers"/>
				<updated>2008-08-07T11:14:51Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: fix links; fmt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Openmoko uses Google Analytics to get visitor's information. On this page, you can find every kind of wiki statistic numbers.&lt;br /&gt;
&lt;br /&gt;
==July, 2008==&lt;br /&gt;
&lt;br /&gt;
*[[Media:Top250content.pdf|Top 250 content]]&lt;br /&gt;
*[[Media:Keyword.pdf|Search Keyword]]&lt;br /&gt;
*[[Media:Exitpage.pdf|Top leaving pages]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-05T00:18:29Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: another email&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
== Officials members of the Openmoko Team ==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || {{user|allen_chang}} || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Graeme Gregory || ''graeme'' at openmoko dot ''org'' || || XorA ||&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || raster || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || {{user|Matt}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || {{user|Mickey}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || {{user|Tim}} || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || {{user|steve}} || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || {{user|Sean}} || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || {{user|jOERG}} || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || ''michael'' at openmoko dot ''org'' || {{user|Michaelshiloh}} || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || {{user|Roh}} || roh || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || {{user|Tony Tu}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || ''laforge'' at openmoko dot ''org'' || {{user|HaraldWelte}} || LaF0rge || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || {{user|DanielWillmann}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || {{user|ThomasWood}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proeminent community members ==&lt;br /&gt;
&lt;br /&gt;
Only add people who made a significant contribution to the Openmoko community.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Lorn Potter || ''lpotter'' at ''trolltech'' dot ''com'' || || lpotter || Qtopia developer&lt;br /&gt;
|-&lt;br /&gt;
| Rod Whitby || || {{user|RodWhitby}} || rwhitby || [[MokoMakefile]] author&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[The original core team]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko Inc]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T11:12:19Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: lpotter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
== Officials members of the Openmoko Team ==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || {{user|allen_chang}} || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Graeme Gregory || ''graeme'' at openmoko dot ''org'' || || XorA ||&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || raster || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || {{user|Matt}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || {{user|Mickey}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || {{user|Tim}} || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || {{user|steve}} || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || {{user|Sean}} || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || {{user|jOERG}} || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || || {{user|Michaelshiloh}} || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || {{user|Roh}} || roh || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || {{user|Tony Tu}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || ''laforge'' at openmoko dot ''org'' || {{user|HaraldWelte}} || LaF0rge || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || {{user|DanielWillmann}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || {{user|ThomasWood}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proeminent community members ==&lt;br /&gt;
&lt;br /&gt;
Only add people who made a significant contribution to the Openmoko community.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Lorn Potter || ''lpotter'' at ''trolltech'' dot ''com'' || || lpotter || Qtopia developer&lt;br /&gt;
|-&lt;br /&gt;
| Rod Whitby || || {{user|RodWhitby}} || rwhitby || [[MokoMakefile]] author&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[The original core team]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T11:10:16Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: graeme/XorA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
== Officials members of the Openmoko Team ==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || {{user|allen_chang}} || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Graeme Gregory || ''graeme'' at openmoko dot ''org'' || || XorA ||&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || raster || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || {{user|Matt}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || {{user|Mickey}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || {{user|Tim}} || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || {{user|steve}} || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || {{user|Sean}} || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || {{user|jOERG}} || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || || {{user|Michaelshiloh}} || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || {{user|Roh}} || roh || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || {{user|Tony Tu}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || ''laforge'' at openmoko dot ''org'' || {{user|HaraldWelte}} || LaF0rge || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || {{user|DanielWillmann}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || {{user|ThomasWood}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proeminent community members ==&lt;br /&gt;
&lt;br /&gt;
Only add people who made a significant contribution to the Openmoko community.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Rod Whitby || || {{user|RodWhitby}} || rwhitby || [[MokoMakefile]] author&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[The original core team]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T01:59:03Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: add community members section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
== Officials members of the Openmoko Team ==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || {{user|allen_chang}} || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || raster || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || {{user|Matt}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || {{user|Mickey}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || {{user|Tim}} || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || {{user|steve}} || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || {{user|Sean}} || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || {{user|jOERG}} || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || || {{user|Michaelshiloh}} || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || {{user|Roh}} || roh || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || {{user|Tony Tu}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || ''laforge'' at openmoko dot ''org'' || {{user|HaraldWelte}} || LaF0rge || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || {{user|DanielWillmann}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || {{user|ThomasWood}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proeminent community members ==&lt;br /&gt;
&lt;br /&gt;
Only add people who made a significant contribution to the Openmoko community.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Rod Whitby || || {{user|RodWhitby}} || rwhitby || [[MokoMakefile]] author&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[The original core team]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T01:49:45Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: add see also&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
== Officials members of the Openmoko Team ==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || {{user|allen_chang}} || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || raster || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || {{user|Matt}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || {{user|Mickey}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || {{user|Tim}} || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || {{user|steve}} || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || {{user|Sean}} || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || {{user|jOERG}} || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || || {{user|Michaelshiloh}} || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || {{user|Roh}} || roh || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || {{user|Tony Tu}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || ''laforge'' at openmoko dot ''org'' || {{user|HaraldWelte}} || LaF0rge || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || {{user|DanielWillmann}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || {{user|ThomasWood}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[The original core team]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T01:47:31Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: use {{user}} template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
==Officials members of the Openmoko Team==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || {{user|allen_chang}} || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || raster || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || {{user|Matt}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || {{user|Mickey}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || {{user|Tim}} || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || {{user|steve}} || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || {{user|Sean}} || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || {{user|jOERG}} || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || || {{user|Michaelshiloh}} || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || {{user|Roh}} || roh || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || {{user|Tony Tu}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || ''laforge'' at openmoko dot ''org'' || {{user|HaraldWelte}} || LaF0rge || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || {{user|DanielWillmann}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || {{user|ThomasWood}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Template:User</id>
		<title>Template:User</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Template:User"/>
				<updated>2008-08-04T01:44:13Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: based on Wikipedia's Template:User&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:{{{1}}}|{{{1}}}]]&amp;amp;nbsp;([[User talk:{{{1}}}|talk]]&amp;amp;nbsp;'''·''' [[Special:Contributions/{{{1}}}|contribs]])&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T01:41:14Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: add another email and nickname&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
==Officials members of the Openmoko Team==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || [[User:allen_chang|allen_chang]] || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || raster || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || [[User:Matt|Matt]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || [[User:Mickey|Mickey]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || [[User:Tim|Tim]] || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || [[User:steve|steve]] || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || [[User:Sean|Sean]] || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || [[User:jOERG|jOERG]] || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || || [[User:Michaelshiloh|Michaelshiloh]] || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || [[User:Roh|Roh]] || roh || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || [[User:Tony Tu|Tony Tu]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || ''laforge'' at openmoko dot ''org'' || [[User:HaraldWelte|HaraldWelte]] || LaF0rge || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || [[User:DanielWillmann|DanielWillmann]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || [[User:ThomasWood|ThomasWood]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T01:38:51Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: add a couple of IRC nicknames&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
==Officials members of the Openmoko Team==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || [[User:allen_chang|allen_chang]] || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || [[User:Matt|Matt]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || [[User:Mickey|Mickey]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || [[User:Tim|Tim]] || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || [[User:steve|steve]] || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || [[User:Sean|Sean]] || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || [[User:jOERG|jOERG]] || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || || [[User:Michaelshiloh|Michaelshiloh]] || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || [[User:Roh|Roh]] || roh || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || [[User:Tony Tu|Tony Tu]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || || [[User:HaraldWelte|HaraldWelte]] || LaF0rge || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || [[User:DanielWillmann|DanielWillmann]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || [[User:ThomasWood|ThomasWood]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T01:34:09Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: clear unknown cells in the last column too&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
==Officials members of the Openmoko Team==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || [[User:allen_chang|allen_chang]] || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || [[User:Matt|Matt]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || [[User:Mickey|Mickey]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || [[User:Tim|Tim]] || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || [[User:steve|steve]] || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || [[User:Sean|Sean]] || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || [[User:jOERG|jOERG]] || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || || [[User:Michaelshiloh|Michaelshiloh]] || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || [[User:Roh|Roh]] || || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || [[User:Tony Tu|Tony Tu]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || || [[User:HaraldWelte|HaraldWelte]] || || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || [[User:DanielWillmann|DanielWillmann]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || [[User:ThomasWood|ThomasWood]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T01:33:16Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: clear unknown table cells; show real wiki username instead of hiding it within the link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
==Officials members of the Openmoko Team==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || [[User:allen_chang|allen_chang]] || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || || (title unknown)&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || [[User:Matt|Matt]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || [[User:Mickey|Mickey]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || [[User:Tim|Tim]] || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || [[User:steve|steve]] || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || [[User:Sean|Sean]] || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || [[User:jOERG|jOERG]] || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || || [[User:Michaelshiloh|Michaelshiloh]] || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || [[User:Roh|Roh]] || || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || [[User:Tony Tu|Tony Tu]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || || [[User:HaraldWelte|HaraldWelte]] || || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || [[User:DanielWillmann|DanielWillmann]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || [[User:ThomasWood|ThomasWood]] || || (title unknown)&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T01:30:45Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: split columns&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
==Officials members of the Openmoko Team==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || [[User:allen_chang|Allen Chang]] || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || ''?'' at openmoko dot ''?'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || ''?'' at openmoko dot ''?'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen ||''jollen'' at openmoko dot ''org'' || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || ''tick'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || || (title unknown)&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || [[User:Matt|Matt_Hsu]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || ''?'' at openmoko dot ''?'' || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || ''?'' at openmoko dot ''?'' || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || [[User:Mickey|Mickey]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || ''?'' at openmoko dot ''?'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || [[User:Tim|Tim_Lee]] || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || ''?'' at openmoko dot ''?'' || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || [[User:steve|steve]] || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || [[User:Sean|Sean]] || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || [[User:jOERG|jOERG]] || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || || [[User:Michaelshiloh|Michaelshiloh]] || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || [[User:Roh|Roh]] || || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || [[User:Tony Tu|Tony Tu]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || || [[User:HaraldWelte|LaForge]] || || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || [[User:DanielWillmann|DanielWillmann]] || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || [[User:ThomasWood|ThomasWood]] || || (title unknown)&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || ''?'' at openmoko dot ''?'' || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T01:26:05Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: reorder columns in preparation to split username/email column&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
==Officials members of the Openmoko Team==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! Username / email !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || [[User:allen_chang|Allen Chang]] || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || ''?'' at openmoko dot ''?'' || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || ''?'' at openmoko dot ''?'' || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen ||''jollen'' at openmoko dot ''org'' ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || ''tick'' at openmoko dot ''com'' || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || (title unknown)&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || [[User:Matt|Matt_Hsu]] || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || ''?'' at openmoko dot ''?'' || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || ''?'' at openmoko dot ''?'' || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || [[User:Mickey|Mickey]] || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || ''?'' at openmoko dot ''?'' || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || [[User:Tim|Tim_Lee]] || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || ''?'' at openmoko dot ''?'' || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || [[User:steve|steve]] || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || [[User:Sean|Sean]] || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || [[User:jOERG|jOERG]] || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || [[User:Michaelshiloh|Michaelshiloh]] || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || [[User:Roh|Roh]] || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || [[User:Tony Tu|Tony Tu]] || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || [[User:HaraldWelte|LaForge]] || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || [[User:DanielWillmann|DanielWillmann]] || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || [[User:ThomasWood|ThomasWood]] || (title unknown)&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || ''?'' at openmoko dot ''?'' || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T01:21:21Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: lead section should not have a heading; rm useless &amp;lt;br&amp;gt; tags; minor whitespace fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
==Officials members of the Openmoko Team==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Username / email !! Name  !! Position&lt;br /&gt;
|-&lt;br /&gt;
| [[User:allen_chang|Allen Chang]] || Allen Chang || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || Anthony Chang || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || Jeremy Chang || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''jollen'' at openmoko dot ''org'' || Jollen Chen || Marketing&lt;br /&gt;
|-&lt;br /&gt;
| ''tick'' at openmoko dot ''com'' || Tick Chen || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''charlie'' at openmoko dot ''org'' || Guillaume 'Charlie' Chereau || (title unknown)&lt;br /&gt;
|-&lt;br /&gt;
| ''julian_chu'' at openmoko dot ''com'' || Julian Chu || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''zecke'' at openmoko dot ''org'' || Holger 'Zecke' Freyther || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''andy'' at openmoko dot ''com'' || Andy Green || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''raster'' at openmoko dot ''org'' || Carsten Haitzler || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Matt|Matt_Hsu]] || Matt Hsu || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || Wendy Hung || Testing&lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || Regina Kim || Testing&lt;br /&gt;
|-&lt;br /&gt;
| ''will'' at openmoko dot ''com'' || William Lai || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Mickey|Mickey]] || Michael 'Mickey' Lauer || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || John Lee || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Tim|Tim_Lee]] || Tim Lee || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| ''marek'' at openmoko dot ''com'' || Marek Lindner || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''xiangfu'' at openmoko dot ''org'' || Xiangfu Liu || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || Jan 'Shoragan' Luebbe || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:steve|steve]] || Steven Mosher || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Sean|Sean]] || Sean Moss-Pultz || CEO&lt;br /&gt;
|-&lt;br /&gt;
| [[User:jOERG|jOERG]] || Joerg Reisenweber || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Michaelshiloh|Michaelshiloh]] || Michael Shiloh || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| ''wolfgang'' at openmoko dot ''com'' || Wolfgang Spraul || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Roh|Roh]] || Joachim Steiger || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| ''harry'' at openmoko dot ''com'' || Harry Tsai || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Tony Tu|Tony Tu]] || Neng-Yu 'Tony' Tu || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''brenda_wang'' at openmoko dot ''com'' || Brenda Wang || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| [[User:HaraldWelte|LaForge]] || Harald Welte || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:DanielWillmann|DanielWillmann]] || Daniel 'Alphaone' Willmann || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ThomasWood|ThomasWood]] || Thomas Wood || (title unknown)&lt;br /&gt;
|-&lt;br /&gt;
| ''olv'' at openmoko dot ''org'' || OLV Wu || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || Erin Yeh || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-04T01:18:31Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: Whoiswho moved to Who is Who&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Why this page ?==&lt;br /&gt;
&lt;br /&gt;
If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something ?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Officials members of the Openmoko Team==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Username / email !! Name  !! Position&lt;br /&gt;
|-&lt;br /&gt;
| [[User:allen_chang|Allen Chang]] || Allen Chang || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || Anthony Chang || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || Jeremy Chang || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''jollen'' at openmoko dot ''org'' || Jollen Chen || Marketing&lt;br /&gt;
|-&lt;br /&gt;
| ''tick'' at openmoko dot ''com'' || Tick Chen || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''charlie'' at openmoko dot ''org'' || Guillaume 'Charlie' Chereau || (title unknown)&lt;br /&gt;
|-&lt;br /&gt;
| ''julian_chu'' at openmoko dot ''com'' || Julian Chu || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''zecke'' at openmoko dot ''org'' || Holger 'Zecke' Freyther || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''andy'' at openmoko dot ''com'' || Andy Green || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''raster'' at openmoko dot ''org'' || Carsten Haitzler || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Matt|Matt_Hsu]] || Matt Hsu || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || Wendy Hung || Testing&lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || Regina Kim || Testing&lt;br /&gt;
|-&lt;br /&gt;
| ''will'' at openmoko dot ''com'' || William Lai || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Mickey|Mickey]] || Michael 'Mickey' Lauer || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || John Lee || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Tim|Tim_Lee]] || Tim Lee || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| ''marek'' at openmoko dot ''com'' || Marek Lindner || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''xiangfu'' at openmoko dot ''org'' || Xiangfu Liu || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || Jan 'Shoragan' Luebbe || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:steve|steve]] || Steven Mosher || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Sean|Sean]] || Sean Moss-Pultz || CEO&lt;br /&gt;
|-&lt;br /&gt;
| [[User:jOERG|jOERG]] || Joerg Reisenweber || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Michaelshiloh|Michaelshiloh]] || Michael Shiloh || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| ''wolfgang'' at openmoko dot ''com'' || Wolfgang Spraul || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Roh|Roh]] || Joachim Steiger || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| ''harry'' at openmoko dot ''com'' || Harry Tsai || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Tony Tu|Tony Tu]] || Neng-Yu 'Tony' Tu || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''brenda_wang'' at openmoko dot ''com'' || Brenda Wang || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| [[User:HaraldWelte|LaForge]] || Harald Welte || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:DanielWillmann|DanielWillmann]] || Daniel 'Alphaone' Willmann || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ThomasWood|ThomasWood]] || Thomas Wood || (title unknown)&lt;br /&gt;
|-&lt;br /&gt;
| ''olv'' at openmoko dot ''org'' || OLV Wu || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| ''?'' at openmoko dot ''?'' || Erin Yeh || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo_1973_hardware</id>
		<title>Neo 1973 hardware</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo_1973_hardware"/>
				<updated>2008-03-08T22:23:59Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Analog wired Headset */ copy pinout from mailing list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[OpenMoko]] is a software distribution stack that sits on top of a [[hardware]] platform.  The [[Neo1973]] phone is the first hardware platform to take advantage of OpenMoko.  You can find specifics of the [[:Category:Neo1973 Hardware | Neo1973 Hardware]] by reviewing this introduction page and the pages in the category as shown at the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
'''Note that this page is about the first OpenMoko phone which is now discontinued. See details on the second OpenMoko phone at this page - [[Neo FreeRunner GTA02 Hardware]].'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Gta01b v3 top.jpg|thumb|400px|display (top) side]]&lt;br /&gt;
[[Image:Gta01b v3 bottom.jpg|thumb|400px|component (back) side]]&lt;br /&gt;
&lt;br /&gt;
==User experiences of Phase 0 hardware==&lt;br /&gt;
[[Wishlist:Neo1973_P0_Review]]&lt;br /&gt;
&lt;br /&gt;
==User reports of robustness==&lt;br /&gt;
User experiences - drops onto concrete - ... [[Neo1973 Robustness]]&lt;br /&gt;
&lt;br /&gt;
== Physical Dimensions ==&lt;br /&gt;
* 120.7 x 62 x 18.5 mm (4.75 x 2.44 x 0.728 inch)&lt;br /&gt;
* 184 +/- 5 g (6.5 ounces)&lt;br /&gt;
* For the purposes of acquiring/cutting a properly sized screen protector, the display hole of the case is about 45 x 59 mm, while the top cover internal frame can house up to a 53 x 74 mm protector; sizes much larger than the display hole would obviously necessitate removing the front cover for installation.&lt;br /&gt;
* A Useful size comparison between the Neo1973, iPhone, Motorola A1200 and the SEM600i can be seen at [http://www.sizeasy.com/page/size_comparison/5512-Neo1973-vs-Apple-iPhone-vs-M600i-2-vs-A-1200 sizeasy]&lt;br /&gt;
&lt;br /&gt;
== Main components ==&lt;br /&gt;
=== Processor ===&lt;br /&gt;
The main Processor (CPU) of the Neo1973 is a Samsung S3C2410AL-26 (Capable of running up to 266 MHz)&lt;br /&gt;
&lt;br /&gt;
* Product Homepage: [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&amp;amp;partnum=S3C2410 S3C2410.htm]&lt;br /&gt;
* User Manual: [http://www.samsung.com/global/business/semiconductor/productRightMenuDown.do?doc_file=26537 2410UserManual.pdf]&lt;br /&gt;
* Core: ARM920T&lt;br /&gt;
* Instruction Set: ARMv4 (Android ''currently'' requires ARMv5)&lt;br /&gt;
* BSDL File: [http://www.samsung.com/global/business/semiconductor/productRightMenuDown.do?doc_file=26554 S3C2410_BGA_BSDLJTAGFILE.bsd]&lt;br /&gt;
* GPIO Assignments: https://svn.openmoko.org/trunk/doc/hardware/GTA01Bv4/gpio.txt&lt;br /&gt;
&lt;br /&gt;
=== Flash ===&lt;br /&gt;
64MB Samsung NAND flash (K9F1208U0B) attached to S3C2410 NAND controller.&lt;br /&gt;
&lt;br /&gt;
* Product Homepage: [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=158&amp;amp;partnum=K9F1208U0B]&lt;br /&gt;
* Data Sheet: [http://www.samsung.com/global/system/business/semiconductor/product/2007/6/11/NANDFlash/SLC_SmallBlock/512Mbit/K9F1208U0B/ds_k9f1208x0b_rev03.pdf]&lt;br /&gt;
* Connected to: S3C2410 NAND controller&lt;br /&gt;
&lt;br /&gt;
This is the only flash memory in the device.  The S3C2410 boots directly from nand, using the [[S3C2410 Steppingstone]].&lt;br /&gt;
&lt;br /&gt;
We only use free software, no proprietary flash file systems.  For a full description of how it is used, see [[NAND bad blocks]]&lt;br /&gt;
&lt;br /&gt;
=== RAM ===&lt;br /&gt;
128MB SDRAM (2x Samsung K4M511633C) attached to S3C2410 SDRAM controller&lt;br /&gt;
* Product Homepage: [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=136&amp;amp;partnum=K4M511633C]&lt;br /&gt;
* Data Sheet: [http://www.samsung.com/global/system/business/semiconductor/product/2007/6/11/MobileSDRAM/MobileSDRSDRAM/512Mbit/K4M511633C/ds_k4m511633c.pdf]&lt;br /&gt;
* Connected to: S3C2410 &lt;br /&gt;
&lt;br /&gt;
=== GSM/GPRS ===&lt;br /&gt;
The [[GSM]] (including GPRS) modem is Texas Instruments Calypso based.&lt;br /&gt;
&lt;br /&gt;
* Connected to: S3C2410 UART1 (full-uart, RxD, TxD, CTS, RTS), /dev/ttySAC0 in userspace&lt;br /&gt;
* PM Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-power_control.patch&lt;br /&gt;
* Accessible GSM/GPRS antenna jack (if battery cover is removed)&lt;br /&gt;
&lt;br /&gt;
==== CALYPSO digital baseband ====&lt;br /&gt;
Unfortunately we cannot provide many details on the GSM chipset due to very tight NDAs.  However, this is not neccessarily required, since it interfaces using a standard UART serial line with the S3C2410.  On that interface, [http://www.3gpp.org/ftp/Specs/archive/07_series/07.05/ GSM 07.05], [http://www.3gpp.org/ftp/Specs/archive/07_series/07.10/ GSM 07.10] and other standardized protocols are used.&lt;br /&gt;
&lt;br /&gt;
==== TWL3014 analog baseband ====&lt;br /&gt;
Product Homepage: [http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&amp;amp;navigationId=12295&amp;amp;contentId=4703 TWL3014]&lt;br /&gt;
&lt;br /&gt;
==== TRF6151 RF Transceiver ====&lt;br /&gt;
Product Homepage: [http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&amp;amp;navigationId=12296&amp;amp;contentId=4701 TRF6151] &amp;lt;br&amp;gt;&lt;br /&gt;
GPRS Class12/CS4 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Hardware:AGPS|AGPS]] ===&lt;br /&gt;
Hammerhead PMB 2520 AGPS from Global Locate.&lt;br /&gt;
&lt;br /&gt;
* Product Homepage: [http://www.globalocate.com/SEMICONDUCTORS/SEMI_HAMMER_Frameset.htm Hammerhead]&lt;br /&gt;
* Connected to: S3C2410 UART2 (full-uart, RxD, TxD, CTS, RTS) /dev/ttySAC1 in userspace&lt;br /&gt;
* Driver: Implemented as a binary with NMEA output suitable for the gpsd daemon ([[gpsd]])&lt;br /&gt;
* PM Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-power_control.patch&lt;br /&gt;
* Externally-accessible GPS antenna connector of type MMCX&lt;br /&gt;
&lt;br /&gt;
The binary driver is available - see [[GLLIN]]. &lt;br /&gt;
Efforts to reverse engineer the protocol are partially detailed in [[Hammerhead/Protocol]], these have stalled since the announcement that [[FreeRunner]] will use a different GPS.&lt;br /&gt;
&lt;br /&gt;
=== microSD-Card ===&lt;br /&gt;
The Neo1973 has one microSD aka Transflash slot.&lt;br /&gt;
It supports SDHC.  MicroSD slot is [[Disassembling_Neo1973#Opening_back_cover|under battery]].&lt;br /&gt;
* Connected to: S3C2410 MMC/SD controller&lt;br /&gt;
* Mounted to: /media/card&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/s3c_mci.patch&lt;br /&gt;
* [[Supported microSD cards]]&lt;br /&gt;
* Specifications: [http://www.sdcard.org/confirm/confirm_memorycard.aspx SD Simplified Specification], [http://www.mmca.org/compliance/buy_spec/AN_MMCA050419.pdf MMC (partial)], [http://www.sandisk.com/Assets/File/OEM/Manuals/manual-rs-mmcv1.0.pdf MMC (product manual)]&lt;br /&gt;
&lt;br /&gt;
=== LCD Module (LCM) ===&lt;br /&gt;
This is a 2.8&amp;quot; diagonal (1.7&amp;quot; x 2.27&amp;quot; - 43mm x 58mm) 480x640 toppoly (tpo) TD028TTEC1 module (283 DPI), using a Toshiba JBT6K74 TFT LCD Driver Chipset.&lt;br /&gt;
* Homepage: [http://www.tpo.biz/ENG/business-eng/Activer-Matrix-VGA.htm Activer-Matrix-VGA.htm]&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-jbt6k74.patch&lt;br /&gt;
* Backlight Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-backlight.patch&lt;br /&gt;
* Connected to: S3C2410 Display Controller and S3C2410 SPI Interface channel 1&lt;br /&gt;
* Backlight controllable via /sys/class/backlight/gta01-bl&lt;br /&gt;
&lt;br /&gt;
==== Touch Screen ====&lt;br /&gt;
* Connected to: S3C2410 TS controller&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/s3c2410_touchscreen.patch&lt;br /&gt;
&lt;br /&gt;
==== Stylus ====&lt;br /&gt;
&lt;br /&gt;
Seemingly identical to [http://cgi.ebay.com/4in1-PDA-Stylus-LED-Light-Torch-Laser-Pointer-Pen-h7_W0QQitemZ280089656134QQihZ018QQcategoryZ48677QQrdZ1QQcmdZViewItem this one on ebay]&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth ===&lt;br /&gt;
Delta DFBM-CS320 Class2 Module, using CSR BlueCore4 (V2.0+EDR).&lt;br /&gt;
&lt;br /&gt;
* Data Sheet: [http://www.delta.com.tw/product/cp/vco/BT/download/pdf/CS/2.DFBM-CS320.pdf 2.DFBM-CS320.pdf]&lt;br /&gt;
* CSR Data Sheet: [http://www.csrsupport.com/download/2302/CS-101564-DSP10%20BlueCore4-ROM%20Product%20Data%20Sheet.pdf CS-101564-DSP10 BlueCore4-ROM Product Data Sheet.pdf]&lt;br /&gt;
* Driver: Stock Linux Kernel BlueZ&lt;br /&gt;
* Connected to: S3C2410 USB Host controller (OHCI)&lt;br /&gt;
* PM Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-power_control.patch&lt;br /&gt;
&lt;br /&gt;
=== Vibrator ===&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-vibrator.patch&lt;br /&gt;
* Connected to: S3C2410 GPIO&lt;br /&gt;
* Controllable via /sys/class/leds/gta01:vibrator&lt;br /&gt;
&lt;br /&gt;
=== USB Host ===&lt;br /&gt;
The USB Host controller is inside the S3C2410&lt;br /&gt;
* Driver: Stock Linux kernel ohci_hcd&lt;br /&gt;
&lt;br /&gt;
=== USB Device ===&lt;br /&gt;
The USB Device controller is inside the S3C2410 &lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/s3c2410_udc.patch&lt;br /&gt;
* Please see [[USB Product IDs]] on information about which Vendor/Product IDs we use&lt;br /&gt;
* 1200mAh lithium battery charges when connected to powered host.&lt;br /&gt;
* Mini-B connector [http://www.cypressindustries.com/enlarge.asp?Img=products/images/ccmusbb-32005-601.gif this one].&lt;br /&gt;
* This can be used as a USB host: [[Neo1973_USB_host]]&lt;br /&gt;
&lt;br /&gt;
=== I2C Devices ===&lt;br /&gt;
The I2C is a simple communication standard intended to move small amounts of data a few inches between chips.&lt;br /&gt;
Please see [[I2C | Neo I2C Devices]] for more information &amp;amp; a list of devices &amp;amp; the addresses currently in use &amp;amp; documented for the Neo1973.&lt;br /&gt;
&lt;br /&gt;
=== Audio ===&lt;br /&gt;
See also: [[Neo1973 Audio Subsystem]]&lt;br /&gt;
&lt;br /&gt;
==== Wolfson Codec ====&lt;br /&gt;
&lt;br /&gt;
''Main article: [[WM8753]]''&lt;br /&gt;
&lt;br /&gt;
There's a [[WM8753]] Wolfson Microelectronics ''codec'' (This is not a &amp;quot;smart&amp;quot; codec that can interpret MP3/... it is a simple dumb &amp;quot;sound card&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Stereo Amplifier ====&lt;br /&gt;
There's a National Semiconductor [[LM4857]] Stereo Amplifier at the analog audio output of the WM8753&lt;br /&gt;
&lt;br /&gt;
* Product Homepage: [http://www.national.com/pf/LM/LM4857.html LM4857.html]&lt;br /&gt;
* Data Sheet: [http://www.national.com/ds.cgi/LM/LM4857.pdf LM4857.pdf]&lt;br /&gt;
* Connects to: S3C2410 I2C (Control)&lt;br /&gt;
&lt;br /&gt;
==== Analog wired Headset ====&lt;br /&gt;
There's a four-ring 2.5mm stereo jack which provides connectivity to old-fashioned wired headsets.&lt;br /&gt;
&lt;br /&gt;
The headsets used by Motorola smartphones (A780,A1200, ...) and the V-360 have a compatible configuration.&lt;br /&gt;
&lt;br /&gt;
Pinout: [http://lists.openmoko.org/pipermail/community/2008-March/013791.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
base = ground &lt;br /&gt;
speaker left  (internal impedance 33R) to ground. (+jackinsert detection)&lt;br /&gt;
speaker right (internal impedance 33R) to ground.&lt;br /&gt;
tip = mic electret condenser type, to ground. &lt;br /&gt;
      bias (power for mic) 2K2 from +3.3v(wolfson codec) &lt;br /&gt;
      (+HoldButton shortcircuit to ground)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth Headset ====&lt;br /&gt;
This one is wired via PCM bus from the CSR Bluetooth chip to the Wolfson codec.&lt;br /&gt;
&lt;br /&gt;
=== Power Management ===&lt;br /&gt;
A Philips PCF50606 is used for [[Neo1973_Power_Management|power management]].&lt;br /&gt;
&lt;br /&gt;
* Data Sheet: [http://www.nxp.com/acrobat/literature/9397/75009763.pdf PCF50606/605]&lt;br /&gt;
* User Manual: [http://www.rockbox.org/twiki/pub/Main/DataSheets/pcf50606.pdf pcf50606.pdf]&lt;br /&gt;
* Connected to: S3C2410 via I2C, client address is 0x08. &lt;br /&gt;
* Driver Source: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-pcf50606.patch&lt;br /&gt;
&lt;br /&gt;
=== Battery ===&lt;br /&gt;
The [[Neo1973 Battery]] is compatible with a Nokia BL5C battery.&lt;br /&gt;
According to [http://lists.openmoko.org/pipermail/community/2007-February/003758.html this] post on the mailinglist.&lt;br /&gt;
[http://wiki.openmoko.org/index.php?title=Image:Neo1973-with-BL5C-battery.png Photo] of the battery inside the Neo1973.&lt;br /&gt;
&lt;br /&gt;
=== Buttons ===&lt;br /&gt;
The Neo1973 features two buttons:&lt;br /&gt;
# [[Neo1973 Power Button|The Power Button]]&lt;br /&gt;
# [[Neo1973 AUX Button|The &amp;quot;Aux&amp;quot; button]]&lt;br /&gt;
&lt;br /&gt;
=== Alternate cases ===&lt;br /&gt;
A number of alternate case designs have been suggested and requested.&lt;br /&gt;
&lt;br /&gt;
[[Neo1973 case schematics]]&lt;br /&gt;
&lt;br /&gt;
[[Alternate Neo1973 case designs]]&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
=== GTA01 ===&lt;br /&gt;
This is the most simple, non-bluetooth version of the prototype.&lt;br /&gt;
&lt;br /&gt;
==== GTA01v3 ====&lt;br /&gt;
First generation of prototypes that was given to internal OpenMoko software developers.&lt;br /&gt;
&lt;br /&gt;
Unfortunately not useful at all due to non-working touchscreen.&lt;br /&gt;
&lt;br /&gt;
* ATAG_REVISION: 0x0000130&lt;br /&gt;
&lt;br /&gt;
==== GTA01v4 ====&lt;br /&gt;
Second generation of prototypes that was given to [[User:HaraldWelte|Harald]] +[[User:Mickey|Mickey]].&lt;br /&gt;
&lt;br /&gt;
Unfortunately still not useful due to half-working touchscreen.&lt;br /&gt;
&lt;br /&gt;
* ATAG_REVISION: 0x00000140&lt;br /&gt;
&lt;br /&gt;
=== GTA01B ===&lt;br /&gt;
This is the bluetooth-enabled fork of GTA01&lt;br /&gt;
&lt;br /&gt;
==== GTA01Bv2 ====&lt;br /&gt;
This is the first produced version of the bluetooth-enabled version.&lt;br /&gt;
&lt;br /&gt;
* ATAG_REVISION: 0x00000220&lt;br /&gt;
&lt;br /&gt;
==== GTA01Bv3 ====&lt;br /&gt;
This is the second produced version of the bluetooth-enabled version. It contains mainly GPS-related fixes.&lt;br /&gt;
&lt;br /&gt;
* ATAG_REVISION: 0x00000230&lt;br /&gt;
&lt;br /&gt;
This is the version that is shipped in [[Neo1973#Phase_0_.28GTA01Bv3.29|Phase 0]].&lt;br /&gt;
&lt;br /&gt;
===== GTA01Bv3 Errata =====&lt;br /&gt;
====== PMU unable to resume from suspend ======&lt;br /&gt;
Due to use of wrong GPIO/EINT pin, the PMU cannot wake-up the phone after suspend.  This means, specifically, '''the following events can not bring the phone back from suspend-to-ram''':&lt;br /&gt;
* PMU RTC Alarm&lt;br /&gt;
* Power button press&lt;br /&gt;
* Charger events (charger insertion/removal/error)&lt;br /&gt;
* Low battery&lt;br /&gt;
&lt;br /&gt;
====== Stand-by time extremely low ======&lt;br /&gt;
This is due to a design bug resulting in at least 30mA additional standby current, since we cannot properly switch off the power supply to the S3C2410 PLL's.  There is nothing we can do to change this with post-production fixes.  GTA01Bv4 will address this issue.&lt;br /&gt;
&lt;br /&gt;
====== GSM doesn't resume phone from suspend ======&lt;br /&gt;
The GSM modem currently doesn't signalize a wakeup interrupt to the S3C2410 in case there's some noteworthy event, such as incoming call, loss of network, incoming SMS or the like.&lt;br /&gt;
&lt;br /&gt;
This is a serious issue, but can be fixed with a GSM Modem Firmware update.&lt;br /&gt;
&lt;br /&gt;
====== GSM Sidetone too loud ======&lt;br /&gt;
The local feedback sidetone (see [http://en.wikipedia.org/wiki/Sidetone]) is too loud.  This will be addressed in a GSM firmware update&lt;br /&gt;
&lt;br /&gt;
====== Bad block ======&lt;br /&gt;
Due to an error in the production process, the factory-programmed NAND bad block information has been lost.  This means that some blocks in the flash will wear out rapidly, which might become as bad as rendering the device unusable.&lt;br /&gt;
&lt;br /&gt;
==== GTA01Bv4 ====&lt;br /&gt;
This is the version that is being shipped in [[Neo1973#Phase_1_.28GTA01Bv4.29|Phase 1]]&lt;br /&gt;
&lt;br /&gt;
===== Looks =====&lt;br /&gt;
This is what the GTA01Bv4 PCB looks like without the shielding cans, which will be fitted later.&lt;br /&gt;
[[Image:Gta01b_v4_front.jpg|thumb|400px|Component side]]&lt;br /&gt;
[[Image:Gta01b_v4_back.jpg|thumb|400px|Display side]]&lt;br /&gt;
&lt;br /&gt;
===== Errata =====&lt;br /&gt;
&lt;br /&gt;
There were two versions of GTA01Bv4: some were given away (red mainboard), and some were sold (green mainboard). The given-away have [[one transistor too many]].&lt;br /&gt;
&lt;br /&gt;
===== Changes from GTA01Bv3 =====&lt;br /&gt;
# Fix all Errata items from GTA01Bv3&lt;br /&gt;
# Add I2C, SPI and one irq and wakeup capable GPIO pin to debug port plus have test pads for all these signals (for soldering wires directly on the pcb)&lt;br /&gt;
# Fix a number of production related details and minor hardware details that are not user-visible&lt;br /&gt;
&lt;br /&gt;
===GTA02===&lt;br /&gt;
The [[GTA02#.22Phase_2.22_.28GTA02.2C_.22Mass_Market.22.29|GTA02]] is now called the Neo FreeRunner and shipped within the &amp;quot;Mass Market launch&amp;quot; (see [http://wiki.openmoko.org/wiki/Neo1973#.22Phase_2.22_.28GTA02.2C_.22Mass_Market.22.29|timeline]).&lt;br /&gt;
It is a new main release with [[Neo1973:_GTA01Bv4_versus_GTA02_comparison|features added]]&lt;br /&gt;
&lt;br /&gt;
===Debug Connector===&lt;br /&gt;
This is the connector used to connect the [[Debug Board]] and possibly other hardware.&lt;br /&gt;
&lt;br /&gt;
Connections are:&lt;br /&gt;
* 39 - GND&lt;br /&gt;
* 38 - STDI&lt;br /&gt;
* 37 - _RESET&lt;br /&gt;
* 36 - STMS&lt;br /&gt;
* 35 - STCK&lt;br /&gt;
* 34 - STDO&lt;br /&gt;
* 33 - GSM_EN&lt;br /&gt;
* 29 - _STRST&lt;br /&gt;
* 19 - X_I2C_SCL (H-TP4703)&lt;br /&gt;
* 18 - X_I2C_SDA (H-TP4704)&lt;br /&gt;
* 17 - SPI_CLK0&lt;br /&gt;
* 16 - SPI_MOSI0&lt;br /&gt;
* 15 - SPI-MISO0 &lt;br /&gt;
* 14 - SS0&lt;br /&gt;
* 13 - EINT3 (H-TP4705)&lt;br /&gt;
* 3 - MODEM_TXD (H-TP4701)&lt;br /&gt;
* 2 - MODEM_RXD (H-TP4702)&lt;br /&gt;
&lt;br /&gt;
Information from [http://people.openmoko.org/roh/Debugport_GTA01bv4.png].&lt;br /&gt;
&lt;br /&gt;
== Distinguishing hardware revisions ==&lt;br /&gt;
=== Inside the [[Bootloader]] ===&lt;br /&gt;
Every hardware revision has its own u-boot image type.  Thus, the bootloader has the revision hard-coded.&lt;br /&gt;
The hardware revision is passed on to the kernel via the ATAG mechanism (ATAG_REVISION)&lt;br /&gt;
&lt;br /&gt;
=== Inside the [[Kernel]] ===&lt;br /&gt;
The kernel receives the ATAG_REVISION during bootup, and saves its contents in the &amp;quot;system_rev&amp;quot; global variable.&lt;br /&gt;
&lt;br /&gt;
=== From Userspace ===&lt;br /&gt;
The kernel exports the system_rev variable in /proc/cpuinfo as &amp;quot;Revision :&amp;quot; line.&lt;br /&gt;
&lt;br /&gt;
??? So does GTA01Bv4 equal the cat /proc/cpuinfo output of&lt;br /&gt;
 Hardware        : GTA01&lt;br /&gt;
 Revision        : 0240&lt;br /&gt;
&lt;br /&gt;
== Approval ==&lt;br /&gt;
*CE compliance is needed before a product can be sold in the EU. The CE mark indicates that a product complies to the relevant legislation, defined in the  [http://ec.europa.eu/enterprise/newapproach/standardization/harmstds/reflist.html harmonised standards]. This refers also to the most relevant, for the Neo1973,  [http://ec.europa.eu/enterprise/newapproach/standardization/harmstds/reflist/emc.html Directive 89/336/EEC on electromagnetic compatibility] (EMC is the art of assuring [http://en.wikipedia.org/wiki/Electromagnetic_compatibility electromagnetic compatibility] between products). The standards are defined by [http://www.cenelec.org CENELEC] (European Committee for Electrotechnical Standardization), but not verified by any authority. It is the responsibilty of the manufacturer to convince himself that a product is in compliance, and is obligated to be able to prove this (with relevant technical documentation) for a specific product to the authorities on request. Whether the current Phase 1 devices are actually tested against the directives are unknown, no documentation has been disclosed, other than the fact that the devices bear the CE mark.&lt;br /&gt;
&lt;br /&gt;
*[http://www.fcc.gov/ FCC]&lt;br /&gt;
&lt;br /&gt;
{{Languages|Neo1973 Hardware}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo1973 Hardware| ]]&lt;br /&gt;
[[Category:Hardware ]]&lt;br /&gt;
[[Category:Supported Phone| ]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-02-13T01:27:32Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: link to ML post&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the s3c2410-cpufreq-om branch.&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is mostly untested, and changes frequently. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-om branch (or the wip branch for work in progress)&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* Do not compile the cpufreq driver as a module, since several of the notifiers depend on functions defined in it and would thus end up being compiled as modules too.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master-om..s3c2410-cpufreq-om&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
* When trying for the first time, it's best to start slow:&lt;br /&gt;
*# Do all the tests without the USB cable (disconnect before changing the governor/frequencies), since it misbehaves (will be later changed to prohibit changing frequencies when the cable is connected). It's best to also remove the SD card and SIM, just in case.&lt;br /&gt;
*# Boot with &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; on the kernel command line and carefully inspect the kernel output for any incorrect output.&lt;br /&gt;
*# Disable the cpufreq printk rate limit (&amp;lt;code&amp;gt;cpufreq.debug_ratelimit=0&amp;lt;/code&amp;gt;; it can be set via &amp;lt;code&amp;gt;/sys/modules/cpufreq/parameters&amp;lt;/code&amp;gt;).&lt;br /&gt;
*# Set the governor to &amp;lt;code&amp;gt;userspace&amp;lt;/code&amp;gt; and switch to the second highest frequency. Check the kernel output again (be on the lookout in particular for frequency mismatch messages from the cpufreq core).&lt;br /&gt;
*# Work down the list of frequencies and check if they all work correctly (not all can be selected since the drivers reject some of them).&lt;br /&gt;
*# Edit the code to disable the policy rejection of frequencies (returning at the top of &amp;lt;code&amp;gt;s3c2410_cpufreq_adjust_table&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;s3c2410_cpufreq_adjust_pin&amp;lt;/code&amp;gt; should be enough) to be able to test all frequencies. Start again from the top of the list; watch in particular for the SLOW mode ones (12000 and below). There's no need to go all the way down to 1000; all SLOW mode ones should work the same, and it's very annoying. Test going back from SLOW mode to the lowest non-SLOW frequency, and jumping from SLOW mode to the maximum frequency (this last case can cause misterious crashes if the registers were set out of order, causing the bus to go too fast).&lt;br /&gt;
*# Revert the changes made to the code above.&lt;br /&gt;
*# Try the &amp;lt;code&amp;gt;conservative&amp;lt;/code&amp;gt; governor.&lt;br /&gt;
*# Try the &amp;lt;code&amp;gt;ondemand&amp;lt;/code&amp;gt; governor (it's the one which stresses the most the cpufreq mechanism).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Driver !! Status (GTA01) !! Status (GTA02)&lt;br /&gt;
|-&lt;br /&gt;
| core || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| timer || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| nand || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| serial || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| framebuffer || Working || '''Untested'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for dynamically changing the frequency divider used to derive the video clocks.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
== Frequency restrictions ==&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [http://lists.openmoko.org/pipermail/openmoko-kernel/2008-February/001021.html Experimental S3C2410A cpufreq driver] (2008-02-12)&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-02-07T23:57:56Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Hints */ testing hints&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the s3c2410-cpufreq-om branch.&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is mostly untested, and changes frequently. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-om branch (or the wip branch for work in progress)&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* Do not compile the cpufreq driver as a module, since several of the notifiers depend on functions defined in it and would thus end up being compiled as modules too.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master-om..s3c2410-cpufreq-om&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
* When trying for the first time, it's best to start slow:&lt;br /&gt;
*# Do all the tests without the USB cable (disconnect before changing the governor/frequencies), since it misbehaves (will be later changed to prohibit changing frequencies when the cable is connected). It's best to also remove the SD card and SIM, just in case.&lt;br /&gt;
*# Boot with &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; on the kernel command line and carefully inspect the kernel output for any incorrect output.&lt;br /&gt;
*# Disable the cpufreq printk rate limit (&amp;lt;code&amp;gt;cpufreq.debug_ratelimit=0&amp;lt;/code&amp;gt;; it can be set via &amp;lt;code&amp;gt;/sys/modules/cpufreq/parameters&amp;lt;/code&amp;gt;).&lt;br /&gt;
*# Set the governor to &amp;lt;code&amp;gt;userspace&amp;lt;/code&amp;gt; and switch to the second highest frequency. Check the kernel output again (be on the lookout in particular for frequency mismatch messages from the cpufreq core).&lt;br /&gt;
*# Work down the list of frequencies and check if they all work correctly (not all can be selected since the drivers reject some of them).&lt;br /&gt;
*# Edit the code to disable the policy rejection of frequencies (returning at the top of &amp;lt;code&amp;gt;s3c2410_cpufreq_adjust_table&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;s3c2410_cpufreq_adjust_pin&amp;lt;/code&amp;gt; should be enough) to be able to test all frequencies. Start again from the top of the list; watch in particular for the SLOW mode ones (12000 and below). There's no need to go all the way down to 1000; all SLOW mode ones should work the same, and it's very annoying. Test going back from SLOW mode to the lowest non-SLOW frequency, and jumping from SLOW mode to the maximum frequency (this last case can cause misterious crashes if the registers were set out of order, causing the bus to go too fast).&lt;br /&gt;
*# Revert the changes made to the code above.&lt;br /&gt;
*# Try the &amp;lt;code&amp;gt;conservative&amp;lt;/code&amp;gt; governor.&lt;br /&gt;
*# Try the &amp;lt;code&amp;gt;ondemand&amp;lt;/code&amp;gt; governor (it's the one which stresses the most the cpufreq mechanism).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Driver !! Status (GTA01) !! Status (GTA02)&lt;br /&gt;
|-&lt;br /&gt;
| core || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| timer || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| nand || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| serial || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| framebuffer || Working || '''Untested'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for dynamically changing the frequency divider used to derive the video clocks.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
== Frequency restrictions ==&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-02-07T23:40:52Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the s3c2410-cpufreq-om branch.&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is mostly untested, and changes frequently. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-om branch (or the wip branch for work in progress)&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* Do not compile the cpufreq driver as a module, since several of the notifiers depend on functions defined in it and would thus end up being compiled as modules too.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master-om..s3c2410-cpufreq-om&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Driver !! Status (GTA01) !! Status (GTA02)&lt;br /&gt;
|-&lt;br /&gt;
| core || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| timer || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| nand || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| serial || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| framebuffer || Working || '''Untested'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for dynamically changing the frequency divider used to derive the video clocks.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
== Frequency restrictions ==&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-02-06T21:37:45Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the s3c2410-cpufreq-om branch.&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is mostly untested, and changes frequently. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-om branch (or the wip branch for work in progress)&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* Do not compile the cpufreq driver as a module, since several of the notifiers depend on functions defined in it and would thus end up being compiled as modules too.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master-om..s3c2410-cpufreq-om&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Driver !! Status (GTA01) !! Status (GTA02)&lt;br /&gt;
|-&lt;br /&gt;
| core || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| timer || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| nand || Working || '''Untested'''&lt;br /&gt;
|-&lt;br /&gt;
| serial || Working || '''Missing'''&lt;br /&gt;
|-&lt;br /&gt;
| framebuffer || Working || '''Untested'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for dynamically changing the frequency divider used to derive the video clocks.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== GTA02 driver ===&lt;br /&gt;
&lt;br /&gt;
The GTA02 uses a different (but similar) SoC. Parts of the code have to be changed to be able to work on both. Also, part of the serial notifier code is specific to each kind of SoC.&lt;br /&gt;
&lt;br /&gt;
== Frequency restrictions ==&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-02-04T23:25:55Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Frequency restrictions */ change heading level&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the s3c2410-cpufreq-om branch.&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is mostly untested, and changes frequently. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-om branch (or the wip branch for work in progress)&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* Do not compile the cpufreq driver as a module, since several of the notifiers depend on functions defined in it and would thus end up being compiled as modules too.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master-om..s3c2410-cpufreq-om&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Driver !! Status&lt;br /&gt;
|-&lt;br /&gt;
| core || Working&lt;br /&gt;
|-&lt;br /&gt;
| timer || Working&lt;br /&gt;
|-&lt;br /&gt;
| nand || Working&lt;br /&gt;
|-&lt;br /&gt;
| serial || Working&lt;br /&gt;
|-&lt;br /&gt;
| framebuffer || Working&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for dynamically changing the frequency divider used to derive the video clocks.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== GTA02 driver ===&lt;br /&gt;
&lt;br /&gt;
The GTA02 uses a different (but similar) SoC. Parts of the code have to be changed to be able to work on both. Also, part of the serial notifier code is specific to each kind of SoC.&lt;br /&gt;
&lt;br /&gt;
== Frequency restrictions ==&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-02-04T23:25:32Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* What's missing */ update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the s3c2410-cpufreq-om branch.&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is mostly untested, and changes frequently. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-om branch (or the wip branch for work in progress)&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* Do not compile the cpufreq driver as a module, since several of the notifiers depend on functions defined in it and would thus end up being compiled as modules too.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master-om..s3c2410-cpufreq-om&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Driver !! Status&lt;br /&gt;
|-&lt;br /&gt;
| core || Working&lt;br /&gt;
|-&lt;br /&gt;
| timer || Working&lt;br /&gt;
|-&lt;br /&gt;
| nand || Working&lt;br /&gt;
|-&lt;br /&gt;
| serial || Working&lt;br /&gt;
|-&lt;br /&gt;
| framebuffer || Working&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for dynamically changing the frequency divider used to derive the video clocks.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== GTA02 driver ===&lt;br /&gt;
&lt;br /&gt;
The GTA02 uses a different (but similar) SoC. Parts of the code have to be changed to be able to work on both. Also, part of the serial notifier code is specific to each kind of SoC.&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-02-04T20:09:55Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Hints */ modules&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the s3c2410-cpufreq-om branch.&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is mostly untested, and changes frequently. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-om branch (or the wip branch for work in progress)&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* Do not compile the cpufreq driver as a module, since several of the notifiers depend on functions defined in it and would thus end up being compiled as modules too.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master-om..s3c2410-cpufreq-om&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Driver !! Status&lt;br /&gt;
|-&lt;br /&gt;
| core || Working&lt;br /&gt;
|-&lt;br /&gt;
| timer || Working&lt;br /&gt;
|-&lt;br /&gt;
| nand || Working&lt;br /&gt;
|-&lt;br /&gt;
| serial || Working&lt;br /&gt;
|-&lt;br /&gt;
| framebuffer || Working&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for dynamically changing the frequency divider used to derive the video clocks.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== GTA02 driver ===&lt;br /&gt;
&lt;br /&gt;
The GTA02 uses a different (but similar) SoC. Parts of the code have to be changed to be able to work on both. Also, part of the serial notifier code is specific to each kind of SoC.&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-02-03T02:53:37Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* To build */ wip branch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the s3c2410-cpufreq-om branch.&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is mostly untested, and changes frequently. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-om branch (or the wip branch for work in progress)&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master-om..s3c2410-cpufreq-om&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Driver !! Status&lt;br /&gt;
|-&lt;br /&gt;
| core || Working&lt;br /&gt;
|-&lt;br /&gt;
| timer || Working&lt;br /&gt;
|-&lt;br /&gt;
| nand || Working&lt;br /&gt;
|-&lt;br /&gt;
| serial || Working&lt;br /&gt;
|-&lt;br /&gt;
| framebuffer || Working&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for dynamically changing the frequency divider used to derive the video clocks.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== GTA02 driver ===&lt;br /&gt;
&lt;br /&gt;
The GTA02 uses a different (but similar) SoC. Parts of the code have to be changed to be able to work on both. Also, part of the serial notifier code is specific to each kind of SoC.&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-02-03T02:53:07Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* What's already done */ framebuffer -&amp;gt; working&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the s3c2410-cpufreq-om branch.&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is mostly untested, and changes frequently. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-om branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master-om..s3c2410-cpufreq-om&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Driver !! Status&lt;br /&gt;
|-&lt;br /&gt;
| core || Working&lt;br /&gt;
|-&lt;br /&gt;
| timer || Working&lt;br /&gt;
|-&lt;br /&gt;
| nand || Working&lt;br /&gt;
|-&lt;br /&gt;
| serial || Working&lt;br /&gt;
|-&lt;br /&gt;
| framebuffer || Working&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for dynamically changing the frequency divider used to derive the video clocks.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== GTA02 driver ===&lt;br /&gt;
&lt;br /&gt;
The GTA02 uses a different (but similar) SoC. Parts of the code have to be changed to be able to work on both. Also, part of the serial notifier code is specific to each kind of SoC.&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-02-02T01:25:56Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the s3c2410-cpufreq-om branch.&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is mostly untested, and changes frequently. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-om branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master-om..s3c2410-cpufreq-om&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Driver !! Status&lt;br /&gt;
|-&lt;br /&gt;
| core || Working&lt;br /&gt;
|-&lt;br /&gt;
| timer || Working&lt;br /&gt;
|-&lt;br /&gt;
| nand || Working&lt;br /&gt;
|-&lt;br /&gt;
| serial || Working&lt;br /&gt;
|-&lt;br /&gt;
| framebuffer || Broken&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== GTA02 driver ===&lt;br /&gt;
&lt;br /&gt;
The GTA02 uses a different (but similar) SoC. Parts of the code have to be changed to be able to work on both. Also, part of the serial notifier code is specific to each kind of SoC.&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-27T20:47:41Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Testing report */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is completely untested. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master..s3c2410-cpufreq&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should perhaps use a higher priority, so as to run before all the others for more precise timekeeping.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should make sure the NAND is quiesced before the frequency change, or change the timings to the most conservative ones before the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== Testing report ==&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-19 ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-January/000452.html 2.6.24.x doesn't boot on GTA01]. I hand-extracted the patches and applied them all on top of GTA01's 2.6.22.5 kernel, except for the framebuffer patch (which depends on some changes made after 2.6.24). It was booted on a GTA01 without the SD card or the SIM attached (just in case). The results were:&lt;br /&gt;
&lt;br /&gt;
* Setting to 202800 kHz: lost the USB connection. It would be recovered only after rebooting (setting the frequency back to 266000 wasn't enough). The rest of the tests were made with the on-screen terminal.&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): noticeable flicker, possibly because the framebuffer patch wasn't applied. The timer seems to be running at exactly half the correct rate (running &amp;quot;date&amp;quot; twice with 10s delay showed the GTA01's clock advanced only 5s).&lt;br /&gt;
* Rebooting (after coming back to 266000 kHz) fixed the USB connection.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-20 ===&lt;br /&gt;
&lt;br /&gt;
Same 2.6.22.5 kernel, with several bugfixes applied (in particular, the problem which prevented the timer notifier from running was fixed).&lt;br /&gt;
&lt;br /&gt;
This time, the whole test was done from the terminal, to avoid the USB lockup.&lt;br /&gt;
&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): same flicker. Plugging briefly the USB shows it to still be alive. Time runs at the correct speed.&lt;br /&gt;
* Setting to 100000 kHz (actually 101250 kHz): even worse flicker.&lt;br /&gt;
* Setting to 12000 kHz (SLOW mode on): the flicker gets psychedelic (colors start oscillating). VERY slow (taking about a second to register a &amp;quot;key&amp;quot; press).&lt;br /&gt;
* Back to 266000 kHz: works normally. Plugging briefly the USB again shows it to still be alive. Time still running at correct speed.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-22 ===&lt;br /&gt;
&lt;br /&gt;
After a few more bugfixes, still 2.6.22.5, also tested from the terminal (untethered).&lt;br /&gt;
&lt;br /&gt;
This time, due to the nature of the tests, I commented out all speeds below 12000 kHz.&lt;br /&gt;
&lt;br /&gt;
* Setting governor to &amp;quot;conservative&amp;quot;: works, and the flicker patterns shows neatly the change of operating frequencies.&lt;br /&gt;
* Setting governor to &amp;quot;ondemand&amp;quot;: works, however after a few seconds on 12000 kHz it got &amp;quot;stuck&amp;quot; there. For some reason, &amp;lt;code&amp;gt;cat scaling_cur_speed&amp;lt;/code&amp;gt; locked up (not answering to Ctrl-C/Ctrl-Z); requested a shutdown via the power menu, which worked (still with the severe flicker showing it was still at 12000 kHz.&lt;br /&gt;
&lt;br /&gt;
Another test was to see if gsmd still worked.&lt;br /&gt;
&lt;br /&gt;
* With &amp;quot;conservative&amp;quot;: timeout.&lt;br /&gt;
* With &amp;quot;userspace&amp;quot;, testing by changing the frequency and typing &amp;quot;at&amp;quot; at &amp;lt;code&amp;gt;libgsmd-tool -m atcmd&amp;lt;/code&amp;gt; and checking for the response: worked at 266000, 133000, 66000, 33000, and ''failed'' at 12000 (timeout).&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-26 ===&lt;br /&gt;
&lt;br /&gt;
Trying to find out why gsmd stops working at 12000.&lt;br /&gt;
&lt;br /&gt;
* Adding a debug printk to the end of s3c24xx_serial_getclk, the error is 7% with 12000, while below 2% at the other frequencies tested above.&lt;br /&gt;
* Trying to make gsmd run at 57600 instead of 115200 didn't work, even after making the kernel use the same speed for the serial console. Changing from 57600 to 115200 worked without even rebooting; looks like the modem doesn't autodetect the serial speed.&lt;br /&gt;
* Calculations with all the frequencies at/below 12000 (plus 5000 and 3000 which can be derived from them) show none will work with the serial (the error is too large on all of them).&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-27 ===&lt;br /&gt;
&lt;br /&gt;
After writing more code to fix the serial issue.&lt;br /&gt;
&lt;br /&gt;
* gsmd works fine with &amp;quot;conservative&amp;quot;&lt;br /&gt;
* gsmd works fine with &amp;quot;ondemand&amp;quot;&lt;br /&gt;
* The minimum frequency the new code selected was 45000.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-26T23:51:43Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* 2008-01-26 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is completely untested. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master..s3c2410-cpufreq&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should perhaps use a higher priority, so as to run before all the others for more precise timekeeping.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should make sure the NAND is quiesced before the frequency change, or change the timings to the most conservative ones before the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== Testing report ==&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-19 ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-January/000452.html 2.6.24.x doesn't boot on GTA01]. I hand-extracted the patches and applied them all on top of GTA01's 2.6.22.5 kernel, except for the framebuffer patch (which depends on some changes made after 2.6.24). It was booted on a GTA01 without the SD card or the SIM attached (just in case). The results were:&lt;br /&gt;
&lt;br /&gt;
* Setting to 202800 kHz: lost the USB connection. It would be recovered only after rebooting (setting the frequency back to 266000 wasn't enough). The rest of the tests were made with the on-screen terminal.&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): noticeable flicker, possibly because the framebuffer patch wasn't applied. The timer seems to be running at exactly half the correct rate (running &amp;quot;date&amp;quot; twice with 10s delay showed the GTA01's clock advanced only 5s).&lt;br /&gt;
* Rebooting (after coming back to 266000 kHz) fixed the USB connection.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-20 ===&lt;br /&gt;
&lt;br /&gt;
Same 2.6.22.5 kernel, with several bugfixes applied (in particular, the problem which prevented the timer notifier from running was fixed).&lt;br /&gt;
&lt;br /&gt;
This time, the whole test was done from the terminal, to avoid the USB lockup.&lt;br /&gt;
&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): same flicker. Plugging briefly the USB shows it to still be alive. Time runs at the correct speed.&lt;br /&gt;
* Setting to 100000 kHz (actually 101250 kHz): even worse flicker.&lt;br /&gt;
* Setting to 12000 kHz (SLOW mode on): the flicker gets psychedelic (colors start oscillating). VERY slow (taking about a second to register a &amp;quot;key&amp;quot; press).&lt;br /&gt;
* Back to 266000 kHz: works normally. Plugging briefly the USB again shows it to still be alive. Time still running at correct speed.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-22 ===&lt;br /&gt;
&lt;br /&gt;
After a few more bugfixes, still 2.6.22.5, also tested from the terminal (untethered).&lt;br /&gt;
&lt;br /&gt;
This time, due to the nature of the tests, I commented out all speeds below 12000 kHz.&lt;br /&gt;
&lt;br /&gt;
* Setting governor to &amp;quot;conservative&amp;quot;: works, and the flicker patterns shows neatly the change of operating frequencies.&lt;br /&gt;
* Setting governor to &amp;quot;ondemand&amp;quot;: works, however after a few seconds on 12000 kHz it got &amp;quot;stuck&amp;quot; there. For some reason, &amp;lt;code&amp;gt;cat scaling_cur_speed&amp;lt;/code&amp;gt; locked up (not answering to Ctrl-C/Ctrl-Z); requested a shutdown via the power menu, which worked (still with the severe flicker showing it was still at 12000 kHz.&lt;br /&gt;
&lt;br /&gt;
Another test was to see if gsmd still worked.&lt;br /&gt;
&lt;br /&gt;
* With &amp;quot;conservative&amp;quot;: timeout.&lt;br /&gt;
* With &amp;quot;userspace&amp;quot;, testing by changing the frequency and typing &amp;quot;at&amp;quot; at &amp;lt;code&amp;gt;libgsmd-tool -m atcmd&amp;lt;/code&amp;gt; and checking for the response: worked at 266000, 133000, 66000, 33000, and ''failed'' at 12000 (timeout).&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-26 ===&lt;br /&gt;
&lt;br /&gt;
Trying to find out why gsmd stops working at 12000.&lt;br /&gt;
&lt;br /&gt;
* Adding a debug printk to the end of s3c24xx_serial_getclk, the error is 7% with 12000, while below 2% at the other frequencies tested above.&lt;br /&gt;
* Trying to make gsmd run at 57600 instead of 115200 didn't work, even after making the kernel use the same speed for the serial console. Changing from 57600 to 115200 worked without even rebooting; looks like the modem doesn't autodetect the serial speed.&lt;br /&gt;
* Calculations with all the frequencies at/below 12000 (plus 5000 and 3000 which can be derived from them) show none will work with the serial (the error is too large on all of them).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-26T23:00:22Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Frequency restrictions */ baud rate problem&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is completely untested. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master..s3c2410-cpufreq&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should perhaps use a higher priority, so as to run before all the others for more precise timekeeping.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should make sure the NAND is quiesced before the frequency change, or change the timings to the most conservative ones before the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
* The serial baudrate generator might not have a good enough divider value for some baud rates and some clock frequencies (for instance, 115200 at 12000 kHz)&lt;br /&gt;
&lt;br /&gt;
== Testing report ==&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-19 ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-January/000452.html 2.6.24.x doesn't boot on GTA01]. I hand-extracted the patches and applied them all on top of GTA01's 2.6.22.5 kernel, except for the framebuffer patch (which depends on some changes made after 2.6.24). It was booted on a GTA01 without the SD card or the SIM attached (just in case). The results were:&lt;br /&gt;
&lt;br /&gt;
* Setting to 202800 kHz: lost the USB connection. It would be recovered only after rebooting (setting the frequency back to 266000 wasn't enough). The rest of the tests were made with the on-screen terminal.&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): noticeable flicker, possibly because the framebuffer patch wasn't applied. The timer seems to be running at exactly half the correct rate (running &amp;quot;date&amp;quot; twice with 10s delay showed the GTA01's clock advanced only 5s).&lt;br /&gt;
* Rebooting (after coming back to 266000 kHz) fixed the USB connection.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-20 ===&lt;br /&gt;
&lt;br /&gt;
Same 2.6.22.5 kernel, with several bugfixes applied (in particular, the problem which prevented the timer notifier from running was fixed).&lt;br /&gt;
&lt;br /&gt;
This time, the whole test was done from the terminal, to avoid the USB lockup.&lt;br /&gt;
&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): same flicker. Plugging briefly the USB shows it to still be alive. Time runs at the correct speed.&lt;br /&gt;
* Setting to 100000 kHz (actually 101250 kHz): even worse flicker.&lt;br /&gt;
* Setting to 12000 kHz (SLOW mode on): the flicker gets psychedelic (colors start oscillating). VERY slow (taking about a second to register a &amp;quot;key&amp;quot; press).&lt;br /&gt;
* Back to 266000 kHz: works normally. Plugging briefly the USB again shows it to still be alive. Time still running at correct speed.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-22 ===&lt;br /&gt;
&lt;br /&gt;
After a few more bugfixes, still 2.6.22.5, also tested from the terminal (untethered).&lt;br /&gt;
&lt;br /&gt;
This time, due to the nature of the tests, I commented out all speeds below 12000 kHz.&lt;br /&gt;
&lt;br /&gt;
* Setting governor to &amp;quot;conservative&amp;quot;: works, and the flicker patterns shows neatly the change of operating frequencies.&lt;br /&gt;
* Setting governor to &amp;quot;ondemand&amp;quot;: works, however after a few seconds on 12000 kHz it got &amp;quot;stuck&amp;quot; there. For some reason, &amp;lt;code&amp;gt;cat scaling_cur_speed&amp;lt;/code&amp;gt; locked up (not answering to Ctrl-C/Ctrl-Z); requested a shutdown via the power menu, which worked (still with the severe flicker showing it was still at 12000 kHz.&lt;br /&gt;
&lt;br /&gt;
Another test was to see if gsmd still worked.&lt;br /&gt;
&lt;br /&gt;
* With &amp;quot;conservative&amp;quot;: timeout.&lt;br /&gt;
* With &amp;quot;userspace&amp;quot;, testing by changing the frequency and typing &amp;quot;at&amp;quot; at &amp;lt;code&amp;gt;libgsmd-tool -m atcmd&amp;lt;/code&amp;gt; and checking for the response: worked at 266000, 133000, 66000, 33000, and ''failed'' at 12000 (timeout).&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-26 ===&lt;br /&gt;
&lt;br /&gt;
Trying to find out why gsmd stops working at 12000.&lt;br /&gt;
&lt;br /&gt;
* Adding a debug printk to the end of s3c24xx_serial_getclk, the error is 7% with 12000, while below 2% at the other frequencies tested above.&lt;br /&gt;
* Trying to make gsmd run at 57600 instead of 115200 didn't work, even after making the kernel use the same speed for the serial console. Changing from 57600 to 115200 worked without even rebooting; looks like the modem doesn't autodetect the serial speed.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-26T22:33:01Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Testing report */ gsmd speed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is completely untested. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master..s3c2410-cpufreq&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should perhaps use a higher priority, so as to run before all the others for more precise timekeeping.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should make sure the NAND is quiesced before the frequency change, or change the timings to the most conservative ones before the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
&lt;br /&gt;
== Testing report ==&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-19 ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-January/000452.html 2.6.24.x doesn't boot on GTA01]. I hand-extracted the patches and applied them all on top of GTA01's 2.6.22.5 kernel, except for the framebuffer patch (which depends on some changes made after 2.6.24). It was booted on a GTA01 without the SD card or the SIM attached (just in case). The results were:&lt;br /&gt;
&lt;br /&gt;
* Setting to 202800 kHz: lost the USB connection. It would be recovered only after rebooting (setting the frequency back to 266000 wasn't enough). The rest of the tests were made with the on-screen terminal.&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): noticeable flicker, possibly because the framebuffer patch wasn't applied. The timer seems to be running at exactly half the correct rate (running &amp;quot;date&amp;quot; twice with 10s delay showed the GTA01's clock advanced only 5s).&lt;br /&gt;
* Rebooting (after coming back to 266000 kHz) fixed the USB connection.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-20 ===&lt;br /&gt;
&lt;br /&gt;
Same 2.6.22.5 kernel, with several bugfixes applied (in particular, the problem which prevented the timer notifier from running was fixed).&lt;br /&gt;
&lt;br /&gt;
This time, the whole test was done from the terminal, to avoid the USB lockup.&lt;br /&gt;
&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): same flicker. Plugging briefly the USB shows it to still be alive. Time runs at the correct speed.&lt;br /&gt;
* Setting to 100000 kHz (actually 101250 kHz): even worse flicker.&lt;br /&gt;
* Setting to 12000 kHz (SLOW mode on): the flicker gets psychedelic (colors start oscillating). VERY slow (taking about a second to register a &amp;quot;key&amp;quot; press).&lt;br /&gt;
* Back to 266000 kHz: works normally. Plugging briefly the USB again shows it to still be alive. Time still running at correct speed.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-22 ===&lt;br /&gt;
&lt;br /&gt;
After a few more bugfixes, still 2.6.22.5, also tested from the terminal (untethered).&lt;br /&gt;
&lt;br /&gt;
This time, due to the nature of the tests, I commented out all speeds below 12000 kHz.&lt;br /&gt;
&lt;br /&gt;
* Setting governor to &amp;quot;conservative&amp;quot;: works, and the flicker patterns shows neatly the change of operating frequencies.&lt;br /&gt;
* Setting governor to &amp;quot;ondemand&amp;quot;: works, however after a few seconds on 12000 kHz it got &amp;quot;stuck&amp;quot; there. For some reason, &amp;lt;code&amp;gt;cat scaling_cur_speed&amp;lt;/code&amp;gt; locked up (not answering to Ctrl-C/Ctrl-Z); requested a shutdown via the power menu, which worked (still with the severe flicker showing it was still at 12000 kHz.&lt;br /&gt;
&lt;br /&gt;
Another test was to see if gsmd still worked.&lt;br /&gt;
&lt;br /&gt;
* With &amp;quot;conservative&amp;quot;: timeout.&lt;br /&gt;
* With &amp;quot;userspace&amp;quot;, testing by changing the frequency and typing &amp;quot;at&amp;quot; at &amp;lt;code&amp;gt;libgsmd-tool -m atcmd&amp;lt;/code&amp;gt; and checking for the response: worked at 266000, 133000, 66000, 33000, and ''failed'' at 12000 (timeout).&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-26 ===&lt;br /&gt;
&lt;br /&gt;
Trying to find out why gsmd stops working at 12000.&lt;br /&gt;
&lt;br /&gt;
* Adding a debug printk to the end of s3c24xx_serial_getclk, the error is 7% with 12000, while below 2% at the other frequencies tested above.&lt;br /&gt;
* Trying to make gsmd run at 57600 instead of 115200 didn't work, even after making the kernel use the same speed for the serial console. Changing from 57600 to 115200 worked without even rebooting; looks like the modem doesn't autodetect the serial speed.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-23T00:47:34Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* 2008-01-22 */ gsmd (serial) test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is completely untested. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master..s3c2410-cpufreq&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should perhaps use a higher priority, so as to run before all the others for more precise timekeeping.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should make sure the NAND is quiesced before the frequency change, or change the timings to the most conservative ones before the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
&lt;br /&gt;
== Testing report ==&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-19 ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-January/000452.html 2.6.24.x doesn't boot on GTA01]. I hand-extracted the patches and applied them all on top of GTA01's 2.6.22.5 kernel, except for the framebuffer patch (which depends on some changes made after 2.6.24). It was booted on a GTA01 without the SD card or the SIM attached (just in case). The results were:&lt;br /&gt;
&lt;br /&gt;
* Setting to 202800 kHz: lost the USB connection. It would be recovered only after rebooting (setting the frequency back to 266000 wasn't enough). The rest of the tests were made with the on-screen terminal.&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): noticeable flicker, possibly because the framebuffer patch wasn't applied. The timer seems to be running at exactly half the correct rate (running &amp;quot;date&amp;quot; twice with 10s delay showed the GTA01's clock advanced only 5s).&lt;br /&gt;
* Rebooting (after coming back to 266000 kHz) fixed the USB connection.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-20 ===&lt;br /&gt;
&lt;br /&gt;
Same 2.6.22.5 kernel, with several bugfixes applied (in particular, the problem which prevented the timer notifier from running was fixed).&lt;br /&gt;
&lt;br /&gt;
This time, the whole test was done from the terminal, to avoid the USB lockup.&lt;br /&gt;
&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): same flicker. Plugging briefly the USB shows it to still be alive. Time runs at the correct speed.&lt;br /&gt;
* Setting to 100000 kHz (actually 101250 kHz): even worse flicker.&lt;br /&gt;
* Setting to 12000 kHz (SLOW mode on): the flicker gets psychedelic (colors start oscillating). VERY slow (taking about a second to register a &amp;quot;key&amp;quot; press).&lt;br /&gt;
* Back to 266000 kHz: works normally. Plugging briefly the USB again shows it to still be alive. Time still running at correct speed.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-22 ===&lt;br /&gt;
&lt;br /&gt;
After a few more bugfixes, still 2.6.22.5, also tested from the terminal (untethered).&lt;br /&gt;
&lt;br /&gt;
This time, due to the nature of the tests, I commented out all speeds below 12000 kHz.&lt;br /&gt;
&lt;br /&gt;
* Setting governor to &amp;quot;conservative&amp;quot;: works, and the flicker patterns shows neatly the change of operating frequencies.&lt;br /&gt;
* Setting governor to &amp;quot;ondemand&amp;quot;: works, however after a few seconds on 12000 kHz it got &amp;quot;stuck&amp;quot; there. For some reason, &amp;lt;code&amp;gt;cat scaling_cur_speed&amp;lt;/code&amp;gt; locked up (not answering to Ctrl-C/Ctrl-Z); requested a shutdown via the power menu, which worked (still with the severe flicker showing it was still at 12000 kHz.&lt;br /&gt;
&lt;br /&gt;
Another test was to see if gsmd still worked.&lt;br /&gt;
&lt;br /&gt;
* With &amp;quot;conservative&amp;quot;: timeout.&lt;br /&gt;
* With &amp;quot;userspace&amp;quot;, testing by changing the frequency and typing &amp;quot;at&amp;quot; at &amp;lt;code&amp;gt;libgsmd-tool -m atcmd&amp;lt;/code&amp;gt; and checking for the response: worked at 266000, 133000, 66000, 33000, and ''failed'' at 12000 (timeout).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-23T00:01:53Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Testing report */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is completely untested. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master..s3c2410-cpufreq&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should perhaps use a higher priority, so as to run before all the others for more precise timekeeping.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should make sure the NAND is quiesced before the frequency change, or change the timings to the most conservative ones before the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
&lt;br /&gt;
== Testing report ==&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-19 ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-January/000452.html 2.6.24.x doesn't boot on GTA01]. I hand-extracted the patches and applied them all on top of GTA01's 2.6.22.5 kernel, except for the framebuffer patch (which depends on some changes made after 2.6.24). It was booted on a GTA01 without the SD card or the SIM attached (just in case). The results were:&lt;br /&gt;
&lt;br /&gt;
* Setting to 202800 kHz: lost the USB connection. It would be recovered only after rebooting (setting the frequency back to 266000 wasn't enough). The rest of the tests were made with the on-screen terminal.&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): noticeable flicker, possibly because the framebuffer patch wasn't applied. The timer seems to be running at exactly half the correct rate (running &amp;quot;date&amp;quot; twice with 10s delay showed the GTA01's clock advanced only 5s).&lt;br /&gt;
* Rebooting (after coming back to 266000 kHz) fixed the USB connection.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-20 ===&lt;br /&gt;
&lt;br /&gt;
Same 2.6.22.5 kernel, with several bugfixes applied (in particular, the problem which prevented the timer notifier from running was fixed).&lt;br /&gt;
&lt;br /&gt;
This time, the whole test was done from the terminal, to avoid the USB lockup.&lt;br /&gt;
&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): same flicker. Plugging briefly the USB shows it to still be alive. Time runs at the correct speed.&lt;br /&gt;
* Setting to 100000 kHz (actually 101250 kHz): even worse flicker.&lt;br /&gt;
* Setting to 12000 kHz (SLOW mode on): the flicker gets psychedelic (colors start oscillating). VERY slow (taking about a second to register a &amp;quot;key&amp;quot; press).&lt;br /&gt;
* Back to 266000 kHz: works normally. Plugging briefly the USB again shows it to still be alive. Time still running at correct speed.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-22 ===&lt;br /&gt;
&lt;br /&gt;
After a few more bugfixes, still 2.6.22.5, also tested from the terminal (untethered).&lt;br /&gt;
&lt;br /&gt;
This time, due to the nature of the tests, I commented out all speeds below 12000 kHz.&lt;br /&gt;
&lt;br /&gt;
* Setting governor to &amp;quot;conservative&amp;quot;: works, and the flicker patterns shows neatly the change of operating frequencies.&lt;br /&gt;
* Setting governor to &amp;quot;ondemand&amp;quot;: works, however after a few seconds on 12000 kHz it got &amp;quot;stuck&amp;quot; there. For some reason, &amp;lt;code&amp;gt;cat scaling_cur_speed&amp;lt;/code&amp;gt; locked up (not answering to Ctrl-C/Ctrl-Z); requested a shutdown via the power menu, which worked (still with the severe flicker showing it was still at 12000 kHz.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-20T22:45:51Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: add more info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is completely untested. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
* To test on 2.6.22.5, use &amp;lt;code&amp;gt;git format-patch -o ''dir'' master..s3c2410-cpufreq&amp;lt;/code&amp;gt; to generate a set of patches, and apply them all on top of the OpenMoko patches 2.6.22.5 kernel, ''except'' the framebuffer patch(es) (the 2.6.24.x code for the framebuffer is different from the 2.6.22.5 one).&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should perhaps use a higher priority, so as to run before all the others for more precise timekeeping.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should make sure the NAND is quiesced before the frequency change, or change the timings to the most conservative ones before the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer; not a problem with full brightness)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD (can be avoided by not plugging it in)&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
&lt;br /&gt;
== Testing report ==&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-19 ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-January/000452.html 2.6.24.x doesn't boot on GTA01]. I hand-extracted the patches and applied them all on top of GTA01's 2.6.22.5 kernel, except for the framebuffer patch (which depends on some changes made after 2.6.24). It was booted on a GTA01 without the SD card or the SIM attached (just in case). The results were:&lt;br /&gt;
&lt;br /&gt;
* Setting to 202800 kHz: lost the USB connection. It would be recovered only after rebooting (setting the frequency back to 266000 wasn't enough). The rest of the tests were made with the on-screen terminal.&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): noticeable flicker, possibly because the framebuffer patch wasn't applied. The timer seems to be running at exactly half the correct rate (running &amp;quot;date&amp;quot; twice with 10s delay showed the GTA01's clock advanced only 5s).&lt;br /&gt;
* Rebooting (after coming back to 266000 kHz) fixed the USB connection.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-20 ===&lt;br /&gt;
&lt;br /&gt;
Same 2.6.22.5 kernel, with several bugfixes applied (in particular, the problem which prevented the timer notifier from running was fixed).&lt;br /&gt;
&lt;br /&gt;
This time, the whole test was done from the terminal, to avoid the USB lockup.&lt;br /&gt;
&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): same flicker. Plugging briefly the USB shows it to still be alive. Time runs at the correct speed.&lt;br /&gt;
* Setting to 100000 kHz (actually 101250 kHz): even worse flicker.&lt;br /&gt;
* Setting to 12000 kHz (SLOW mode on): the flicker gets psychedelic (colors start oscillating). VERY slow (taking about a second to register a &amp;quot;key&amp;quot; press).&lt;br /&gt;
* Back to 266000 kHz: works normally. Plugging briefly the USB again shows it to still be alive. Time still running at correct speed.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-20T22:41:58Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Hints */ changing afer boot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is completely untested. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output. You can also enable it after boot by going to the correct place at /sys/modules and changing the values there.&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should perhaps use a higher priority, so as to run before all the others for more precise timekeeping.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should make sure the NAND is quiesced before the frequency change, or change the timings to the most conservative ones before the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
&lt;br /&gt;
== Testing report ==&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-19 ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-January/000452.html 2.6.24.x doesn't boot on GTA01]. I hand-extracted the patches and applied them all on top of GTA01's 2.6.22.5 kernel, except for the framebuffer patch (which depends on some changes made after 2.6.24). It was booted on a GTA01 without the SD card or the SIM attached (just in case). The results were:&lt;br /&gt;
&lt;br /&gt;
* Setting to 202800 kHz: lost the USB connection. It would be recovered only after rebooting (setting the frequency back to 266000 wasn't enough). The rest of the tests were made with the on-screen terminal.&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): noticeable flicker, possibly because the framebuffer patch wasn't applied. The timer seems to be running at exactly half the correct rate (running &amp;quot;date&amp;quot; twice with 10s delay showed the GTA01's clock advanced only 5s).&lt;br /&gt;
* Rebooting (after coming back to 266000 kHz) fixed the USB connection.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-20 ===&lt;br /&gt;
&lt;br /&gt;
Same 2.6.22.5 kernel, with several bugfixes applied (in particular, the problem which prevented the timer notifier from running was fixed).&lt;br /&gt;
&lt;br /&gt;
This time, the whole test was done from the terminal, to avoid the USB lockup.&lt;br /&gt;
&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): same flicker. Plugging briefly the USB shows it to still be alive. Time runs at the correct speed.&lt;br /&gt;
* Setting to 100000 kHz (actually 101250 kHz): even worse flicker.&lt;br /&gt;
* Setting to 12000 kHz (SLOW mode on): the flicker gets psychedelic (colors start oscillating). VERY slow (taking about a second to register a &amp;quot;key&amp;quot; press).&lt;br /&gt;
* Back to 266000 kHz: works normally. Plugging briefly the USB again shows it to still be alive. Time still running at correct speed.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-20T22:40:27Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Testing report */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is completely untested. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output.&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should perhaps use a higher priority, so as to run before all the others for more precise timekeeping.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should make sure the NAND is quiesced before the frequency change, or change the timings to the most conservative ones before the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
&lt;br /&gt;
== Testing report ==&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-19 ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-January/000452.html 2.6.24.x doesn't boot on GTA01]. I hand-extracted the patches and applied them all on top of GTA01's 2.6.22.5 kernel, except for the framebuffer patch (which depends on some changes made after 2.6.24). It was booted on a GTA01 without the SD card or the SIM attached (just in case). The results were:&lt;br /&gt;
&lt;br /&gt;
* Setting to 202800 kHz: lost the USB connection. It would be recovered only after rebooting (setting the frequency back to 266000 wasn't enough). The rest of the tests were made with the on-screen terminal.&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): noticeable flicker, possibly because the framebuffer patch wasn't applied. The timer seems to be running at exactly half the correct rate (running &amp;quot;date&amp;quot; twice with 10s delay showed the GTA01's clock advanced only 5s).&lt;br /&gt;
* Rebooting (after coming back to 266000 kHz) fixed the USB connection.&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-20 ===&lt;br /&gt;
&lt;br /&gt;
Same 2.6.22.5 kernel, with several bugfixes applied (in particular, the problem which prevented the timer notifier from running was fixed).&lt;br /&gt;
&lt;br /&gt;
This time, the whole test was done from the terminal, to avoid the USB lockup.&lt;br /&gt;
&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): same flicker. Plugging briefly the USB shows it to still be alive. Time runs at the correct speed.&lt;br /&gt;
* Setting to 100000 kHz (actually 101250 kHz): even worse flicker.&lt;br /&gt;
* Setting to 12000 kHz (SLOW mode on): the flicker gets psychedelic (colors start oscillating). VERY slow (taking about a second to register a &amp;quot;key&amp;quot; press).&lt;br /&gt;
* Back to 266000 kHz: works normally. Plugging briefly the USB again shows it to still be alive. Time still running at correct speed.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-20T02:35:45Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: testing report&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is completely untested. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output.&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should perhaps use a higher priority, so as to run before all the others for more precise timekeeping.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should make sure the NAND is quiesced before the frequency change, or change the timings to the most conservative ones before the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
&lt;br /&gt;
== Testing report ==&lt;br /&gt;
&lt;br /&gt;
=== 2008-01-19 ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-January/000452.html 2.6.24.x doesn't boot on GTA01]. I hand-extracted the patches and applied them all on top of GTA01's 2.6.22.5 kernel, except for the framebuffer patch (which depends on some changes made after 2.6.24). It was booted on a GTA01 without the SD card or the SIM attached (just in case). The results were:&lt;br /&gt;
&lt;br /&gt;
* Setting to 202800 kHz: lost the USB connection. It would be recovered only after rebooting (setting the frequency back to 266000 wasn't enough). The rest of the tests were made with the on-screen terminal.&lt;br /&gt;
* Setting to 133000 kHz (actually 135000 kHz): noticeable flicker, possibly because the framebuffer patch wasn't applied. The timer seems to be running at exactly half the correct rate (running &amp;quot;date&amp;quot; twice with 10s delay showed the GTA01's clock advanced only 5s).&lt;br /&gt;
* Rebooting (after coming back to 266000 kHz) fixed the USB connection.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-19T20:24:13Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* To build */ hints&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is completely untested. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;lt;code&amp;gt;CONFIG_CPU_FREQ_DEBUG&amp;lt;/code&amp;gt; and add &amp;lt;code&amp;gt;cpufreq.debug=7&amp;lt;/code&amp;gt; to the kernel command line to enable the relevant debug output.&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should perhaps use a higher priority, so as to run before all the others for more precise timekeeping.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should make sure the NAND is quiesced before the frequency change, or change the timings to the most conservative ones before the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo_1973_GTA01_Power_Management</id>
		<title>Neo 1973 GTA01 Power Management</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo_1973_GTA01_Power_Management"/>
				<updated>2008-01-19T19:07:43Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: change s3c2410-cpufreq url&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{InProgress}}&lt;br /&gt;
This page details the power management of the Phase 1 Neo1973. Much of it is inapplicable to earlier models.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Power management is of utmost concern to any mobile device.  &lt;br /&gt;
Battery power is quite limited, so we need to make sure we try our best to conserve it. (See also [[Power management requirements]].)&lt;br /&gt;
&lt;br /&gt;
This is very much unimplemented at the moment.&lt;br /&gt;
&lt;br /&gt;
Current projects:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+Projects&lt;br /&gt;
!User||Project||details||URL&lt;br /&gt;
|-&lt;br /&gt;
|[[User:CesarB|cesarb]]||Cpufreq||Varying clock speed, including making peripherals work over during transitions||&lt;br /&gt;
 [[User:CesarB/cpufreq]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;3&amp;quot;&lt;br /&gt;
|+Required kernel mode power saving, and relative saving of battery life.&lt;br /&gt;
!Option ||Note||Average saving over next lowest&amp;lt;br&amp;gt; power state the description&amp;lt;br&amp;gt; is the total effect on battery life ||Status&lt;br /&gt;
|-&lt;br /&gt;
|External peripheral control || Ability to dim backlight, turn on and off GSM, GPS, and other devices outside the CPU || Huge (700mW) ||Implemented&lt;br /&gt;
|-&lt;br /&gt;
|Slow Mode || The CPU clock is 12MHz, this is the lowest power mode with the CPU awake ||Huge(300mW)|| Not implemented&lt;br /&gt;
|-&lt;br /&gt;
|Variable CPU core voltage || Dynamically alter CPU core voltage according to frequency ||Moderate(50mW)|| Not implemented, limited by PMU to .3V steps&lt;br /&gt;
|-&lt;br /&gt;
|CPU Idle mode|| Turn off CPU clock while rest of SoC remains awake||Large(150mW)||Not implemented&lt;br /&gt;
|-&lt;br /&gt;
|Variable CPU frequency ~20Mhz to 266Mhz||Vary CPU frequency to lower power consumption.||Huge(250mW)||Not implemented&lt;br /&gt;
|-&lt;br /&gt;
|Tickless Kernel||Remove periodic timer interrupts in kernel||Modest(10mW?)||Not implemented&lt;br /&gt;
|-&lt;br /&gt;
|Rapid Suspend-RAM||Suspend CPU totally and resume when required in under 1s.||Moderate (50mW)||Not implemented&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;3&amp;quot;&lt;br /&gt;
|+Required user-mode power saving&lt;br /&gt;
!Option||Note||Saving||Status&lt;br /&gt;
|-&lt;br /&gt;
|General speed optimization of all software||With variable CPU clock, the less CPU needed, the less power.||Moderate (Large with backlight off)||In Progress&lt;br /&gt;
|-&lt;br /&gt;
|Smart turning off unused peripherals||Interacting with kernel mode drivers to turn off bits the user isn't using||Large&lt;br /&gt;
|-&lt;br /&gt;
|Seamlessly switching to 256 colour||The LCD controller supports pallete mode. This would reduce memory bus traffic by a third.||Small||Of debatable value - only for P1 (?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page tries to describe the various power management features of the [[:Category:Neo1973 Hardware | Neo1973 Hardware]], their states, transitions, etc.  First, we start by describing the power states of the individual hardware components.  Then we look at it from a System Integration point of view.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S3C2410 SoC ==&lt;br /&gt;
&lt;br /&gt;
The [[Neo1973 Power Management#S3C2410 SoC | S3C2410 SoC section]] is an overview of the S3C2410 power states or modes and their capabilities. The S3C2410 has the following modes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;3&amp;quot;&lt;br /&gt;
|+ Power states for the [[Neo1973 Power Management#S3C2410 SoC | S3C2410 SoC(CPU)]] including approx memory bus current&lt;br /&gt;
! Mode || Frequency || Power consumption || Wakeup sources||Note&lt;br /&gt;
|-&lt;br /&gt;
! Normal Mode &lt;br /&gt;
| 33-266Mhz || (around 50-335mW depending on speed) || Awake&lt;br /&gt;
|-&lt;br /&gt;
! Idle Mode&lt;br /&gt;
|33-266Mhz||around 50-170mW depending on speed || Any interrupt || FCLK disconnected&lt;br /&gt;
|-&lt;br /&gt;
! Slow Mode&lt;br /&gt;
| 12Mhz||40mW || Awake, can vary clock speed as desired on interrupts. || CPU clock (FCLK), SDRAM, bus clocks set by 12Mhz crystal. &lt;br /&gt;
|-&lt;br /&gt;
! Power_off Mode&lt;br /&gt;
| off|| .2mW (@2V) || GSM, buttons, touchscreen, charger/USB connect, low battery|| EINT[0...15], RTC Alarm Interrupt, nBATT_FAULT pin. SDRAM self-refresh, RTC powered.&lt;br /&gt;
|-&lt;br /&gt;
!Peripheral||Power||Note||constraints&lt;br /&gt;
|-&lt;br /&gt;
!USB-H&lt;br /&gt;
|1mW||The USB host driver&lt;br /&gt;
|-&lt;br /&gt;
!USB-D&lt;br /&gt;
|6mW||The USB device driver||PCLK&amp;gt;20Mhz&lt;br /&gt;
|-&lt;br /&gt;
!LCD driver&lt;br /&gt;
|20(qvga)-80mW||LCD driver||HCLK&amp;gt;VCLK*4 (p386) VCLK(vga)=19Mhz VCLK(qvga)=4.75Mhz = CPU clock 80Mhz min(seems to work at 50Mhz according to u-boot pll set) or 32Mhz (min variable CPU speed)&lt;br /&gt;
|-&lt;br /&gt;
!PLL&lt;br /&gt;
|?mW||Phase locked loop, needed if not in slow mode.&lt;br /&gt;
|-&lt;br /&gt;
!Serial&lt;br /&gt;
|7mW||2/3 integrated serial ports&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== System design considerations ====&lt;br /&gt;
In order to fully support Power_off mode, we need to&lt;br /&gt;
* Be able to switch off VDDi/VDDiarm/VDDi_MPLL/VDDi_UPLL separately from VDDalive&lt;br /&gt;
&lt;br /&gt;
== PCF50606 PMU ==&lt;br /&gt;
&lt;br /&gt;
This is an overview of the PCF50606 power modes / state transitions&lt;br /&gt;
&lt;br /&gt;
=== NOPOWER ===&lt;br /&gt;
&lt;br /&gt;
Condition: Vbat &amp;lt; Vverylowbat &amp;amp;&amp;amp; Vback &amp;lt; Vlowback &amp;amp;&amp;amp; Vchgvin &amp;lt; Vlowchg&lt;br /&gt;
&lt;br /&gt;
Human-Readable: If main battery voltage &amp;lt; 2.7V and backup battery voltage &amp;lt; 1.3V and charger voltage &amp;lt; 2.7V&lt;br /&gt;
&lt;br /&gt;
=== SAVE ===&lt;br /&gt;
&lt;br /&gt;
Condition: Vbat &amp;lt; Vverylowbat &amp;amp;&amp;amp; (Vback &amp;gt; Vlowback || Vchgvin &amp;gt; Vlowchg)&lt;br /&gt;
&lt;br /&gt;
Human-readable: If main battery voltage &amp;lt; 2.7V and at least backup battery voltage &amp;gt; 1.3V or charger voltage &amp;gt; 2.7V.&lt;br /&gt;
&lt;br /&gt;
=== STANDBY ===&lt;br /&gt;
&lt;br /&gt;
Condition: Vbat &amp;gt; Vverylowbat&lt;br /&gt;
&lt;br /&gt;
Human-readable: If main battery voltage &amp;gt; 2.7V&lt;br /&gt;
&lt;br /&gt;
=== ACTIVE ===&lt;br /&gt;
&lt;br /&gt;
Condition: Vbat &amp;gt; Vlowbat&lt;br /&gt;
Human-Readable: If main battery voltage &amp;gt; 2.8V (configurable up to 3.4V)&lt;br /&gt;
Transition from STANDBY to ACTIVE: If ONKEY button is pressed, or RTC Alarm, or EXTON or charger insert or pen-down by touchscreen (we don't use the PMU TS controller)&lt;br /&gt;
&lt;br /&gt;
== JBT6K74 LCM ==&lt;br /&gt;
&lt;br /&gt;
=== Deep Standby ===&lt;br /&gt;
&lt;br /&gt;
In this mode, only the supply power is activated&lt;br /&gt;
&lt;br /&gt;
=== Sleep ===&lt;br /&gt;
&lt;br /&gt;
Holds register data with clock stopped&lt;br /&gt;
&lt;br /&gt;
=== Normal ===&lt;br /&gt;
&lt;br /&gt;
Fully powered up and operational&lt;br /&gt;
&lt;br /&gt;
== System Level ==&lt;br /&gt;
&lt;br /&gt;
This is a description of the system-level power management.&lt;br /&gt;
&lt;br /&gt;
=== System Power states ===&lt;br /&gt;
&lt;br /&gt;
In order to do system-level power management, we need to introduce state definitions with their according state names.  The state names are prefixed by SYS_POWER_.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+System power management states. Name prefixed with SYS_POWER_    &amp;lt;small&amp;gt;PMU off is turned off by switching off the requisite output of the PCF50606&amp;lt;/small&amp;gt;&lt;br /&gt;
!Name||Note||PCF50606&amp;lt;br&amp;gt;PSU chip||S3C2410&amp;lt;br&amp;gt;CPU||JBT6K74&amp;lt;br&amp;gt;LCD driver||GSM||GPS||Bluetooth||Backlight&lt;br /&gt;
|-&lt;br /&gt;
|NO||No main battery or USB charger. Backup battery operational||Save||Off||PMU off||Off - no Vbatt||PMU off||PMU off||off&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|OFF||&amp;quot;Switched Off&amp;quot; - no functionality||Standby||PMU off||PMU off||Off by MODEM_ON to LOW||PMU off||PMU off||off&lt;br /&gt;
|-&lt;br /&gt;
|SLEEP||Suspend-RAM (in pocket waiting for a call)||Active||Power_Off||PMU Off||On by MODEM_ON to HIGH||Optional||Deep Standby||Off&lt;br /&gt;
|-&lt;br /&gt;
|SCRSAVE||Screen Saver||Active||SLOW, IDLE||SLEEP||On by MODEM_ON to HIGH||Optional||Optional||Off&lt;br /&gt;
|-&lt;br /&gt;
|ON||Normal active state||Active||On||Normal||On by MODEM_ON to HIGH||Optional||On||On, PWM'd brightness&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Wake-up reasons ===&lt;br /&gt;
&lt;br /&gt;
In the following events, we want the main CPU to be able to be woken up from Power_off (SYS_POWER_SLEEP) state:&lt;br /&gt;
&lt;br /&gt;
==== Events from GSM ====&lt;br /&gt;
&lt;br /&gt;
* Incoming phone call&lt;br /&gt;
* Incoming SMS&lt;br /&gt;
* Loss of network signal&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
&lt;br /&gt;
The GSM daemon configures the GSM Modem so as to wake the CPU when events happen.&lt;br /&gt;
&lt;br /&gt;
The S3C2410 has the EINT0 pin of the S3C2410 connected to the GSM modem, which wakes it on configured events.&lt;br /&gt;
&lt;br /&gt;
==== GPIO from Bluetooth ====&lt;br /&gt;
&lt;br /&gt;
PIO_2 of the DFBM-CS320 is connected to GPC7 of the s3c2410.&amp;lt;br&amp;gt;&lt;br /&gt;
PIO_5 of the DFBM-CS320 is connected to GPC5 of the s3c2410.&amp;lt;br&amp;gt;&lt;br /&gt;
BT_EN of the DFBM-CS320 is connected to GPB5 if the s3c2410. [http://svn.openmoko.org/trunk/doc/hardware/GTA01Bv4/gpio.txt]&lt;br /&gt;
&lt;br /&gt;
==== Button Press ====&lt;br /&gt;
&lt;br /&gt;
If somebody pushes either the [[Neo1973 Aux Button]] or the [[Neo1973 Power Button]], the system shall wake up.&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
&lt;br /&gt;
====== Power Button ======&lt;br /&gt;
During suspend, the PMU is configured to allow PWRONF events to generate interrupts to the CPU.&lt;br /&gt;
(This is if PWR_IRQ is the internal signal from the PMU, mentioned in gpio.txt)&lt;br /&gt;
&lt;br /&gt;
====== Aux Button ======&lt;br /&gt;
The Aux button is connected the EINT6 pin, which can wake-up the CPU from Power_off. &lt;br /&gt;
&lt;br /&gt;
This means that resuming on Aux button will work out-of-the-box&lt;br /&gt;
&lt;br /&gt;
==== Charger Events ====&lt;br /&gt;
&lt;br /&gt;
If a charger plug (or any other USB device) is connected, the device shall resume and update the battery [charger] status. Also, charger errors such as over/undervoltage, over/under-temperature shall be reported.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
During suspend, the PMU is configured to allow EXTONR,CHGERR and related events to generate interrupts to the CPU.&lt;br /&gt;
&lt;br /&gt;
In GTA01Bv4, the PMU IRQ is connected to EINT9.&lt;br /&gt;
&lt;br /&gt;
{{note|Up to GTA01Bv3, the PMU IRQ is connected to EINT16, i.e. an interrupt source that cannot wake-up from Power_off mode!}}&lt;br /&gt;
&lt;br /&gt;
== Voltages ==&lt;br /&gt;
{{note | This section reflects the wiring of power rails in GTA01Bv04 }}&lt;br /&gt;
&lt;br /&gt;
=== VB ===&lt;br /&gt;
&lt;br /&gt;
* Battery terminal voltage&lt;br /&gt;
* Used by&lt;br /&gt;
** [[LM4857]] Amplifier (vdd1-4)&lt;br /&gt;
** [[PCF50606]] PMU&lt;br /&gt;
** LCM Backlight (via U6001)&lt;br /&gt;
** U7602 AVDD/GL_3V3 regulator&lt;br /&gt;
** GSM Modem&lt;br /&gt;
&lt;br /&gt;
=== CORE_1V8 ===&lt;br /&gt;
&lt;br /&gt;
* This is the S3C2410 Core Voltage&lt;br /&gt;
* Generated by PMU DCUD&lt;br /&gt;
* Used by&lt;br /&gt;
** S3C2410 (vddiarm/vddi/vddi_mpll/vddi_upll)&lt;br /&gt;
&lt;br /&gt;
=== STBY_1V8 ===&lt;br /&gt;
&lt;br /&gt;
* Standby Voltage for S3C2410&lt;br /&gt;
* Generated by PMU D3REG&lt;br /&gt;
* Used by&lt;br /&gt;
** S3C2410 (vddalive/rtc)&lt;br /&gt;
&lt;br /&gt;
=== IO_3V3 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by PMU DCDE&lt;br /&gt;
* Used by&lt;br /&gt;
** lots of pullups&lt;br /&gt;
** U1502 (latch for GSM UART)&lt;br /&gt;
** S3C2410 VDDMOP&lt;br /&gt;
** S3C2410 VDDOP&lt;br /&gt;
** S3C2410 VDDA_ADC&lt;br /&gt;
** S3C2410 nBATT_FLT&lt;br /&gt;
** S3C2410 !EXTCLK&lt;br /&gt;
** SDRAM_VCC3&lt;br /&gt;
** FLASH_3V3&lt;br /&gt;
** [[LM4857]] Amplifier (i2cvdd)&lt;br /&gt;
** Vibrator&lt;br /&gt;
** Touch panel transistors&lt;br /&gt;
** SD_3V3 via U7501&lt;br /&gt;
** PMU (avdd)&lt;br /&gt;
&lt;br /&gt;
=== GL_1V5 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by PMU DCDF&lt;br /&gt;
* Used by&lt;br /&gt;
** AGPS (vdd_core)&lt;br /&gt;
&lt;br /&gt;
=== GL_2V5 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by PMU D2REG&lt;br /&gt;
* Used by&lt;br /&gt;
** AGPS (vdd_pllreg)&lt;br /&gt;
&lt;br /&gt;
=== GL_3V3 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by U7602&lt;br /&gt;
* Used by&lt;br /&gt;
** AGPS (vdd_io/vdd_lpreg)&lt;br /&gt;
** AGPS (X7601 -&amp;gt; rtcclk)&lt;br /&gt;
&lt;br /&gt;
* Controlled by&lt;br /&gt;
** EN_AGPS3V3 GPIO&lt;br /&gt;
&lt;br /&gt;
=== AVDD ===&lt;br /&gt;
3V&lt;br /&gt;
* Generated by U7602&lt;br /&gt;
* Used by&lt;br /&gt;
** AGPS (lna power int/ext, antenna switch)&lt;br /&gt;
&lt;br /&gt;
* Controlled by&lt;br /&gt;
** EN_AGPS3V GPIO&lt;br /&gt;
&lt;br /&gt;
=== CODEC_3V3 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by PMU IOVDD&lt;br /&gt;
* Used for&lt;br /&gt;
** Audio Codec (digital and analog)&lt;br /&gt;
&lt;br /&gt;
=== BT_3V15 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by PMU D1REG&lt;br /&gt;
* Used by&lt;br /&gt;
** Bluetooth Module&lt;br /&gt;
&lt;br /&gt;
=== LCM_3V3 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by PMU LPVDDD&lt;br /&gt;
* Used by&lt;br /&gt;
** Headset/GSM Uart Latch&lt;br /&gt;
** LCM&lt;br /&gt;
&lt;br /&gt;
=== FLASH_3V3 ===&lt;br /&gt;
&lt;br /&gt;
* Derived from IO_3V3&lt;br /&gt;
* Used by&lt;br /&gt;
** NAND Flash&lt;br /&gt;
&lt;br /&gt;
=== SDRAM_VCC3 ===&lt;br /&gt;
&lt;br /&gt;
* Derived from IO_3V3&lt;br /&gt;
* Used by&lt;br /&gt;
** SDRAM&lt;br /&gt;
&lt;br /&gt;
=== SD_3V3 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by U7501&lt;br /&gt;
* Used by&lt;br /&gt;
** microSD slot&lt;br /&gt;
&lt;br /&gt;
* Controlled by&lt;br /&gt;
** SD_ON GPIO&lt;br /&gt;
&lt;br /&gt;
== Kernel API ==&lt;br /&gt;
&lt;br /&gt;
== Userspace API ==&lt;br /&gt;
&lt;br /&gt;
== Approximate power draw of various subsystems ==&lt;br /&gt;
&lt;br /&gt;
In P0 and P1 phones, the battery has a total of 1200mAh, at 3.6V. This is approximately 3500mWh, once power supply losses are taken into account. The figures below are estimates from datasheets.&lt;br /&gt;
&lt;br /&gt;
These do not take into account the severe hardware bugs of phase 0 hardware, which severely affect power use.&lt;br /&gt;
&lt;br /&gt;
* LCD &lt;br /&gt;
**  150mW with backlight at full brightness&lt;br /&gt;
**  15mW with backlight at 10%&lt;br /&gt;
* CPU&lt;br /&gt;
**  320mW @ 200MHz&lt;br /&gt;
**  450mW @ 266MHz&lt;br /&gt;
**  140mW @ 200MHz idle.&lt;br /&gt;
**  50mW @ 12MHz (slow mode)&lt;br /&gt;
*** These include fudge factors for RAM and other systems, from the CPU datasheet.&lt;br /&gt;
*RAM 600mW at 600Mbytes/sec, power use broadly proportional to transfer rate.&lt;br /&gt;
* Bluetooth&lt;br /&gt;
**  63mW @ Tx Burst (file transfer, send)&lt;br /&gt;
**  36mW @ Rx Burst (file transfer, receive)&lt;br /&gt;
**  3.6mW @ Idle, beacon only&lt;br /&gt;
*** Based on the datasheets provided&lt;br /&gt;
* GSM ?&lt;br /&gt;
**Idle, but connected to network, 45mW&lt;br /&gt;
**Active on a call - up to 600mW, closer to tower less.&lt;br /&gt;
* GPS&lt;br /&gt;
** 45mW&lt;br /&gt;
*** Rough measurement&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+CPU clock speed constraints&lt;br /&gt;
!Frequency(Mhz)||Notes||QVGA LCD||VGA LCD||USB device&lt;br /&gt;
|-&lt;br /&gt;
|12||Slow mode||No||No||No&lt;br /&gt;
|-&lt;br /&gt;
|12-33.74||Impossible or violates PLL spec&lt;br /&gt;
|-&lt;br /&gt;
|33.75-67.5|| ||Yes||No||Yes (with proper setting of HCLK divider)&lt;br /&gt;
|-&lt;br /&gt;
|79-266||  ||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
|268-300||Overclocking||?||?||?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Recommended clock speeds: 12 33.75 45 48 50.7 56.25 67.5 79 84.75 90 101.25 113.0 118.5 124.0 135.0 147.0 152 158 170 180 186 192 202.8 266 268 270&lt;br /&gt;
&lt;br /&gt;
Other clock speeds are possible (in the 33.75-266Mhz range) by setting the PLL, however, the datasheet strongly recommends these, and recommends contacting samsung for speeds not listed above.&lt;br /&gt;
&lt;br /&gt;
This would imply that with the CPU constantly on in low power mode, GPS and GSM blipping on and off, and display off, the worst case power consumption is probably around 70mW, leading to a battery life of 2 days.&lt;br /&gt;
If the CPU is turned off, battery life rises significantly.&lt;br /&gt;
&lt;br /&gt;
With everything on, playing video with sound, for example should get well over 3 hours. (500mW LCD + 320mW CPU + 200mW audio + 50mW GPS.  4.5Wh at 1.1W draw) &lt;br /&gt;
&lt;br /&gt;
Both voltage and clock speed to the CPU core can be altered.&lt;br /&gt;
Exactly how this will work with the hardware is yet to be determined.&lt;br /&gt;
It is possible that it may be capable of playing MP3s with the CPU clock at 60Mhz. This would considerably extend battery to well over 10 hours. Optimistically &amp;gt;24 hours of mp3.&lt;br /&gt;
&lt;br /&gt;
The lowest power state I have gotten the Neo1973 phase-1 to run in is 90mA or so, for a life of some 12 hours.&lt;br /&gt;
This is with backlight, GSM modem, bluetooth, GPS, off, the CPU clocked at 100Mhz, and undervolted to 1.8V, connected over usb-net (not powered via USB)&lt;br /&gt;
&lt;br /&gt;
8 hours playing mp3 at moderate volume. (same caveats as above.)&lt;br /&gt;
&lt;br /&gt;
== Measured power draw on phase 0 neo1973 ==&lt;br /&gt;
&lt;br /&gt;
I played with old ampermeter, old nokia 3110 (as a power supply) and phase0 neo1973 a bit. It appears to eat 1.02 mW while powered off, 1.02W while booted (backlight on), ~0.51W while sleeping (with backlight on) and 1.4W while loading applications.&lt;br /&gt;
&lt;br /&gt;
== Logging battery parameters to troubleshoot charging ==&lt;br /&gt;
&lt;br /&gt;
'''WARNING'''&lt;br /&gt;
&lt;br /&gt;
'''After installing and starting this script my Neo battery went flat in &amp;lt; 1 hour. Previously it was fine even overnight. If your battery is so flat that the Neo will not boot then leave it plugged in to a USB port for 15-20 minutes before powering up.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some neos have managed to discharge their battery down to empty while off, plugged in, and supposedly charging from a 500ma-capable usb device.  In order to help figure out how the state of charge changes while charging, running of battery, sleeping on battery, and sleeping while connected to usb, download two scripts in http://wile.org/stuff/power.tar  Put the power-watch script in /usr/local/bin/ and the powerlog script in /etc/init.d, then &lt;br /&gt;
&lt;br /&gt;
 # ln -s ../init.d/powerlog /etc/rc5.d/S15powerlog&lt;br /&gt;
&lt;br /&gt;
so that it starts up with the neo.&lt;br /&gt;
&lt;br /&gt;
The script logs the time, battery voltage, charging current, battery temperature, charging mode, bluetooth-on status, gps-on status, gsm-on status, and backlight brightness numbers.  The [[Kernel#Battery_charging_current|kernel page]] claims the charging current is in ma, but that does not appear to be the case for all builds? eg 2.6.21.6-moko10.  The battery temperature does not always appear to be in degrees C, either.&lt;br /&gt;
&lt;br /&gt;
After a few runs we can calibrate volts-to-remaining power, and then estimate off or sleep current draw and charging rate by observing the power drop [or rise] vs time between successive os boots.&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Neo1973 Phase 0 related]]&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-19T19:06:52Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: done&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change). Deciding which frequency to use is the responsability of code from somewhere else (either cpufreq governors or userspace).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing. This code is completely untested. It might even not compile.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
== What's already done ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
This code resides on &amp;lt;code&amp;gt;arch/arm/mach-s3c2410/s3c2410-cpufreq.c&amp;lt;/code&amp;gt; and is responsible for actually changing the frequency.&lt;br /&gt;
&lt;br /&gt;
The list of available frequencies and their parameters (HCLK/PCLK dividers) can be found on this file.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
Timer 4 is used by the kernel as the periodic tick timer. The cpufreq notifier on &amp;lt;code&amp;gt;arch/arm/plat-s3c24xx/time.c&amp;lt;/code&amp;gt; is responsible for adjusting the current and reload values of the timer to match the new frequency.&lt;br /&gt;
&lt;br /&gt;
=== Serial driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/serial/s3c2410.c&amp;lt;/code&amp;gt; is responsible for (if possible) pausing both sides of the serial transmission before the frequency change and reloading the baud generator (and unpausing the serial transmission) after the change.&lt;br /&gt;
&lt;br /&gt;
Pausing the transmission is currently only possible with hardware flow control. Since both serial ports on GTA01 use hardware flow control, that's not a problem (unless you are using the serial console).&lt;br /&gt;
&lt;br /&gt;
=== Framebuffer driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/video/s3c2410fb.c&amp;lt;/code&amp;gt; is responsible for turning off the video before the frequency change and reloading its configuration after the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier on &amp;lt;code&amp;gt;drivers/mtd/nand/s3c2410.c&amp;lt;/code&amp;gt; is responsible for reprogramming the NAND timings after a frequency change.&lt;br /&gt;
&lt;br /&gt;
== What's missing ==&lt;br /&gt;
&lt;br /&gt;
=== S3C2410A cpufreq driver ===&lt;br /&gt;
&lt;br /&gt;
The frequency table should be checked for better divisor values (1:1:1 might be appropriate in more situations), and the code should be able to deal with HDIVN1 and different bus modes.&lt;br /&gt;
&lt;br /&gt;
=== Timer 4 driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should perhaps use a higher priority, so as to run before all the others for more precise timekeeping.&lt;br /&gt;
&lt;br /&gt;
=== NAND driver ===&lt;br /&gt;
&lt;br /&gt;
The cpufreq notifier should make sure the NAND is quiesced before the frequency change, or change the timings to the most conservative ones before the frequency change.&lt;br /&gt;
&lt;br /&gt;
=== Missing drivers ===&lt;br /&gt;
&lt;br /&gt;
* Backlight (uses a PWM timer)&lt;br /&gt;
* Vibrator (uses a PWM timer)&lt;br /&gt;
* MMC/SD&lt;br /&gt;
* I2C (without a notifier and booting at the maximum speed, it can only get slower; there should be no side effects, since there's no minimum bus speed)&lt;br /&gt;
* IIS&lt;br /&gt;
* SPI&lt;br /&gt;
&lt;br /&gt;
=== Frequency restrictions ===&lt;br /&gt;
&lt;br /&gt;
Some drivers need specific frequencies. Currently there's no way to tell the cpufreq core of that, but at minimum a cpufreq notifier should be used to turn them off if they won't be able to work with that frequency.&lt;br /&gt;
&lt;br /&gt;
* The datasheet says the USB device gets unstable if the frequency is below a minimum value&lt;br /&gt;
* When using the IIS device, changing the frequency might not be a good idea, since it can cause audio glitches. It also probably needs a minimum frequency depending on the output audio frequency and sample size.&lt;br /&gt;
* The LCD device might also need a minimum frequency.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-19T18:40:23Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== To build ==&lt;br /&gt;
&lt;br /&gt;
{{note|Do not run on real hardware, unless you '''''really''''' know what you are doing.}}&lt;br /&gt;
&lt;br /&gt;
You need a fully built OpenMoko tree for the cross-compiler and uboot tools.&lt;br /&gt;
&lt;br /&gt;
# Checkout the s3c2410-cpufreq-gta01 branch&lt;br /&gt;
# Copy the defconfig file from branches/src/target/kernel/2.6.24.x/config on the OpenMoko svn as the &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Set the PATH to the correct value (check the run.* temporary files bitbake generates to find out the correct value)&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- oldconfig&amp;lt;/code&amp;gt; and answer correctly the questions&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&amp;lt;/code&amp;gt;&lt;br /&gt;
# The last line of the output tells you the correct file which should be flashed on the emulator.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/cpufreq</id>
		<title>User:CesarB/cpufreq</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/cpufreq"/>
				<updated>2008-01-19T18:34:37Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cpufreq subsystem is a Linux kernel subsystem responsible for managing the CPU frequency. It's commonly used in laptops to reduce power usage when idle.&lt;br /&gt;
&lt;br /&gt;
On the S3C2410, adjusting the CPU frequency changes the clocks for almost all devices on the chip. This means that, to write a cpufreq driver for the S3C2410, you have to also adjust some values on almost all devices.&lt;br /&gt;
&lt;br /&gt;
This project aims to implement the cpufreq driver (which manages the CPU frequency transitions) and a cpufreq notifier for all the affected drivers (to do two things: quiesce the device before the change, and adjust the frequency after the change).&lt;br /&gt;
&lt;br /&gt;
The most recent version of the code can be found at http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git on the branches s3c2410-cpufreq (for code which applies on top of the upstream &amp;quot;git HEAD&amp;quot; kernel) and s3c2410-cpufreq-gta01 (for code which applies on top of the OpenMoko patched kernel).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 GTA01 Power Management]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB</id>
		<title>User:CesarB</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB"/>
				<updated>2008-01-19T18:08:12Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Subpages */ +cpufreq&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a Bachelor of Computer Science from the Universidade Federal do Rio de Janeiro.&lt;br /&gt;
&lt;br /&gt;
I am a Linux user since 1997. The distribution I currently use is Kubuntu.&lt;br /&gt;
&lt;br /&gt;
== Subpages ==&lt;br /&gt;
&lt;br /&gt;
* [[/Using a local overlay]]&lt;br /&gt;
* [[/Compiling for EABI]]&lt;br /&gt;
* [[/Things not to do with your Neo]]&lt;br /&gt;
* [[/cpufreq]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo_1973_GTA01_Power_Management</id>
		<title>Neo 1973 GTA01 Power Management</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo_1973_GTA01_Power_Management"/>
				<updated>2008-01-16T23:35:56Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: link to user page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{InProgress}}&lt;br /&gt;
This page details the power management of the Phase 1 Neo1973. Much of it is inapplicable to earlier models.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Power management is of utmost concern to any mobile device.  &lt;br /&gt;
Battery power is quite limited, so we need to make sure we try our best to conserve it. (See also [[Power management requirements]].)&lt;br /&gt;
&lt;br /&gt;
This is very much unimplemented at the moment.&lt;br /&gt;
&lt;br /&gt;
Current projects:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+Projects&lt;br /&gt;
!User||Project||details||URL&lt;br /&gt;
|-&lt;br /&gt;
|[[User:CesarB|cesarb]]||Cpufreq||Varying clock speed, including making peripherals work over during transitions||&lt;br /&gt;
 http://repo.or.cz/w/linux-2.6/s3c2410-cpufreq.git (branch s3c2410-cpufreq)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;3&amp;quot;&lt;br /&gt;
|+Required kernel mode power saving, and relative saving of battery life.&lt;br /&gt;
!Option ||Note||Average saving over next lowest&amp;lt;br&amp;gt; power state the description&amp;lt;br&amp;gt; is the total effect on battery life ||Status&lt;br /&gt;
|-&lt;br /&gt;
|External peripheral control || Ability to dim backlight, turn on and off GSM, GPS, and other devices outside the CPU || Huge (700mW) ||Implemented&lt;br /&gt;
|-&lt;br /&gt;
|Slow Mode || The CPU clock is 12MHz, this is the lowest power mode with the CPU awake ||Huge(300mW)|| Not implemented&lt;br /&gt;
|-&lt;br /&gt;
|Variable CPU core voltage || Dynamically alter CPU core voltage according to frequency ||Moderate(50mW)|| Not implemented, limited by PMU to .3V steps&lt;br /&gt;
|-&lt;br /&gt;
|CPU Idle mode|| Turn off CPU clock while rest of SoC remains awake||Large(150mW)||Not implemented&lt;br /&gt;
|-&lt;br /&gt;
|Variable CPU frequency ~20Mhz to 266Mhz||Vary CPU frequency to lower power consumption.||Huge(250mW)||Not implemented&lt;br /&gt;
|-&lt;br /&gt;
|Tickless Kernel||Remove periodic timer interrupts in kernel||Modest(10mW?)||Not implemented&lt;br /&gt;
|-&lt;br /&gt;
|Rapid Suspend-RAM||Suspend CPU totally and resume when required in under 1s.||Moderate (50mW)||Not implemented&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;3&amp;quot;&lt;br /&gt;
|+Required user-mode power saving&lt;br /&gt;
!Option||Note||Saving||Status&lt;br /&gt;
|-&lt;br /&gt;
|General speed optimization of all software||With variable CPU clock, the less CPU needed, the less power.||Moderate (Large with backlight off)||In Progress&lt;br /&gt;
|-&lt;br /&gt;
|Smart turning off unused peripherals||Interacting with kernel mode drivers to turn off bits the user isn't using||Large&lt;br /&gt;
|-&lt;br /&gt;
|Seamlessly switching to 256 colour||The LCD controller supports pallete mode. This would reduce memory bus traffic by a third.||Small||Of debatable value - only for P1 (?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page tries to describe the various power management features of the [[:Category:Neo1973 Hardware | Neo1973 Hardware]], their states, transitions, etc.  First, we start by describing the power states of the individual hardware components.  Then we look at it from a System Integration point of view.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S3C2410 SoC ==&lt;br /&gt;
&lt;br /&gt;
The [[Neo1973 Power Management#S3C2410 SoC | S3C2410 SoC section]] is an overview of the S3C2410 power states or modes and their capabilities. The S3C2410 has the following modes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;3&amp;quot;&lt;br /&gt;
|+ Power states for the [[Neo1973 Power Management#S3C2410 SoC | S3C2410 SoC(CPU)]] including approx memory bus current&lt;br /&gt;
! Mode || Frequency || Power consumption || Wakeup sources||Note&lt;br /&gt;
|-&lt;br /&gt;
! Normal Mode &lt;br /&gt;
| 33-266Mhz || (around 50-335mW depending on speed) || Awake&lt;br /&gt;
|-&lt;br /&gt;
! Idle Mode&lt;br /&gt;
|33-266Mhz||around 50-170mW depending on speed || Any interrupt || FCLK disconnected&lt;br /&gt;
|-&lt;br /&gt;
! Slow Mode&lt;br /&gt;
| 12Mhz||40mW || Awake, can vary clock speed as desired on interrupts. || CPU clock (FCLK), SDRAM, bus clocks set by 12Mhz crystal. &lt;br /&gt;
|-&lt;br /&gt;
! Power_off Mode&lt;br /&gt;
| off|| .2mW (@2V) || GSM, buttons, touchscreen, charger/USB connect, low battery|| EINT[0...15], RTC Alarm Interrupt, nBATT_FAULT pin. SDRAM self-refresh, RTC powered.&lt;br /&gt;
|-&lt;br /&gt;
!Peripheral||Power||Note||constraints&lt;br /&gt;
|-&lt;br /&gt;
!USB-H&lt;br /&gt;
|1mW||The USB host driver&lt;br /&gt;
|-&lt;br /&gt;
!USB-D&lt;br /&gt;
|6mW||The USB device driver||PCLK&amp;gt;20Mhz&lt;br /&gt;
|-&lt;br /&gt;
!LCD driver&lt;br /&gt;
|20(qvga)-80mW||LCD driver||HCLK&amp;gt;VCLK*4 (p386) VCLK(vga)=19Mhz VCLK(qvga)=4.75Mhz = CPU clock 80Mhz min(seems to work at 50Mhz according to u-boot pll set) or 32Mhz (min variable CPU speed)&lt;br /&gt;
|-&lt;br /&gt;
!PLL&lt;br /&gt;
|?mW||Phase locked loop, needed if not in slow mode.&lt;br /&gt;
|-&lt;br /&gt;
!Serial&lt;br /&gt;
|7mW||2/3 integrated serial ports&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== System design considerations ====&lt;br /&gt;
In order to fully support Power_off mode, we need to&lt;br /&gt;
* Be able to switch off VDDi/VDDiarm/VDDi_MPLL/VDDi_UPLL separately from VDDalive&lt;br /&gt;
&lt;br /&gt;
== PCF50606 PMU ==&lt;br /&gt;
&lt;br /&gt;
This is an overview of the PCF50606 power modes / state transitions&lt;br /&gt;
&lt;br /&gt;
=== NOPOWER ===&lt;br /&gt;
&lt;br /&gt;
Condition: Vbat &amp;lt; Vverylowbat &amp;amp;&amp;amp; Vback &amp;lt; Vlowback &amp;amp;&amp;amp; Vchgvin &amp;lt; Vlowchg&lt;br /&gt;
&lt;br /&gt;
Human-Readable: If main battery voltage &amp;lt; 2.7V and backup battery voltage &amp;lt; 1.3V and charger voltage &amp;lt; 2.7V&lt;br /&gt;
&lt;br /&gt;
=== SAVE ===&lt;br /&gt;
&lt;br /&gt;
Condition: Vbat &amp;lt; Vverylowbat &amp;amp;&amp;amp; (Vback &amp;gt; Vlowback || Vchgvin &amp;gt; Vlowchg)&lt;br /&gt;
&lt;br /&gt;
Human-readable: If main battery voltage &amp;lt; 2.7V and at least backup battery voltage &amp;gt; 1.3V or charger voltage &amp;gt; 2.7V.&lt;br /&gt;
&lt;br /&gt;
=== STANDBY ===&lt;br /&gt;
&lt;br /&gt;
Condition: Vbat &amp;gt; Vverylowbat&lt;br /&gt;
&lt;br /&gt;
Human-readable: If main battery voltage &amp;gt; 2.7V&lt;br /&gt;
&lt;br /&gt;
=== ACTIVE ===&lt;br /&gt;
&lt;br /&gt;
Condition: Vbat &amp;gt; Vlowbat&lt;br /&gt;
Human-Readable: If main battery voltage &amp;gt; 2.8V (configurable up to 3.4V)&lt;br /&gt;
Transition from STANDBY to ACTIVE: If ONKEY button is pressed, or RTC Alarm, or EXTON or charger insert or pen-down by touchscreen (we don't use the PMU TS controller)&lt;br /&gt;
&lt;br /&gt;
== JBT6K74 LCM ==&lt;br /&gt;
&lt;br /&gt;
=== Deep Standby ===&lt;br /&gt;
&lt;br /&gt;
In this mode, only the supply power is activated&lt;br /&gt;
&lt;br /&gt;
=== Sleep ===&lt;br /&gt;
&lt;br /&gt;
Holds register data with clock stopped&lt;br /&gt;
&lt;br /&gt;
=== Normal ===&lt;br /&gt;
&lt;br /&gt;
Fully powered up and operational&lt;br /&gt;
&lt;br /&gt;
== System Level ==&lt;br /&gt;
&lt;br /&gt;
This is a description of the system-level power management.&lt;br /&gt;
&lt;br /&gt;
=== System Power states ===&lt;br /&gt;
&lt;br /&gt;
In order to do system-level power management, we need to introduce state definitions with their according state names.  The state names are prefixed by SYS_POWER_.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+System power management states. Name prefixed with SYS_POWER_    &amp;lt;small&amp;gt;PMU off is turned off by switching off the requisite output of the PCF50606&amp;lt;/small&amp;gt;&lt;br /&gt;
!Name||Note||PCF50606&amp;lt;br&amp;gt;PSU chip||S3C2410&amp;lt;br&amp;gt;CPU||JBT6K74&amp;lt;br&amp;gt;LCD driver||GSM||GPS||Bluetooth||Backlight&lt;br /&gt;
|-&lt;br /&gt;
|NO||No main battery or USB charger. Backup battery operational||Save||Off||PMU off||Off - no Vbatt||PMU off||PMU off||off&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|OFF||&amp;quot;Switched Off&amp;quot; - no functionality||Standby||PMU off||PMU off||Off by MODEM_ON to LOW||PMU off||PMU off||off&lt;br /&gt;
|-&lt;br /&gt;
|SLEEP||Suspend-RAM (in pocket waiting for a call)||Active||Power_Off||PMU Off||On by MODEM_ON to HIGH||Optional||Deep Standby||Off&lt;br /&gt;
|-&lt;br /&gt;
|SCRSAVE||Screen Saver||Active||SLOW, IDLE||SLEEP||On by MODEM_ON to HIGH||Optional||Optional||Off&lt;br /&gt;
|-&lt;br /&gt;
|ON||Normal active state||Active||On||Normal||On by MODEM_ON to HIGH||Optional||On||On, PWM'd brightness&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Wake-up reasons ===&lt;br /&gt;
&lt;br /&gt;
In the following events, we want the main CPU to be able to be woken up from Power_off (SYS_POWER_SLEEP) state:&lt;br /&gt;
&lt;br /&gt;
==== Events from GSM ====&lt;br /&gt;
&lt;br /&gt;
* Incoming phone call&lt;br /&gt;
* Incoming SMS&lt;br /&gt;
* Loss of network signal&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
&lt;br /&gt;
The GSM daemon configures the GSM Modem so as to wake the CPU when events happen.&lt;br /&gt;
&lt;br /&gt;
The S3C2410 has the EINT0 pin of the S3C2410 connected to the GSM modem, which wakes it on configured events.&lt;br /&gt;
&lt;br /&gt;
==== GPIO from Bluetooth ====&lt;br /&gt;
&lt;br /&gt;
PIO_2 of the DFBM-CS320 is connected to GPC7 of the s3c2410.&amp;lt;br&amp;gt;&lt;br /&gt;
PIO_5 of the DFBM-CS320 is connected to GPC5 of the s3c2410.&amp;lt;br&amp;gt;&lt;br /&gt;
BT_EN of the DFBM-CS320 is connected to GPB5 if the s3c2410. [http://svn.openmoko.org/trunk/doc/hardware/GTA01Bv4/gpio.txt]&lt;br /&gt;
&lt;br /&gt;
==== Button Press ====&lt;br /&gt;
&lt;br /&gt;
If somebody pushes either the [[Neo1973 Aux Button]] or the [[Neo1973 Power Button]], the system shall wake up.&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
&lt;br /&gt;
====== Power Button ======&lt;br /&gt;
During suspend, the PMU is configured to allow PWRONF events to generate interrupts to the CPU.&lt;br /&gt;
(This is if PWR_IRQ is the internal signal from the PMU, mentioned in gpio.txt)&lt;br /&gt;
&lt;br /&gt;
====== Aux Button ======&lt;br /&gt;
The Aux button is connected the EINT6 pin, which can wake-up the CPU from Power_off. &lt;br /&gt;
&lt;br /&gt;
This means that resuming on Aux button will work out-of-the-box&lt;br /&gt;
&lt;br /&gt;
==== Charger Events ====&lt;br /&gt;
&lt;br /&gt;
If a charger plug (or any other USB device) is connected, the device shall resume and update the battery [charger] status. Also, charger errors such as over/undervoltage, over/under-temperature shall be reported.&lt;br /&gt;
&lt;br /&gt;
===== Implementation =====&lt;br /&gt;
During suspend, the PMU is configured to allow EXTONR,CHGERR and related events to generate interrupts to the CPU.&lt;br /&gt;
&lt;br /&gt;
In GTA01Bv4, the PMU IRQ is connected to EINT9.&lt;br /&gt;
&lt;br /&gt;
{{note|Up to GTA01Bv3, the PMU IRQ is connected to EINT16, i.e. an interrupt source that cannot wake-up from Power_off mode!}}&lt;br /&gt;
&lt;br /&gt;
== Voltages ==&lt;br /&gt;
{{note | This section reflects the wiring of power rails in GTA01Bv04 }}&lt;br /&gt;
&lt;br /&gt;
=== VB ===&lt;br /&gt;
&lt;br /&gt;
* Battery terminal voltage&lt;br /&gt;
* Used by&lt;br /&gt;
** [[LM4857]] Amplifier (vdd1-4)&lt;br /&gt;
** [[PCF50606]] PMU&lt;br /&gt;
** LCM Backlight (via U6001)&lt;br /&gt;
** U7602 AVDD/GL_3V3 regulator&lt;br /&gt;
** GSM Modem&lt;br /&gt;
&lt;br /&gt;
=== CORE_1V8 ===&lt;br /&gt;
&lt;br /&gt;
* This is the S3C2410 Core Voltage&lt;br /&gt;
* Generated by PMU DCUD&lt;br /&gt;
* Used by&lt;br /&gt;
** S3C2410 (vddiarm/vddi/vddi_mpll/vddi_upll)&lt;br /&gt;
&lt;br /&gt;
=== STBY_1V8 ===&lt;br /&gt;
&lt;br /&gt;
* Standby Voltage for S3C2410&lt;br /&gt;
* Generated by PMU D3REG&lt;br /&gt;
* Used by&lt;br /&gt;
** S3C2410 (vddalive/rtc)&lt;br /&gt;
&lt;br /&gt;
=== IO_3V3 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by PMU DCDE&lt;br /&gt;
* Used by&lt;br /&gt;
** lots of pullups&lt;br /&gt;
** U1502 (latch for GSM UART)&lt;br /&gt;
** S3C2410 VDDMOP&lt;br /&gt;
** S3C2410 VDDOP&lt;br /&gt;
** S3C2410 VDDA_ADC&lt;br /&gt;
** S3C2410 nBATT_FLT&lt;br /&gt;
** S3C2410 !EXTCLK&lt;br /&gt;
** SDRAM_VCC3&lt;br /&gt;
** FLASH_3V3&lt;br /&gt;
** [[LM4857]] Amplifier (i2cvdd)&lt;br /&gt;
** Vibrator&lt;br /&gt;
** Touch panel transistors&lt;br /&gt;
** SD_3V3 via U7501&lt;br /&gt;
** PMU (avdd)&lt;br /&gt;
&lt;br /&gt;
=== GL_1V5 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by PMU DCDF&lt;br /&gt;
* Used by&lt;br /&gt;
** AGPS (vdd_core)&lt;br /&gt;
&lt;br /&gt;
=== GL_2V5 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by PMU D2REG&lt;br /&gt;
* Used by&lt;br /&gt;
** AGPS (vdd_pllreg)&lt;br /&gt;
&lt;br /&gt;
=== GL_3V3 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by U7602&lt;br /&gt;
* Used by&lt;br /&gt;
** AGPS (vdd_io/vdd_lpreg)&lt;br /&gt;
** AGPS (X7601 -&amp;gt; rtcclk)&lt;br /&gt;
&lt;br /&gt;
* Controlled by&lt;br /&gt;
** EN_AGPS3V3 GPIO&lt;br /&gt;
&lt;br /&gt;
=== AVDD ===&lt;br /&gt;
3V&lt;br /&gt;
* Generated by U7602&lt;br /&gt;
* Used by&lt;br /&gt;
** AGPS (lna power int/ext, antenna switch)&lt;br /&gt;
&lt;br /&gt;
* Controlled by&lt;br /&gt;
** EN_AGPS3V GPIO&lt;br /&gt;
&lt;br /&gt;
=== CODEC_3V3 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by PMU IOVDD&lt;br /&gt;
* Used for&lt;br /&gt;
** Audio Codec (digital and analog)&lt;br /&gt;
&lt;br /&gt;
=== BT_3V15 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by PMU D1REG&lt;br /&gt;
* Used by&lt;br /&gt;
** Bluetooth Module&lt;br /&gt;
&lt;br /&gt;
=== LCM_3V3 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by PMU LPVDDD&lt;br /&gt;
* Used by&lt;br /&gt;
** Headset/GSM Uart Latch&lt;br /&gt;
** LCM&lt;br /&gt;
&lt;br /&gt;
=== FLASH_3V3 ===&lt;br /&gt;
&lt;br /&gt;
* Derived from IO_3V3&lt;br /&gt;
* Used by&lt;br /&gt;
** NAND Flash&lt;br /&gt;
&lt;br /&gt;
=== SDRAM_VCC3 ===&lt;br /&gt;
&lt;br /&gt;
* Derived from IO_3V3&lt;br /&gt;
* Used by&lt;br /&gt;
** SDRAM&lt;br /&gt;
&lt;br /&gt;
=== SD_3V3 ===&lt;br /&gt;
&lt;br /&gt;
* Generated by U7501&lt;br /&gt;
* Used by&lt;br /&gt;
** microSD slot&lt;br /&gt;
&lt;br /&gt;
* Controlled by&lt;br /&gt;
** SD_ON GPIO&lt;br /&gt;
&lt;br /&gt;
== Kernel API ==&lt;br /&gt;
&lt;br /&gt;
== Userspace API ==&lt;br /&gt;
&lt;br /&gt;
== Approximate power draw of various subsystems ==&lt;br /&gt;
&lt;br /&gt;
In P0 and P1 phones, the battery has a total of 1200mAh, at 3.6V. This is approximately 3500mWh, once power supply losses are taken into account. The figures below are estimates from datasheets.&lt;br /&gt;
&lt;br /&gt;
These do not take into account the severe hardware bugs of phase 0 hardware, which severely affect power use.&lt;br /&gt;
&lt;br /&gt;
* LCD &lt;br /&gt;
**  150mW with backlight at full brightness&lt;br /&gt;
**  15mW with backlight at 10%&lt;br /&gt;
* CPU&lt;br /&gt;
**  320mW @ 200MHz&lt;br /&gt;
**  450mW @ 266MHz&lt;br /&gt;
**  140mW @ 200MHz idle.&lt;br /&gt;
**  50mW @ 12MHz (slow mode)&lt;br /&gt;
*** These include fudge factors for RAM and other systems, from the CPU datasheet.&lt;br /&gt;
*RAM 600mW at 600Mbytes/sec, power use broadly proportional to transfer rate.&lt;br /&gt;
* Bluetooth&lt;br /&gt;
**  63mW @ Tx Burst (file transfer, send)&lt;br /&gt;
**  36mW @ Rx Burst (file transfer, receive)&lt;br /&gt;
**  3.6mW @ Idle, beacon only&lt;br /&gt;
*** Based on the datasheets provided&lt;br /&gt;
* GSM ?&lt;br /&gt;
**Idle, but connected to network, 45mW&lt;br /&gt;
**Active on a call - up to 600mW, closer to tower less.&lt;br /&gt;
* GPS&lt;br /&gt;
** 45mW&lt;br /&gt;
*** Rough measurement&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+CPU clock speed constraints&lt;br /&gt;
!Frequency(Mhz)||Notes||QVGA LCD||VGA LCD||USB device&lt;br /&gt;
|-&lt;br /&gt;
|12||Slow mode||No||No||No&lt;br /&gt;
|-&lt;br /&gt;
|12-33.74||Impossible or violates PLL spec&lt;br /&gt;
|-&lt;br /&gt;
|33.75-67.5|| ||Yes||No||Yes (with proper setting of HCLK divider)&lt;br /&gt;
|-&lt;br /&gt;
|79-266||  ||Yes||Yes||Yes&lt;br /&gt;
|-&lt;br /&gt;
|268-300||Overclocking||?||?||?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Recommended clock speeds: 12 33.75 45 48 50.7 56.25 67.5 79 84.75 90 101.25 113.0 118.5 124.0 135.0 147.0 152 158 170 180 186 192 202.8 266 268 270&lt;br /&gt;
&lt;br /&gt;
Other clock speeds are possible (in the 33.75-266Mhz range) by setting the PLL, however, the datasheet strongly recommends these, and recommends contacting samsung for speeds not listed above.&lt;br /&gt;
&lt;br /&gt;
This would imply that with the CPU constantly on in low power mode, GPS and GSM blipping on and off, and display off, the worst case power consumption is probably around 70mW, leading to a battery life of 2 days.&lt;br /&gt;
If the CPU is turned off, battery life rises significantly.&lt;br /&gt;
&lt;br /&gt;
With everything on, playing video with sound, for example should get well over 3 hours. (500mW LCD + 320mW CPU + 200mW audio + 50mW GPS.  4.5Wh at 1.1W draw) &lt;br /&gt;
&lt;br /&gt;
Both voltage and clock speed to the CPU core can be altered.&lt;br /&gt;
Exactly how this will work with the hardware is yet to be determined.&lt;br /&gt;
It is possible that it may be capable of playing MP3s with the CPU clock at 60Mhz. This would considerably extend battery to well over 10 hours. Optimistically &amp;gt;24 hours of mp3.&lt;br /&gt;
&lt;br /&gt;
The lowest power state I have gotten the Neo1973 phase-1 to run in is 90mA or so, for a life of some 12 hours.&lt;br /&gt;
This is with backlight, GSM modem, bluetooth, GPS, off, the CPU clocked at 100Mhz, and undervolted to 1.8V, connected over usb-net (not powered via USB)&lt;br /&gt;
&lt;br /&gt;
8 hours playing mp3 at moderate volume. (same caveats as above.)&lt;br /&gt;
&lt;br /&gt;
== Measured power draw on phase 0 neo1973 ==&lt;br /&gt;
&lt;br /&gt;
I played with old ampermeter, old nokia 3110 (as a power supply) and phase0 neo1973 a bit. It appears to eat 1.02 mW while powered off, 1.02W while booted (backlight on), ~0.51W while sleeping (with backlight on) and 1.4W while loading applications.&lt;br /&gt;
&lt;br /&gt;
== Logging battery parameters to troubleshoot charging ==&lt;br /&gt;
&lt;br /&gt;
'''WARNING'''&lt;br /&gt;
&lt;br /&gt;
'''After installing and starting this script my Neo battery went flat in &amp;lt; 1 hour. Previously it was fine even overnight. If your battery is so flat that the Neo will not boot then leave it plugged in to a USB port for 15-20 minutes before powering up.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some neos have managed to discharge their battery down to empty while off, plugged in, and supposedly charging from a 500ma-capable usb device.  In order to help figure out how the state of charge changes while charging, running of battery, sleeping on battery, and sleeping while connected to usb, download two scripts in http://wile.org/stuff/power.tar  Put the power-watch script in /usr/local/bin/ and the powerlog script in /etc/init.d, then &lt;br /&gt;
&lt;br /&gt;
 # ln -s ../init.d/powerlog /etc/rc5.d/S15powerlog&lt;br /&gt;
&lt;br /&gt;
so that it starts up with the neo.&lt;br /&gt;
&lt;br /&gt;
The script logs the time, battery voltage, charging current, battery temperature, charging mode, bluetooth-on status, gps-on status, gsm-on status, and backlight brightness numbers.  The [[Kernel#Battery_charging_current|kernel page]] claims the charging current is in ma, but that does not appear to be the case for all builds? eg 2.6.21.6-moko10.  The battery temperature does not always appear to be in degrees C, either.&lt;br /&gt;
&lt;br /&gt;
After a few runs we can calibrate volts-to-remaining power, and then estimate off or sleep current draw and charging rate by observing the power drop [or rise] vs time between successive os boots.&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Neo1973 Phase 0 related]]&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/Things_not_to_do_with_your_Neo</id>
		<title>User:CesarB/Things not to do with your Neo</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/Things_not_to_do_with_your_Neo"/>
				<updated>2007-10-12T15:23:28Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These all come from things heard on IRC or on this wiki.&lt;br /&gt;
&lt;br /&gt;
== Be careful when upgrading your u-boot partition ==&lt;br /&gt;
&lt;br /&gt;
If the flashing your u-boot partition is interrupted, you can end up with an unbootable device, which can only be recovered with a debug board. If possible, don't do it unless you either have a debug board or live near someone who has one. Always do it with a battery-backed computer (either a notebook or a computer on a UPS), in case the power goes out. And, if you don't have a debug board or live near someone who has one, always flash a well-tested u-boot (don't use daily builds, for instance, unless you know of other people who had success with that particular build), and don't flash a self-compiled u-boot.&lt;br /&gt;
&lt;br /&gt;
== Be careful when playing with your u-boot environment ==&lt;br /&gt;
&lt;br /&gt;
Wrong commands on the u-boot environment can make u-boot malfunction, with the same consequences as above. If you are lucky, you can still boot and overwrite it with a sane copy from within linux; if you are unlucky, you need a debug board. Always double-check (with &amp;lt;code&amp;gt;printenv&amp;lt;/code&amp;gt;) what you have done before doing a &amp;lt;code&amp;gt;saveenv&amp;lt;/code&amp;gt;. In particular, always double-check if you didn't mistype a number; see [[Bricked]] for an example.&lt;br /&gt;
&lt;br /&gt;
== Never use &amp;quot;nand erase&amp;quot; unless you really mean it ==&lt;br /&gt;
&lt;br /&gt;
The correct command is &amp;quot;nand erase rootfs&amp;quot; (or whatever the partition you want to erase is).&lt;br /&gt;
&lt;br /&gt;
== Never plug the USB cable without a battery ==&lt;br /&gt;
&lt;br /&gt;
Unless you want very scary noises and strange smells coming from your phone.&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Mokomakefile</id>
		<title>Mokomakefile</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Mokomakefile"/>
				<updated>2007-10-12T13:33:43Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[MokoMakefile]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/Requirements</id>
		<title>User:CesarB/Requirements</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/Requirements"/>
				<updated>2007-09-14T00:30:42Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''Note: this is just my personal opinion of what the Neo should have before it's usable as someone's primary cell phone.''&lt;br /&gt;
&lt;br /&gt;
== Must have ==&lt;br /&gt;
&lt;br /&gt;
=== Phone calls ===&lt;br /&gt;
&lt;br /&gt;
* Dialing/answering/hangup from the GUI&lt;br /&gt;
* Phone address book&lt;br /&gt;
* SIM address book&lt;br /&gt;
* Record of received/made/missed calls&lt;br /&gt;
* Ringing/vibrator&lt;br /&gt;
* Selection of ringtone/vibrator mode and volume from the GUI&lt;br /&gt;
* Call volume changing on the GUI, during a call&lt;br /&gt;
* Audio device selection (handset, headset, bluetooth)&lt;br /&gt;
* Supplementary services (parsing of +CUSD and display on the GUI)&lt;br /&gt;
&lt;br /&gt;
=== SMS ===&lt;br /&gt;
&lt;br /&gt;
* SMS receiving&lt;br /&gt;
* SMS composing/sending&lt;br /&gt;
* SMS storage&lt;br /&gt;
* Tone/vibrator on SMS receive&lt;br /&gt;
* Selection of tone/vibrator mode and volume from the GUI&lt;br /&gt;
&lt;br /&gt;
=== Power management ===&lt;br /&gt;
&lt;br /&gt;
* Show battery charge level&lt;br /&gt;
* Tone when battery low&lt;br /&gt;
* Auto suspend when battery low ([http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=847 bug 847])&lt;br /&gt;
* Turn all chips off correctly on shutdown&lt;br /&gt;
* Turn the unneeded chips off on suspend (phone idle)&lt;br /&gt;
&lt;br /&gt;
== Should have ==&lt;br /&gt;
&lt;br /&gt;
=== CB ===&lt;br /&gt;
&lt;br /&gt;
* Display of cell broadcast&lt;br /&gt;
&lt;br /&gt;
=== Networking ===&lt;br /&gt;
&lt;br /&gt;
* GPRS/CSD GUI configuration, with multiple profiles&lt;br /&gt;
* Usable as a GSM modem (both bluetooth and USB; better as a AT interpreter instead of passthrough)&lt;br /&gt;
* Automatic network up/down when needed/idle (configurable as never/ask/always)&lt;br /&gt;
* Bytes sent/receive counter (both per-use and resetable total)&lt;br /&gt;
* WAP browser&lt;br /&gt;
&lt;br /&gt;
=== MMS ===&lt;br /&gt;
&lt;br /&gt;
* MMS receiving&lt;br /&gt;
* MMS composing/sending&lt;br /&gt;
* MMS storage&lt;br /&gt;
* Tone/vibrator on MMS receive&lt;br /&gt;
* Selection of tone/vibrator mode and volume from the GUI&lt;br /&gt;
&lt;br /&gt;
=== File transfer ===&lt;br /&gt;
&lt;br /&gt;
* Bluetooth OBEX (at least send/receive OPUSH)&lt;br /&gt;
&lt;br /&gt;
=== File management ===&lt;br /&gt;
&lt;br /&gt;
* GUI file/object manager&lt;br /&gt;
* Free space monitor&lt;br /&gt;
&lt;br /&gt;
=== Packaging ===&lt;br /&gt;
&lt;br /&gt;
* GUI package installation&lt;br /&gt;
* GUI repository configuration&lt;br /&gt;
&lt;br /&gt;
=== Date/Time ===&lt;br /&gt;
&lt;br /&gt;
* Timezone selection on GUI&lt;br /&gt;
* Getting time from either GPS or GSM&lt;br /&gt;
&lt;br /&gt;
== Nice to have ==&lt;br /&gt;
&lt;br /&gt;
=== Phone calls ===&lt;br /&gt;
&lt;br /&gt;
* Hands-free mode (using the more powerful ringtone speakers)&lt;br /&gt;
&lt;br /&gt;
=== Networking ===&lt;br /&gt;
&lt;br /&gt;
* Web browser&lt;br /&gt;
* Bluetooth PAN AP (with GUI configuration)&lt;br /&gt;
* Using a bluetooth PAN (with GUI configuration)&lt;br /&gt;
* Using a bluetooth modem/dialup (with GUI configuration)&lt;br /&gt;
* Automatic network selection based on available networks and a set of rules&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
* Alarm&lt;br /&gt;
* Calendar&lt;br /&gt;
* Media player&lt;br /&gt;
* Picture viewer&lt;br /&gt;
&lt;br /&gt;
=== SIM ===&lt;br /&gt;
&lt;br /&gt;
* STK&lt;br /&gt;
&lt;br /&gt;
[[Category:Requirements]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Power_management_requirements</id>
		<title>Power management requirements</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Power_management_requirements"/>
				<updated>2007-09-14T00:30:22Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: Category:Requirements&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some non-specific requirements for OpenMoko regarding power management of the phone. There are two general classes of requirements:&lt;br /&gt;
&lt;br /&gt;
# The phone should take the necessary actions for the battery to never run too empty. &lt;br /&gt;
# The phone should save power as much as possible to keep run times as long as possible.&lt;br /&gt;
&lt;br /&gt;
Like so many requirements, we would want more than is possible in theory or than is possible in practise with our resources. Like in all design, trade-offs have to be made between various desirable properties. For details about the hardware and drivers, and what's actually possible, see [[Neo1973 GTA01 Power Management]]. An important part of the implementation regarding management is being able to follow the charge state accurately and to forecast what the state is in say 10 minutes. This is made more difficult by battery aging.&lt;br /&gt;
&lt;br /&gt;
== Battery level maintenance ==&lt;br /&gt;
&lt;br /&gt;
Here the trade-off is between system simplicity and using all the power we get versus being easy to use and tolerant to &amp;quot;user errors&amp;quot;. It's actually always possible that we lose all charge due to the small current drawn even while the system is fully off, but we can make this a very special corner-case.&lt;br /&gt;
&lt;br /&gt;
Battery is too empty if:&lt;br /&gt;
# the battery is damaged for being too empty (this is taken care of by the battery itself).&lt;br /&gt;
# we are not able to start uboot to show the user messages about charging and to negotiate the 500 mA fast charge mode when available.&lt;br /&gt;
# we can't shut down the phone cleanly and have enough power left to get back to the boot loader.&lt;br /&gt;
&lt;br /&gt;
We need to have separate checks for these cases:&lt;br /&gt;
# The system is fully operational and we need to shut it down cleanly. ([http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=847 Bug #847: Shutdown if battery level goes too low])&lt;br /&gt;
# The system is in a sleep mode and we need to wake it up so that it can be shut down cleanly.&lt;br /&gt;
# The system is off and we need to stop the user from accidentally booting it if we couldn't shut it down cleanly. ([http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=848 Bug #848: A charger mode for uboot])&lt;br /&gt;
&lt;br /&gt;
== Power saving ==&lt;br /&gt;
&lt;br /&gt;
Here the trade-off is between system simplicity and responsiveness and quality of all features versus longer run-times without the need to charge. Typically the return from a slow-power mode is not instant and the user will have to wait a moment (short or long).&lt;br /&gt;
&lt;br /&gt;
Power saving options we have in general:&lt;br /&gt;
# Keep subsystems powered down when they are not needed. ([http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=770 Bug #770: Battery discharging while phone is off (GSM part)], [http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=842 Bug #842: Whenever possible, Amp Mode should be Off])&lt;br /&gt;
# Use suspend-to-ram sleep when we don't need to control any subsystems with the CPU.&lt;br /&gt;
# Use lower operational modes: dimmer screen, slower CPU frequency.&lt;br /&gt;
&lt;br /&gt;
[[Category:Requirements]]&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/Requirements</id>
		<title>User:CesarB/Requirements</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/Requirements"/>
				<updated>2007-09-14T00:24:34Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Power management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''Note: this is just my personal opinion of what the Neo should have before it's usable as someone's primary cell phone.''&lt;br /&gt;
&lt;br /&gt;
== Must have ==&lt;br /&gt;
&lt;br /&gt;
=== Phone calls ===&lt;br /&gt;
&lt;br /&gt;
* Dialing/answering/hangup from the GUI&lt;br /&gt;
* Phone address book&lt;br /&gt;
* SIM address book&lt;br /&gt;
* Record of received/made/missed calls&lt;br /&gt;
* Ringing/vibrator&lt;br /&gt;
* Selection of ringtone/vibrator mode and volume from the GUI&lt;br /&gt;
* Call volume changing on the GUI, during a call&lt;br /&gt;
* Audio device selection (handset, headset, bluetooth)&lt;br /&gt;
* Supplementary services (parsing of +CUSD and display on the GUI)&lt;br /&gt;
&lt;br /&gt;
=== SMS ===&lt;br /&gt;
&lt;br /&gt;
* SMS receiving&lt;br /&gt;
* SMS composing/sending&lt;br /&gt;
* SMS storage&lt;br /&gt;
* Tone/vibrator on SMS receive&lt;br /&gt;
* Selection of tone/vibrator mode and volume from the GUI&lt;br /&gt;
&lt;br /&gt;
=== Power management ===&lt;br /&gt;
&lt;br /&gt;
* Show battery charge level&lt;br /&gt;
* Tone when battery low&lt;br /&gt;
* Auto suspend when battery low ([http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=847 bug 847])&lt;br /&gt;
* Turn all chips off correctly on shutdown&lt;br /&gt;
* Turn the unneeded chips off on suspend (phone idle)&lt;br /&gt;
&lt;br /&gt;
== Should have ==&lt;br /&gt;
&lt;br /&gt;
=== CB ===&lt;br /&gt;
&lt;br /&gt;
* Display of cell broadcast&lt;br /&gt;
&lt;br /&gt;
=== Networking ===&lt;br /&gt;
&lt;br /&gt;
* GPRS/CSD GUI configuration, with multiple profiles&lt;br /&gt;
* Usable as a GSM modem (both bluetooth and USB; better as a AT interpreter instead of passthrough)&lt;br /&gt;
* Automatic network up/down when needed/idle (configurable as never/ask/always)&lt;br /&gt;
* Bytes sent/receive counter (both per-use and resetable total)&lt;br /&gt;
* WAP browser&lt;br /&gt;
&lt;br /&gt;
=== MMS ===&lt;br /&gt;
&lt;br /&gt;
* MMS receiving&lt;br /&gt;
* MMS composing/sending&lt;br /&gt;
* MMS storage&lt;br /&gt;
* Tone/vibrator on MMS receive&lt;br /&gt;
* Selection of tone/vibrator mode and volume from the GUI&lt;br /&gt;
&lt;br /&gt;
=== File transfer ===&lt;br /&gt;
&lt;br /&gt;
* Bluetooth OBEX (at least send/receive OPUSH)&lt;br /&gt;
&lt;br /&gt;
=== File management ===&lt;br /&gt;
&lt;br /&gt;
* GUI file/object manager&lt;br /&gt;
* Free space monitor&lt;br /&gt;
&lt;br /&gt;
=== Packaging ===&lt;br /&gt;
&lt;br /&gt;
* GUI package installation&lt;br /&gt;
* GUI repository configuration&lt;br /&gt;
&lt;br /&gt;
=== Date/Time ===&lt;br /&gt;
&lt;br /&gt;
* Timezone selection on GUI&lt;br /&gt;
* Getting time from either GPS or GSM&lt;br /&gt;
&lt;br /&gt;
== Nice to have ==&lt;br /&gt;
&lt;br /&gt;
=== Phone calls ===&lt;br /&gt;
&lt;br /&gt;
* Hands-free mode (using the more powerful ringtone speakers)&lt;br /&gt;
&lt;br /&gt;
=== Networking ===&lt;br /&gt;
&lt;br /&gt;
* Web browser&lt;br /&gt;
* Bluetooth PAN AP (with GUI configuration)&lt;br /&gt;
* Using a bluetooth PAN (with GUI configuration)&lt;br /&gt;
* Using a bluetooth modem/dialup (with GUI configuration)&lt;br /&gt;
* Automatic network selection based on available networks and a set of rules&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
* Alarm&lt;br /&gt;
* Calendar&lt;br /&gt;
* Media player&lt;br /&gt;
* Picture viewer&lt;br /&gt;
&lt;br /&gt;
=== SIM ===&lt;br /&gt;
&lt;br /&gt;
* STK&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:CesarB/Requirements</id>
		<title>User:CesarB/Requirements</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:CesarB/Requirements"/>
				<updated>2007-09-13T23:45:35Z</updated>
		
		<summary type="html">&lt;p&gt;CesarB: /* Power management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''Note: this is just my personal opinion of what the Neo should have before it's usable as someone's primary cell phone.''&lt;br /&gt;
&lt;br /&gt;
== Must have ==&lt;br /&gt;
&lt;br /&gt;
=== Phone calls ===&lt;br /&gt;
&lt;br /&gt;
* Dialing/answering/hangup from the GUI&lt;br /&gt;
* Phone address book&lt;br /&gt;
* SIM address book&lt;br /&gt;
* Record of received/made/missed calls&lt;br /&gt;
* Ringing/vibrator&lt;br /&gt;
* Selection of ringtone/vibrator mode and volume from the GUI&lt;br /&gt;
* Call volume changing on the GUI, during a call&lt;br /&gt;
* Audio device selection (handset, headset, bluetooth)&lt;br /&gt;
* Supplementary services (parsing of +CUSD and display on the GUI)&lt;br /&gt;
&lt;br /&gt;
=== SMS ===&lt;br /&gt;
&lt;br /&gt;
* SMS receiving&lt;br /&gt;
* SMS composing/sending&lt;br /&gt;
* SMS storage&lt;br /&gt;
* Tone/vibrator on SMS receive&lt;br /&gt;
* Selection of tone/vibrator mode and volume from the GUI&lt;br /&gt;
&lt;br /&gt;
=== Power management ===&lt;br /&gt;
&lt;br /&gt;
* Tone when battery low&lt;br /&gt;
* Auto suspend when battery low ([http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=847 bug 847])&lt;br /&gt;
* Turn all chips off correctly on shutdown&lt;br /&gt;
* Turn the unneeded chips off on suspend (phone idle)&lt;br /&gt;
&lt;br /&gt;
== Should have ==&lt;br /&gt;
&lt;br /&gt;
=== CB ===&lt;br /&gt;
&lt;br /&gt;
* Display of cell broadcast&lt;br /&gt;
&lt;br /&gt;
=== Networking ===&lt;br /&gt;
&lt;br /&gt;
* GPRS/CSD GUI configuration, with multiple profiles&lt;br /&gt;
* Usable as a GSM modem (both bluetooth and USB; better as a AT interpreter instead of passthrough)&lt;br /&gt;
* Automatic network up/down when needed/idle (configurable as never/ask/always)&lt;br /&gt;
* Bytes sent/receive counter (both per-use and resetable total)&lt;br /&gt;
* WAP browser&lt;br /&gt;
&lt;br /&gt;
=== MMS ===&lt;br /&gt;
&lt;br /&gt;
* MMS receiving&lt;br /&gt;
* MMS composing/sending&lt;br /&gt;
* MMS storage&lt;br /&gt;
* Tone/vibrator on MMS receive&lt;br /&gt;
* Selection of tone/vibrator mode and volume from the GUI&lt;br /&gt;
&lt;br /&gt;
=== File transfer ===&lt;br /&gt;
&lt;br /&gt;
* Bluetooth OBEX (at least send/receive OPUSH)&lt;br /&gt;
&lt;br /&gt;
=== File management ===&lt;br /&gt;
&lt;br /&gt;
* GUI file/object manager&lt;br /&gt;
* Free space monitor&lt;br /&gt;
&lt;br /&gt;
=== Packaging ===&lt;br /&gt;
&lt;br /&gt;
* GUI package installation&lt;br /&gt;
* GUI repository configuration&lt;br /&gt;
&lt;br /&gt;
=== Date/Time ===&lt;br /&gt;
&lt;br /&gt;
* Timezone selection on GUI&lt;br /&gt;
* Getting time from either GPS or GSM&lt;br /&gt;
&lt;br /&gt;
== Nice to have ==&lt;br /&gt;
&lt;br /&gt;
=== Phone calls ===&lt;br /&gt;
&lt;br /&gt;
* Hands-free mode (using the more powerful ringtone speakers)&lt;br /&gt;
&lt;br /&gt;
=== Networking ===&lt;br /&gt;
&lt;br /&gt;
* Web browser&lt;br /&gt;
* Bluetooth PAN AP (with GUI configuration)&lt;br /&gt;
* Using a bluetooth PAN (with GUI configuration)&lt;br /&gt;
* Using a bluetooth modem/dialup (with GUI configuration)&lt;br /&gt;
* Automatic network selection based on available networks and a set of rules&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
* Alarm&lt;br /&gt;
* Calendar&lt;br /&gt;
* Media player&lt;br /&gt;
* Picture viewer&lt;br /&gt;
&lt;br /&gt;
=== SIM ===&lt;br /&gt;
&lt;br /&gt;
* STK&lt;/div&gt;</summary>
		<author><name>CesarB</name></author>	</entry>

	</feed>