[FE training-materials-updates] Beginning of the I2C section

Thomas Petazzoni thomas.petazzoni at free-electrons.com
Thu Sep 26 10:36:38 CEST 2013


Repository : git://git.free-electrons.com/training-materials.git

On branch  : kernel-ng
Link       : http://git.free-electrons.com/training-materials/commit/?id=0f5e4de03eb4ea86e52f3651093d24a7789d7237

>---------------------------------------------------------------

commit 0f5e4de03eb4ea86e52f3651093d24a7789d7237
Author: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
Date:   Thu Sep 26 10:26:09 2013 +0200

    Beginning of the I2C section
    
    Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>


>---------------------------------------------------------------

0f5e4de03eb4ea86e52f3651093d24a7789d7237
 .../i2c-bus.dia}                                   |  490 ++++++++++----------
 slides/kernel-i2c/kernel-i2c.tex                   |  243 +++++++++-
 2 files changed, 483 insertions(+), 250 deletions(-)

diff --git a/slides/sysdev-application-development/gdb-vs-gdbserver-architecture.dia b/slides/kernel-i2c/i2c-bus.dia
similarity index 70%
copy from slides/sysdev-application-development/gdb-vs-gdbserver-architecture.dia
copy to slides/kernel-i2c/i2c-bus.dia
index ec3863e..ef239ac 100644
--- a/slides/sysdev-application-development/gdb-vs-gdbserver-architecture.dia
+++ b/slides/kernel-i2c/i2c-bus.dia
@@ -65,74 +65,78 @@
   <dia:layer name="Arrière-plan" visible="true" active="true">
     <dia:object type="Standard - Box" version="0" id="O0">
       <dia:attribute name="obj_pos">
-        <dia:point val="10,5"/>
+        <dia:point val="13,6"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="9.95,4.95;24.05,23.05"/>
+        <dia:rectangle val="12.95,5.95;24.05,16.05"/>
       </dia:attribute>
       <dia:attribute name="elem_corner">
-        <dia:point val="10,5"/>
+        <dia:point val="13,6"/>
       </dia:attribute>
       <dia:attribute name="elem_width">
-        <dia:real val="14"/>
+        <dia:real val="11"/>
       </dia:attribute>
       <dia:attribute name="elem_height">
-        <dia:real val="18"/>
+        <dia:real val="10"/>
       </dia:attribute>
       <dia:attribute name="border_width">
         <dia:real val="0.10000000149011612"/>
       </dia:attribute>
       <dia:attribute name="border_color">
-        <dia:color val="#6a8954"/>
+        <dia:color val="#868686"/>
       </dia:attribute>
       <dia:attribute name="inner_color">
-        <dia:color val="#c5e387"/>
+        <dia:color val="#e5e5e5"/>
       </dia:attribute>
       <dia:attribute name="show_background">
         <dia:boolean val="true"/>
       </dia:attribute>
     </dia:object>
-    <dia:object type="Standard - Box" version="0" id="O1">
+    <dia:object type="Standard - Text" version="1" id="O1">
       <dia:attribute name="obj_pos">
-        <dia:point val="36,5"/>
+        <dia:point val="13.35,7"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="35.95,4.95;50.05,23.05"/>
-      </dia:attribute>
-      <dia:attribute name="elem_corner">
-        <dia:point val="36,5"/>
-      </dia:attribute>
-      <dia:attribute name="elem_width">
-        <dia:real val="14"/>
-      </dia:attribute>
-      <dia:attribute name="elem_height">
-        <dia:real val="18"/>
-      </dia:attribute>
-      <dia:attribute name="border_width">
-        <dia:real val="0.10000000149011612"/>
-      </dia:attribute>
-      <dia:attribute name="border_color">
-        <dia:color val="#5cacff"/>
+        <dia:rectangle val="13.35,6.2125;17.4215,7.2"/>
       </dia:attribute>
-      <dia:attribute name="inner_color">
-        <dia:color val="#d8e5e5"/>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#Processor#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="1.0583332926034927"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="13.35,7"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="0"/>
+          </dia:attribute>
+        </dia:composite>
       </dia:attribute>
-      <dia:attribute name="show_background">
-        <dia:boolean val="true"/>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
       </dia:attribute>
     </dia:object>
     <dia:object type="Standard - Box" version="0" id="O2">
       <dia:attribute name="obj_pos">
-        <dia:point val="12,8"/>
+        <dia:point val="19,12"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="11.95,7.95;22.05,11.05"/>
+        <dia:rectangle val="18.95,11.95;23.05,15.05"/>
       </dia:attribute>
       <dia:attribute name="elem_corner">
-        <dia:point val="12,8"/>
+        <dia:point val="19,12"/>
       </dia:attribute>
       <dia:attribute name="elem_width">
-        <dia:real val="10"/>
+        <dia:real val="4"/>
       </dia:attribute>
       <dia:attribute name="elem_height">
         <dia:real val="3"/>
@@ -141,122 +145,103 @@
         <dia:real val="0.10000000149011612"/>
       </dia:attribute>
       <dia:attribute name="border_color">
-        <dia:color val="#868686"/>
+        <dia:color val="#2f004a"/>
       </dia:attribute>
       <dia:attribute name="inner_color">
-        <dia:color val="#e5e5e5"/>
+        <dia:color val="#efb9ff"/>
       </dia:attribute>
       <dia:attribute name="show_background">
         <dia:boolean val="true"/>
       </dia:attribute>
     </dia:object>
-    <dia:object type="Standard - Box" version="0" id="O3">
+    <dia:object type="Standard - Text" version="1" id="O3">
       <dia:attribute name="obj_pos">
-        <dia:point val="12,13"/>
+        <dia:point val="21,13.5"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="11.95,12.95;22.05,21.05"/>
+        <dia:rectangle val="19.4733,12.905;22.5267,14.4525"/>
       </dia:attribute>
-      <dia:attribute name="elem_corner">
-        <dia:point val="12,13"/>
-      </dia:attribute>
-      <dia:attribute name="elem_width">
-        <dia:real val="10"/>
-      </dia:attribute>
-      <dia:attribute name="elem_height">
-        <dia:real val="8"/>
-      </dia:attribute>
-      <dia:attribute name="border_width">
-        <dia:real val="0.10000000149011612"/>
-      </dia:attribute>
-      <dia:attribute name="border_color">
-        <dia:color val="#868686"/>
-      </dia:attribute>
-      <dia:attribute name="inner_color">
-        <dia:color val="#e5e5e5"/>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#I2C
+controller#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.80000000000000004"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="21,13.5"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
       </dia:attribute>
-      <dia:attribute name="show_background">
-        <dia:boolean val="true"/>
+      <dia:attribute name="valign">
+        <dia:enum val="3"/>
       </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O2" connection="8"/>
+      </dia:connections>
     </dia:object>
     <dia:object type="Standard - Box" version="0" id="O4">
       <dia:attribute name="obj_pos">
-        <dia:point val="38,8"/>
-      </dia:attribute>
-      <dia:attribute name="obj_bb">
-        <dia:rectangle val="37.95,7.95;48.05,11.05"/>
-      </dia:attribute>
-      <dia:attribute name="elem_corner">
-        <dia:point val="38,8"/>
-      </dia:attribute>
-      <dia:attribute name="elem_width">
-        <dia:real val="10"/>
-      </dia:attribute>
-      <dia:attribute name="elem_height">
-        <dia:real val="3"/>
-      </dia:attribute>
-      <dia:attribute name="border_width">
-        <dia:real val="0.10000000149011612"/>
-      </dia:attribute>
-      <dia:attribute name="border_color">
-        <dia:color val="#868686"/>
-      </dia:attribute>
-      <dia:attribute name="inner_color">
-        <dia:color val="#e5e5e5"/>
-      </dia:attribute>
-      <dia:attribute name="show_background">
-        <dia:boolean val="true"/>
-      </dia:attribute>
-    </dia:object>
-    <dia:object type="Standard - Box" version="0" id="O5">
-      <dia:attribute name="obj_pos">
-        <dia:point val="38,13"/>
+        <dia:point val="28,15"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="37.95,12.95;48.05,21.05"/>
+        <dia:rectangle val="27.95,14.95;33.05,19.05"/>
       </dia:attribute>
       <dia:attribute name="elem_corner">
-        <dia:point val="38,13"/>
+        <dia:point val="28,15"/>
       </dia:attribute>
       <dia:attribute name="elem_width">
-        <dia:real val="10"/>
+        <dia:real val="5"/>
       </dia:attribute>
       <dia:attribute name="elem_height">
-        <dia:real val="8"/>
+        <dia:real val="4"/>
       </dia:attribute>
       <dia:attribute name="border_width">
         <dia:real val="0.10000000149011612"/>
       </dia:attribute>
       <dia:attribute name="border_color">
-        <dia:color val="#868686"/>
+        <dia:color val="#d9cb2f"/>
       </dia:attribute>
       <dia:attribute name="inner_color">
-        <dia:color val="#e5e5e5"/>
+        <dia:color val="#fff8a8"/>
       </dia:attribute>
       <dia:attribute name="show_background">
         <dia:boolean val="true"/>
       </dia:attribute>
     </dia:object>
-    <dia:object type="Standard - Text" version="1" id="O6">
+    <dia:object type="Standard - Text" version="1" id="O5">
       <dia:attribute name="obj_pos">
-        <dia:point val="17,9.5"/>
+        <dia:point val="30.5,17"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="12.835,8.92375;21.165,10.0762"/>
+        <dia:rectangle val="28.5333,15.8262;32.4667,18.1737"/>
       </dia:attribute>
       <dia:attribute name="text">
         <dia:composite type="text">
           <dia:attribute name="string">
-            <dia:string>#ARCH-linux-gdb#</dia:string>
+            <dia:string>#I2C
+touchscreen
+controller#</dia:string>
           </dia:attribute>
           <dia:attribute name="font">
-            <dia:font family="monospace" style="0" name="Courier"/>
+            <dia:font family="sans" style="0" name="Helvetica"/>
           </dia:attribute>
           <dia:attribute name="height">
-            <dia:real val="1.2347221747040749"/>
+            <dia:real val="0.80000000000000004"/>
           </dia:attribute>
           <dia:attribute name="pos">
-            <dia:point val="17,9.84125"/>
+            <dia:point val="30.5,16.4213"/>
           </dia:attribute>
           <dia:attribute name="color">
             <dia:color val="#000000"/>
@@ -270,68 +255,60 @@
         <dia:enum val="2"/>
       </dia:attribute>
       <dia:connections>
-        <dia:connection handle="0" to="O2" connection="8"/>
+        <dia:connection handle="0" to="O4" connection="8"/>
       </dia:connections>
     </dia:object>
-    <dia:object type="Standard - Text" version="1" id="O7">
+    <dia:object type="Standard - Box" version="0" id="O6">
       <dia:attribute name="obj_pos">
-        <dia:point val="43,9.5"/>
+        <dia:point val="35,15"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="40.3225,8.92375;45.6775,10.0762"/>
+        <dia:rectangle val="34.95,14.95;40.05,19.05"/>
       </dia:attribute>
-      <dia:attribute name="text">
-        <dia:composite type="text">
-          <dia:attribute name="string">
-            <dia:string>#gdbserver#</dia:string>
-          </dia:attribute>
-          <dia:attribute name="font">
-            <dia:font family="monospace" style="0" name="Courier"/>
-          </dia:attribute>
-          <dia:attribute name="height">
-            <dia:real val="1.2347221747040749"/>
-          </dia:attribute>
-          <dia:attribute name="pos">
-            <dia:point val="43,9.84125"/>
-          </dia:attribute>
-          <dia:attribute name="color">
-            <dia:color val="#000000"/>
-          </dia:attribute>
-          <dia:attribute name="alignment">
-            <dia:enum val="1"/>
-          </dia:attribute>
-        </dia:composite>
+      <dia:attribute name="elem_corner">
+        <dia:point val="35,15"/>
       </dia:attribute>
-      <dia:attribute name="valign">
-        <dia:enum val="2"/>
+      <dia:attribute name="elem_width">
+        <dia:real val="5"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="4"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.10000000149011612"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#5cacff"/>
+      </dia:attribute>
+      <dia:attribute name="inner_color">
+        <dia:color val="#add8e6"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
       </dia:attribute>
-      <dia:connections>
-        <dia:connection handle="0" to="O4" connection="8"/>
-      </dia:connections>
     </dia:object>
-    <dia:object type="Standard - Text" version="1" id="O8">
+    <dia:object type="Standard - Text" version="1" id="O7">
       <dia:attribute name="obj_pos">
-        <dia:point val="17,17"/>
+        <dia:point val="37.5,17"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="12.22,14.7792;21.78,19.2208"/>
+        <dia:rectangle val="35.9831,15.8262;39.0169,18.1737"/>
       </dia:attribute>
       <dia:attribute name="text">
         <dia:composite type="text">
           <dia:attribute name="string">
-            <dia:string>#Binaries and libraries
-with debugging
-symbols not
-stripped#</dia:string>
+            <dia:string>#I2C
+GPIO
+expander#</dia:string>
           </dia:attribute>
           <dia:attribute name="font">
             <dia:font family="sans" style="0" name="Helvetica"/>
           </dia:attribute>
           <dia:attribute name="height">
-            <dia:real val="1.1288888454437256"/>
+            <dia:real val="0.80000000000000004"/>
           </dia:attribute>
           <dia:attribute name="pos">
-            <dia:point val="17,15.6192"/>
+            <dia:point val="37.5,16.4213"/>
           </dia:attribute>
           <dia:attribute name="color">
             <dia:color val="#000000"/>
@@ -345,32 +322,60 @@ stripped#</dia:string>
         <dia:enum val="2"/>
       </dia:attribute>
       <dia:connections>
-        <dia:connection handle="0" to="O3" connection="8"/>
+        <dia:connection handle="0" to="O6" connection="8"/>
       </dia:connections>
     </dia:object>
+    <dia:object type="Standard - Box" version="0" id="O8">
+      <dia:attribute name="obj_pos">
+        <dia:point val="42,15"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="41.95,14.95;47.05,19.05"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="42,15"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="5"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="4"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.10000000149011612"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#6a8954"/>
+      </dia:attribute>
+      <dia:attribute name="inner_color">
+        <dia:color val="#c5e387"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+    </dia:object>
     <dia:object type="Standard - Text" version="1" id="O9">
       <dia:attribute name="obj_pos">
-        <dia:point val="43,17"/>
+        <dia:point val="44.5,17"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="38.4537,14.7792;47.5463,19.2208"/>
+        <dia:rectangle val="43.55,15.8262;45.45,18.1737"/>
       </dia:attribute>
       <dia:attribute name="text">
         <dia:composite type="text">
           <dia:attribute name="string">
-            <dia:string>#Running program
-with binaries and
-libraries that can be
-stripped#</dia:string>
+            <dia:string>#I2C
+audio
+codec#</dia:string>
           </dia:attribute>
           <dia:attribute name="font">
             <dia:font family="sans" style="0" name="Helvetica"/>
           </dia:attribute>
           <dia:attribute name="height">
-            <dia:real val="1.1288888454437256"/>
+            <dia:real val="0.80000000000000004"/>
           </dia:attribute>
           <dia:attribute name="pos">
-            <dia:point val="43,15.6192"/>
+            <dia:point val="44.5,16.4213"/>
           </dia:attribute>
           <dia:attribute name="color">
             <dia:color val="#000000"/>
@@ -384,34 +389,27 @@ stripped#</dia:string>
         <dia:enum val="2"/>
       </dia:attribute>
       <dia:connections>
-        <dia:connection handle="0" to="O5" connection="8"/>
+        <dia:connection handle="0" to="O8" connection="8"/>
       </dia:connections>
     </dia:object>
-    <dia:object type="Standard - Line" version="0" id="O10">
+    <dia:object type="Standard - ZigZagLine" version="1" id="O10">
       <dia:attribute name="obj_pos">
-        <dia:point val="22,9.5"/>
+        <dia:point val="23.0503,13.5"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="21.85,8.91459;38.1025,10.0854"/>
+        <dia:rectangle val="23.0003,13.45;30.8618,15.1118"/>
       </dia:attribute>
-      <dia:attribute name="conn_endpoints">
-        <dia:point val="22,9.5"/>
-        <dia:point val="37.9525,9.5"/>
+      <dia:attribute name="orth_points">
+        <dia:point val="23.0503,13.5"/>
+        <dia:point val="30.5,13.5"/>
+        <dia:point val="30.5,15"/>
       </dia:attribute>
-      <dia:attribute name="numcp">
-        <dia:int val="1"/>
-      </dia:attribute>
-      <dia:attribute name="line_width">
-        <dia:real val="0.30000001192092896"/>
-      </dia:attribute>
-      <dia:attribute name="start_arrow">
-        <dia:enum val="22"/>
-      </dia:attribute>
-      <dia:attribute name="start_arrow_length">
-        <dia:real val="0.5"/>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
       </dia:attribute>
-      <dia:attribute name="start_arrow_width">
-        <dia:real val="0.5"/>
+      <dia:attribute name="autorouting">
+        <dia:boolean val="true"/>
       </dia:attribute>
       <dia:attribute name="end_arrow">
         <dia:enum val="22"/>
@@ -423,66 +421,28 @@ stripped#</dia:string>
         <dia:real val="0.5"/>
       </dia:attribute>
       <dia:connections>
-        <dia:connection handle="0" to="O2" connection="4"/>
-        <dia:connection handle="1" to="O4" connection="8"/>
+        <dia:connection handle="0" to="O2" connection="8"/>
+        <dia:connection handle="1" to="O4" connection="1"/>
       </dia:connections>
     </dia:object>
-    <dia:object type="Standard - Text" version="1" id="O11">
+    <dia:object type="Standard - ZigZagLine" version="1" id="O11">
       <dia:attribute name="obj_pos">
-        <dia:point val="30,7"/>
+        <dia:point val="23,13.5"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="26.2763,7;33.7238,9.04583"/>
+        <dia:rectangle val="22.95,13.45;37.8618,15.1118"/>
       </dia:attribute>
-      <dia:attribute name="text">
-        <dia:composite type="text">
-          <dia:attribute name="string">
-            <dia:string>#Serial or Ethernet
-connection#</dia:string>
-          </dia:attribute>
-          <dia:attribute name="font">
-            <dia:font family="sans" style="0" name="Helvetica"/>
-          </dia:attribute>
-          <dia:attribute name="height">
-            <dia:real val="1.0583332926034927"/>
-          </dia:attribute>
-          <dia:attribute name="pos">
-            <dia:point val="30,7.7875"/>
-          </dia:attribute>
-          <dia:attribute name="color">
-            <dia:color val="#000000"/>
-          </dia:attribute>
-          <dia:attribute name="alignment">
-            <dia:enum val="1"/>
-          </dia:attribute>
-        </dia:composite>
+      <dia:attribute name="orth_points">
+        <dia:point val="23,13.5"/>
+        <dia:point val="37.5,13.5"/>
+        <dia:point val="37.5,15"/>
       </dia:attribute>
-      <dia:attribute name="valign">
+      <dia:attribute name="orth_orient">
         <dia:enum val="0"/>
+        <dia:enum val="1"/>
       </dia:attribute>
-    </dia:object>
-    <dia:object type="Standard - Line" version="0" id="O12">
-      <dia:attribute name="obj_pos">
-        <dia:point val="17,11"/>
-      </dia:attribute>
-      <dia:attribute name="obj_bb">
-        <dia:rectangle val="16.6382,10.95;17.3618,13.05"/>
-      </dia:attribute>
-      <dia:attribute name="conn_endpoints">
-        <dia:point val="17,11"/>
-        <dia:point val="17,13"/>
-      </dia:attribute>
-      <dia:attribute name="numcp">
-        <dia:int val="1"/>
-      </dia:attribute>
-      <dia:attribute name="start_arrow">
-        <dia:enum val="22"/>
-      </dia:attribute>
-      <dia:attribute name="start_arrow_length">
-        <dia:real val="0.5"/>
-      </dia:attribute>
-      <dia:attribute name="start_arrow_width">
-        <dia:real val="0.5"/>
+      <dia:attribute name="autorouting">
+        <dia:boolean val="true"/>
       </dia:attribute>
       <dia:attribute name="end_arrow">
         <dia:enum val="22"/>
@@ -494,23 +454,28 @@ connection#</dia:string>
         <dia:real val="0.5"/>
       </dia:attribute>
       <dia:connections>
-        <dia:connection handle="0" to="O2" connection="6"/>
-        <dia:connection handle="1" to="O3" connection="1"/>
+        <dia:connection handle="0" to="O2" connection="4"/>
+        <dia:connection handle="1" to="O6" connection="1"/>
       </dia:connections>
     </dia:object>
-    <dia:object type="Standard - Line" version="0" id="O13">
+    <dia:object type="Standard - ZigZagLine" version="1" id="O12">
       <dia:attribute name="obj_pos">
-        <dia:point val="43,11"/>
+        <dia:point val="23,13.5"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="42.6382,10.95;43.3618,13.05"/>
+        <dia:rectangle val="22.95,13.1382;44.8618,15.05"/>
+      </dia:attribute>
+      <dia:attribute name="orth_points">
+        <dia:point val="23,13.5"/>
+        <dia:point val="44.5,13.5"/>
+        <dia:point val="44.5,15"/>
       </dia:attribute>
-      <dia:attribute name="conn_endpoints">
-        <dia:point val="43,11"/>
-        <dia:point val="43,13"/>
+      <dia:attribute name="orth_orient">
+        <dia:enum val="0"/>
+        <dia:enum val="1"/>
       </dia:attribute>
-      <dia:attribute name="numcp">
-        <dia:int val="1"/>
+      <dia:attribute name="autorouting">
+        <dia:boolean val="true"/>
       </dia:attribute>
       <dia:attribute name="start_arrow">
         <dia:enum val="22"/>
@@ -531,30 +496,63 @@ connection#</dia:string>
         <dia:real val="0.5"/>
       </dia:attribute>
       <dia:connections>
-        <dia:connection handle="0" to="O4" connection="6"/>
-        <dia:connection handle="1" to="O5" connection="1"/>
+        <dia:connection handle="0" to="O2" connection="4"/>
+        <dia:connection handle="1" to="O8" connection="1"/>
       </dia:connections>
     </dia:object>
+    <dia:object type="Standard - Text" version="1" id="O13">
+      <dia:attribute name="obj_pos">
+        <dia:point val="37.5,19.6"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="35.4775,19.2263;39.5225,19.9737"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#addr = 0x1A#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font family="sans" style="0" name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.80000000000000004"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="37.5,19.8212"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+      <dia:attribute name="valign">
+        <dia:enum val="2"/>
+      </dia:attribute>
+    </dia:object>
     <dia:object type="Standard - Text" version="1" id="O14">
       <dia:attribute name="obj_pos">
-        <dia:point val="17,5"/>
+        <dia:point val="30.55,19.65"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="15.715,5;18.285,6.3175"/>
+        <dia:rectangle val="28.5225,19.2763;32.5775,20.0238"/>
       </dia:attribute>
       <dia:attribute name="text">
         <dia:composite type="text">
           <dia:attribute name="string">
-            <dia:string>#Host#</dia:string>
+            <dia:string>#addr = 0x2C#</dia:string>
           </dia:attribute>
           <dia:attribute name="font">
             <dia:font family="sans" style="0" name="Helvetica"/>
           </dia:attribute>
           <dia:attribute name="height">
-            <dia:real val="1.411111056804657"/>
+            <dia:real val="0.80000000000000004"/>
           </dia:attribute>
           <dia:attribute name="pos">
-            <dia:point val="17,6.05"/>
+            <dia:point val="30.55,19.8713"/>
           </dia:attribute>
           <dia:attribute name="color">
             <dia:color val="#000000"/>
@@ -565,32 +563,29 @@ connection#</dia:string>
         </dia:composite>
       </dia:attribute>
       <dia:attribute name="valign">
-        <dia:enum val="0"/>
+        <dia:enum val="2"/>
       </dia:attribute>
-      <dia:connections>
-        <dia:connection handle="0" to="O0" connection="1"/>
-      </dia:connections>
     </dia:object>
     <dia:object type="Standard - Text" version="1" id="O15">
       <dia:attribute name="obj_pos">
-        <dia:point val="43,5"/>
+        <dia:point val="44.55,19.55"/>
       </dia:attribute>
       <dia:attribute name="obj_bb">
-        <dia:rectangle val="41.2525,5;44.7475,6.3175"/>
+        <dia:rectangle val="42.5437,19.1763;46.5562,19.9238"/>
       </dia:attribute>
       <dia:attribute name="text">
         <dia:composite type="text">
           <dia:attribute name="string">
-            <dia:string>#Target#</dia:string>
+            <dia:string>#addr = 0x6E#</dia:string>
           </dia:attribute>
           <dia:attribute name="font">
             <dia:font family="sans" style="0" name="Helvetica"/>
           </dia:attribute>
           <dia:attribute name="height">
-            <dia:real val="1.411111056804657"/>
+            <dia:real val="0.80000000000000004"/>
           </dia:attribute>
           <dia:attribute name="pos">
-            <dia:point val="43,6.05"/>
+            <dia:point val="44.55,19.7713"/>
           </dia:attribute>
           <dia:attribute name="color">
             <dia:color val="#000000"/>
@@ -601,11 +596,8 @@ connection#</dia:string>
         </dia:composite>
       </dia:attribute>
       <dia:attribute name="valign">
-        <dia:enum val="0"/>
+        <dia:enum val="2"/>
       </dia:attribute>
-      <dia:connections>
-        <dia:connection handle="0" to="O1" connection="1"/>
-      </dia:connections>
     </dia:object>
   </dia:layer>
 </dia:diagram>
diff --git a/slides/kernel-i2c/kernel-i2c.tex b/slides/kernel-i2c/kernel-i2c.tex
index 86466f2..f7e1c1a 100644
--- a/slides/kernel-i2c/kernel-i2c.tex
+++ b/slides/kernel-i2c/kernel-i2c.tex
@@ -1 +1,242 @@
-\subsection{Introduction to the I2C subsystem}
+\section{Introduction to the I2C subsystem}
+
+\begin{frame}{What is I2C ?}
+  \begin{itemize}
+  \item A very commonly used low-speed devices to connect on-board
+    devices to the processor.
+  \item Uses only two wires: SDA for the data, SCL for the clock.
+  \item It is a master/slave bus: only the master can initiate
+    transactions, and slaves can only reply to transactions initiated
+    by masters.
+  \item In a Linux system, the I2C controller embedded in the
+    processor is typically the master, controlling the bus.
+  \item Each slave device is identified by an unique I2C address. Each
+    transaction initiated by the master contains this address, which
+    allows the relevant slave to recognize that it should reply to
+    this particular transaction.
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{An I2C bus example}
+  \begin{center}
+    \includegraphics[width=\textwidth]{slides/kernel-i2c/i2c-bus.pdf}
+  \end{center}
+\end{frame}
+
+\begin{frame}{The I2C subsystem}
+  \begin{itemize}
+  \item Like all bus subsystems, the I2C subsystem is responsible for:
+    \begin{itemize}
+    \item Providing an API to implement I2C controller drivers
+    \item Providing an API to implement I2C device drivers, in kernel space
+    \item Providing an API to implement I2C device drivers, in user space
+    \end{itemize}
+  \item The core of the I2C subsystem is located in
+    \code{drivers/i2c}.
+  \item The I2C controller drivers are located in
+    \code{drivers/i2c/busses}.
+  \item The I2C device drivers are located throughout
+    \code{drivers/}, depending on the type of device (ex:
+    \code{drivers/input} for input devices).
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{Registering an I2C device driver}
+  \begin{itemize}
+  \item Like all bus subsystems, the I2C subsystem defines a
+    \code{struct i2c_driver} that inherits from
+    \code{struct device_driver}, and which must be instantiated and
+    registered by each I2C device driver.
+    \begin{itemize}
+    \item As usual, this structure points to the \code{->probe()} and
+      \code{->remove()} functions.
+    \item It also contains an \code{id_table} field that must point to a
+      list of {\em device IDs} (which is a list of tuples containing a
+      string and some private driver data). It is used for non-DT based
+      probing of I2C devices.
+    \end{itemize}
+  \item The \code{i2c_add_driver()} and \code{i2c_del_driver()} functions
+    are used to register/unregister the driver.
+  \item If the driver doesn't do anything else in its init/exit
+    function, then it is advised to use the \code{module_i2c_driver()}
+    macro instead.
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]{Registering an I2C device driver: example}
+  \begin{block}{}
+  \begin{minted}[fontsize=\tiny]{c}
+static const struct i2c_device_id <driver>_id[] = {
+        { "<device-name>", 0 },
+        { }
+};
+MODULE_DEVICE_TABLE(i2c, <driver>_id);
+
+#ifdef CONFIG_OF
+static const struct of_device_id <driver>_dt_ids[] = {
+        { .compatible = "<vendor>,<device-name>", },
+        { }
+};
+MODULE_DEVICE_TABLE(of, <driver>_dt_ids);
+#endif
+
+static struct i2c_driver <driver>_driver = {
+        .probe          = <driver>_probe,
+        .remove         = <driver>_remove,
+        .id_table       = <driver>_id,
+        .driver = {
+                .name   = "<driver-name>",
+                .owner  = THIS_MODULE,
+                .of_match_table = of_match_ptr(<driver>_dt_ids),
+        },
+};
+
+module_i2c_driver(<driver>_driver);
+\end{minted}
+\end{block}
+\end{frame}
+
+\begin{frame}{Registering an I2C device: non-DT}
+  \begin{itemize}
+  \item On non-DT platforms, the \code{i2c_board_info} structure
+    allows to describe how an I2C device is connected to a board.
+  \item Such structures are normally defined with the
+    \code{I2C_BOARD_INFO} helper macro.
+    \begin{itemize}
+    \item Takes as argument the device name and the slave address of
+      the device on the bus.
+    \end{itemize}
+  \item An array of such structures is registed on a per-bus basis
+    using \code{i2c_register_board_info()}, when the platform is
+    initialized.
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]{Registering an I2C device, non-DT example}
+  \begin{block}{}
+    \begin{minted}[fontsize=\tiny]{c}
+static struct i2c_board_info <board>_i2c_devices[] __initdata = {
+        {
+                I2C_BOARD_INFO("cs42l51", 0x4a),
+        },
+};
+
+void board_init(void)
+{
+        /*
+         * Here should be the registration of all devices, including
+         * the I2C controller device.
+         */
+
+        i2c_register_board_info(0, <board>_i2c_devices,
+                                ARRAY_SIZE(<board>_i2c_devices));
+
+        /* More devices registered here */
+}
+    \end{minted}
+  \end{block}
+\end{frame}
+
+\begin{frame}{Registering an I2C device, in the DT}
+  \begin{itemize}
+  \item In the Device Tree, the I2C controller device is typically
+    defined in the \code{.dtsi} file that describes the processor.
+    \begin{itemize}
+    \item Normally defined with \code{status = "disabled"}.
+    \end{itemize}
+  \item At the board/platform level:
+    \begin{itemize}
+    \item the I2C controller device is enabled
+      (\code{status = "okay"})
+    \item the I2C bus frequency is defined, using the
+      \code{clock-frequency} property.
+    \item the I2C devices on the bus are described as childs of the
+      I2C controller node, where the \code{reg} property gives the I2C
+      slave address on the bus.
+    \end{itemize}
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]{Registering an I2C device, DT example (1/2)}
+  \begin{block}{Definition of the I2C controller, .dtsi file}
+    \begin{minted}[fontsize=\footnotesize]{perl}
+i2c at 7000c000 {
+        compatible = "nvidia,tegra20-i2c";
+        reg = <0x7000c000 0x100>;
+        interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
+        #address-cells = <1>;
+        #size-cells = <0>;
+        clocks = <&tegra_car TEGRA20_CLK_I2C1>,
+                 <&tegra_car TEGRA20_CLK_PLL_P_OUT3>;
+        clock-names = "div-clk", "fast-clk";
+        status = "disabled";
+};
+    \end{minted}
+  \end{block}
+\end{frame}
+
+\begin{frame}[fragile]{Registering an I2C device, DT example (2/2)}
+  \begin{block}{Definition of the I2C device, .dts file}
+    \begin{minted}[fontsize=\footnotesize]{perl}
+i2c at 7000c000 {
+        status = "okay";
+        clock-frequency = <400000>;
+
+        alc5632: alc5632 at 1e {
+                compatible = "realtek,alc5632";
+                reg = <0x1e>;
+                gpio-controller;
+                #gpio-cells = <2>;
+        };
+};
+    \end{minted}
+  \end{block}
+\end{frame}
+
+\begin{frame}{\code{probe()} and \code{remove()}}
+
+  \begin{itemize}
+  \item The \code{->probe()} function is responsible for initializing
+    the device and registering it in the appropriate kernel
+    framework. It receives as argument:
+    \begin{itemize}
+    \item A \code{struct i2c_client} pointer, which represents the I2C
+      device itself. This structure inherits from \code{struct
+        device}.
+    \item A \code{struct i2c_device_id} pointer, which points to the
+      I2C device ID entry that matched the device that is being
+      probed.
+    \end{itemize}
+  \item The \code{->remove()} function is responsible for
+    unregistering the device from the kernel framework and shut it
+    down. It receives as argument:
+    \begin{itemize}
+    \item The same \code{struct i2c_client} pointer that was passed as
+      argument to \code{->probe()}
+    \end{itemize}
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]{Probe/remove example}
+  \begin{block}{}
+    \begin{minted}[fontsize=\footnotesize]{c}
+static int <driver>_probe(struct i2c_client *client,
+                          const struct i2c_device_id *id)
+{
+        /* initialize device */
+        /* register to a kernel framework */
+
+        i2c_set_clientdata(client, <private data>);
+        return 0;
+}
+
+static int <driver>_remove(struct i2c_client *client)
+{
+        <private data> = i2c_get_clientdata(client);
+        /* unregister device from kernel framework */
+        /* shut down the device */
+        return 0;
+}
+    \end{minted}
+  \end{block}
+\end{frame}
\ No newline at end of file



More information about the training-materials-updates mailing list