Submit Search
Upload
I2C Drivers
•
10 likes
•
29,227 views
S
SysPlay eLearning Academy for You
Follow
Inter Integrated Circuit Drivers
Read less
Read more
Technology
Report
Share
Report
Share
1 of 28
Recommended
I2c drivers
I2c drivers
pradeep_tewani
USB Drivers
USB Drivers
Anil Kumar Pugalia
PCI Drivers
PCI Drivers
Anil Kumar Pugalia
SPI Drivers
SPI Drivers
SysPlay eLearning Academy for You
Linux I2C
Linux I2C
KaidenYu
Spi drivers
Spi drivers
pradeep_tewani
Platform Drivers
Platform Drivers
SysPlay eLearning Academy for You
Pcie drivers basics
Pcie drivers basics
Venkatesh Malla
Recommended
I2c drivers
I2c drivers
pradeep_tewani
USB Drivers
USB Drivers
Anil Kumar Pugalia
PCI Drivers
PCI Drivers
Anil Kumar Pugalia
SPI Drivers
SPI Drivers
SysPlay eLearning Academy for You
Linux I2C
Linux I2C
KaidenYu
Spi drivers
Spi drivers
pradeep_tewani
Platform Drivers
Platform Drivers
SysPlay eLearning Academy for You
Pcie drivers basics
Pcie drivers basics
Venkatesh Malla
Linux Porting
Linux Porting
Anil Kumar Pugalia
用Raspberry Pi 學Linux I2C Driver
用Raspberry Pi 學Linux I2C Driver
艾鍗科技
Introduction to Linux Drivers
Introduction to Linux Drivers
Anil Kumar Pugalia
Linux Device Tree
Linux Device Tree
艾鍗科技
Arm device tree and linux device drivers
Arm device tree and linux device drivers
Houcheng Lin
linux device driver
linux device driver
Rahul Batra
Linux Audio Drivers. ALSA
Linux Audio Drivers. ALSA
GlobalLogic Ukraine
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux Kernel
Divye Kapoor
Bootloaders
Bootloaders
Anil Kumar Pugalia
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
Emertxe Information Technologies Pvt Ltd
Linux device drivers
Linux device drivers
Abhishek Sagar
Board Bringup
Board Bringup
Anil Kumar Pugalia
Uboot startup sequence
Uboot startup sequence
Houcheng Lin
Block Drivers
Block Drivers
Anil Kumar Pugalia
U-Boot presentation 2013
U-Boot presentation 2013
Wave Digitech
Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)
Emertxe Information Technologies Pvt Ltd
Linux Porting
Linux Porting
Champ Yen
Character Drivers
Character Drivers
Anil Kumar Pugalia
I2C Subsystem In Linux-2.6.24
I2C Subsystem In Linux-2.6.24
Varun Mahajan
U-Boot Porting on New Hardware
U-Boot Porting on New Hardware
RuggedBoardGroup
Serial Drivers
Serial Drivers
SysPlay eLearning Academy for You
Interrupts
Interrupts
Anil Kumar Pugalia
More Related Content
What's hot
Linux Porting
Linux Porting
Anil Kumar Pugalia
用Raspberry Pi 學Linux I2C Driver
用Raspberry Pi 學Linux I2C Driver
艾鍗科技
Introduction to Linux Drivers
Introduction to Linux Drivers
Anil Kumar Pugalia
Linux Device Tree
Linux Device Tree
艾鍗科技
Arm device tree and linux device drivers
Arm device tree and linux device drivers
Houcheng Lin
linux device driver
linux device driver
Rahul Batra
Linux Audio Drivers. ALSA
Linux Audio Drivers. ALSA
GlobalLogic Ukraine
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux Kernel
Divye Kapoor
Bootloaders
Bootloaders
Anil Kumar Pugalia
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
Emertxe Information Technologies Pvt Ltd
Linux device drivers
Linux device drivers
Abhishek Sagar
Board Bringup
Board Bringup
Anil Kumar Pugalia
Uboot startup sequence
Uboot startup sequence
Houcheng Lin
Block Drivers
Block Drivers
Anil Kumar Pugalia
U-Boot presentation 2013
U-Boot presentation 2013
Wave Digitech
Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)
Emertxe Information Technologies Pvt Ltd
Linux Porting
Linux Porting
Champ Yen
Character Drivers
Character Drivers
Anil Kumar Pugalia
I2C Subsystem In Linux-2.6.24
I2C Subsystem In Linux-2.6.24
Varun Mahajan
U-Boot Porting on New Hardware
U-Boot Porting on New Hardware
RuggedBoardGroup
What's hot
(20)
Linux Porting
Linux Porting
用Raspberry Pi 學Linux I2C Driver
用Raspberry Pi 學Linux I2C Driver
Introduction to Linux Drivers
Introduction to Linux Drivers
Linux Device Tree
Linux Device Tree
Arm device tree and linux device drivers
Arm device tree and linux device drivers
linux device driver
linux device driver
Linux Audio Drivers. ALSA
Linux Audio Drivers. ALSA
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux Kernel
Bootloaders
Bootloaders
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
Linux device drivers
Linux device drivers
Board Bringup
Board Bringup
Uboot startup sequence
Uboot startup sequence
Block Drivers
Block Drivers
U-Boot presentation 2013
U-Boot presentation 2013
Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)
Linux Porting
Linux Porting
Character Drivers
Character Drivers
I2C Subsystem In Linux-2.6.24
I2C Subsystem In Linux-2.6.24
U-Boot Porting on New Hardware
U-Boot Porting on New Hardware
Viewers also liked
Serial Drivers
Serial Drivers
SysPlay eLearning Academy for You
Interrupts
Interrupts
Anil Kumar Pugalia
Network Drivers
Network Drivers
Anil Kumar Pugalia
File System Modules
File System Modules
Anil Kumar Pugalia
Kernel Debugging & Profiling
Kernel Debugging & Profiling
Anil Kumar Pugalia
References
References
Anil Kumar Pugalia
gcc and friends
gcc and friends
Anil Kumar Pugalia
Embedded C
Embedded C
Anil Kumar Pugalia
Introduction to BeagleBone Black
Introduction to BeagleBone Black
SysPlay eLearning Academy for You
BeagleBone Black Booting Process
BeagleBone Black Booting Process
SysPlay eLearning Academy for You
Video Drivers
Video Drivers
Anil Kumar Pugalia
Low-level Accesses
Low-level Accesses
Anil Kumar Pugalia
Audio Drivers
Audio Drivers
Anil Kumar Pugalia
Kernel Programming
Kernel Programming
Anil Kumar Pugalia
BeagleBoard-xM Bootloaders
BeagleBoard-xM Bootloaders
SysPlay eLearning Academy for You
BeagleBone Black Bootloaders
BeagleBone Black Bootloaders
SysPlay eLearning Academy for You
File Systems
File Systems
Anil Kumar Pugalia
Viewers also liked
(17)
Serial Drivers
Serial Drivers
Interrupts
Interrupts
Network Drivers
Network Drivers
File System Modules
File System Modules
Kernel Debugging & Profiling
Kernel Debugging & Profiling
References
References
gcc and friends
gcc and friends
Embedded C
Embedded C
Introduction to BeagleBone Black
Introduction to BeagleBone Black
BeagleBone Black Booting Process
BeagleBone Black Booting Process
Video Drivers
Video Drivers
Low-level Accesses
Low-level Accesses
Audio Drivers
Audio Drivers
Kernel Programming
Kernel Programming
BeagleBoard-xM Bootloaders
BeagleBoard-xM Bootloaders
BeagleBone Black Bootloaders
BeagleBone Black Bootloaders
File Systems
File Systems
Similar to I2C Drivers
I2c drivers
I2c drivers
Pradeep Tewani
12_Shelf_Manager.pptx
12_Shelf_Manager.pptx
nitin_009
SPI Drivers
SPI Drivers
SysPlay eLearning Academy for You
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eve
chiportal
اسلاید اول جلسه یازدهم کلاس پایتون برای هکرهای قانونی
اسلاید اول جلسه یازدهم کلاس پایتون برای هکرهای قانونی
Mohammad Reza Kamalifard
CCNAv5 - S2: Chapter2 Basic Switching Concepts and Configuration
CCNAv5 - S2: Chapter2 Basic Switching Concepts and Configuration
Vuz Dở Hơi
Chapter 02 - Introduction to Switched Networks
Chapter 02 - Introduction to Switched Networks
Yaser Rahmati
KPUCC-Rs instructor ppt_chapter2_final
KPUCC-Rs instructor ppt_chapter2_final
Fisal Anwari
Chapter 13 : Introduction to switched networks
Chapter 13 : Introduction to switched networks
teknetir
Day 20.3 frame relay
Day 20.3 frame relay
CYBERINTELLIGENTS
Icnd210 s08l03
Icnd210 s08l03
computerlenguyen
Linux Network Management
Linux Network Management
Anil Kumar Pugalia
05 module managing your network enviornment
05 module managing your network enviornment
Asif
CCNA 2 Routing and Switching v5.0 Chapter 2
CCNA 2 Routing and Switching v5.0 Chapter 2
Nil Menon
managing your network environment
managing your network environment
scooby_doo
Day 20.1 configuringframerelay
Day 20.1 configuringframerelay
CYBERINTELLIGENTS
20081114 Friday Food iLabt Bart Joris
20081114 Friday Food iLabt Bart Joris
imec.archive
Userspace drivers-2016
Userspace drivers-2016
Chris Simmonds
Np unit2
Np unit2
vamsitricks
BitVisor Summit 11「2. BitVisor on Aarch64」
BitVisor Summit 11「2. BitVisor on Aarch64」
BitVisor
Similar to I2C Drivers
(20)
I2c drivers
I2c drivers
12_Shelf_Manager.pptx
12_Shelf_Manager.pptx
SPI Drivers
SPI Drivers
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eve
اسلاید اول جلسه یازدهم کلاس پایتون برای هکرهای قانونی
اسلاید اول جلسه یازدهم کلاس پایتون برای هکرهای قانونی
CCNAv5 - S2: Chapter2 Basic Switching Concepts and Configuration
CCNAv5 - S2: Chapter2 Basic Switching Concepts and Configuration
Chapter 02 - Introduction to Switched Networks
Chapter 02 - Introduction to Switched Networks
KPUCC-Rs instructor ppt_chapter2_final
KPUCC-Rs instructor ppt_chapter2_final
Chapter 13 : Introduction to switched networks
Chapter 13 : Introduction to switched networks
Day 20.3 frame relay
Day 20.3 frame relay
Icnd210 s08l03
Icnd210 s08l03
Linux Network Management
Linux Network Management
05 module managing your network enviornment
05 module managing your network enviornment
CCNA 2 Routing and Switching v5.0 Chapter 2
CCNA 2 Routing and Switching v5.0 Chapter 2
managing your network environment
managing your network environment
Day 20.1 configuringframerelay
Day 20.1 configuringframerelay
20081114 Friday Food iLabt Bart Joris
20081114 Friday Food iLabt Bart Joris
Userspace drivers-2016
Userspace drivers-2016
Np unit2
Np unit2
BitVisor Summit 11「2. BitVisor on Aarch64」
BitVisor Summit 11「2. BitVisor on Aarch64」
More from SysPlay eLearning Academy for You
Linux Internals Part - 3
Linux Internals Part - 3
SysPlay eLearning Academy for You
Linux Internals Part - 2
Linux Internals Part - 2
SysPlay eLearning Academy for You
Linux Internals Part - 1
Linux Internals Part - 1
SysPlay eLearning Academy for You
Kernel Timing Management
Kernel Timing Management
SysPlay eLearning Academy for You
Understanding the BBB
Understanding the BBB
SysPlay eLearning Academy for You
POSIX Threads
POSIX Threads
SysPlay eLearning Academy for You
Linux DMA Engine
Linux DMA Engine
SysPlay eLearning Academy for You
Cache Management
Cache Management
SysPlay eLearning Academy for You
BeagleBone Black Bootloaders
BeagleBone Black Bootloaders
SysPlay eLearning Academy for You
Introduction to BeagleBoard-xM
Introduction to BeagleBoard-xM
SysPlay eLearning Academy for You
BeagleBoard-xM Booting Process
BeagleBoard-xM Booting Process
SysPlay eLearning Academy for You
Linux System
Linux System
SysPlay eLearning Academy for You
More from SysPlay eLearning Academy for You
(12)
Linux Internals Part - 3
Linux Internals Part - 3
Linux Internals Part - 2
Linux Internals Part - 2
Linux Internals Part - 1
Linux Internals Part - 1
Kernel Timing Management
Kernel Timing Management
Understanding the BBB
Understanding the BBB
POSIX Threads
POSIX Threads
Linux DMA Engine
Linux DMA Engine
Cache Management
Cache Management
BeagleBone Black Bootloaders
BeagleBone Black Bootloaders
Introduction to BeagleBoard-xM
Introduction to BeagleBoard-xM
BeagleBoard-xM Booting Process
BeagleBoard-xM Booting Process
Linux System
Linux System
Recently uploaded
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
charlottematthew16
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
Kalema Edgar
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
null - The Open Security Community
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Zilliz
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
comworks
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
gvaughan
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
UiPathCommunity
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
Fwdays
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
Fwdays
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
Enterprise Knowledge
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
The Digital Insurer
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
Scott Keck-Warren
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
Slibray Presentation
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
BookNet Canada
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
charlottematthew16
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
Fwdays
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
Miki Katsuragi
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Safe Software
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
Mark Billinghurst
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
Lorenzo Miniero
Recently uploaded
(20)
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
I2C Drivers
1.
© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. Inter Integrated Circuit (I2 C) Drivers
2.
2© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. What to Expect? I2 C Prologue I2 C Subsystem in Linux I2 C Client Driver I2 C Device Registration (Non DT and DT)
3.
3© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Prologue Originally developed by Phillips (SMBus by Intel) Suitable for small slow devices I2 C is a 2-wire protocol One Serial Clock One Data Line Popular in Desktops & Embedded Systems Used for accessing EEPROMs RTCs ...
4.
4© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Conditions Start Condition Master signals this condition to initiates the transfer on the bus Stop Condition Master signals this condition to stop the transfer ACK Condition Master or Slave to acknowledge the receipt of previous byte
5.
5© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Transactions Master begins the communication by issuing the start condition. Sends a 7/10 bit slave address followed by read/write bit The addressed slave ACK the transfer Transmitter transmits a byte of data and receiver issues ACK on successful receipt Master issues a STOP condition to finish the transaction
6.
6© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Transactions... Start Data 1 SLA + W Slave ACK Data 2 Data N Slave ACK Slave ACK Stop Master Write Slave ACK Start Data 1 SLA + W Slave ACK Repeat Start Data 1 Slave ACK SLA + R Stop Master Read Master ACK Data N Master NACK
7.
7© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Character Driver Framework User Space App open(), read(), write() /dev/i2c_drv0 i2c_app.c, i2c_intr.c my_open() my_read() my_write() Char Driver Low Level I2 C Driver i2c_char.c i2c_read() i2c_write() test1.c, s1.c, s2.c.. i2c_omap.c (initialization and utility functions)
8.
8© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. AM335x I2 C Registers I2C_SA_REGISTER (Slave Address Reg) I2C_CON_REGISTER (Configuration Reg) Bits for enabling the I2 C module Selecting the Fast / Standard mode of op Selecting the Master / Slave config Sending the Start / Stop conditions on the bus I2C_DATA (RX/TX Data Reg) I2C_BUF (FIFO Thresholds, DMA configuration) I2C_CNT (Bytes in I2 C data payload) I2C_IRQ_STATUS_REG
9.
9© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. AM335X I2 C APIs #include “i2c_char.h” u16 omap_i2c_read_reg(struct omap_i2c_dev *i2c_dev, int reg) void omap_i2c_write_reg(struct omap_i2c_dev *i2c_dev, int reg, u16 val) u16 wait_for_event(struct omap_i2c_dev *dev) void omap_i2c_ack_stat(struct omap_i2c_dev, u16 stat) val = omap_i2c_read_reg(dev, OMAP_I2C_BUF_REG); val |= OMAP_I2C_BUF_TXFIF omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, val);
10.
10© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. Writing to EEPROM For writing at EEPROM offset 0x0060 Send the start condition. Send the Slave address of EEPROM (0X50), followed by direction (Read/Write) Send the EEPROM location higher byte, followed by lower byte Send the actual data to be written Send the Stop condition START->0x50->0x00(offset High)->0x60 (offset Low)->0X95(Data)->STOP
11.
11© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. Reading From EEPROM Write the EEPROM offset say 0x0060 (read offset) START->0x50->0x00(offset High)->0x60 (offset Low)- >STOP Read the EEPROM data Send the start condition. Send the Slave address of EEPROM (0X50), followed by direction (Read) Read the data Send the Stop condition START->0x50->Data(RX)->Data(RX)->STOP
12.
12© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Subsystem I2C subsystem provides API to implement I2 C controller driver API to implement I2 C device driver in kernel space An abstraction to implement the client drivers independent of adapter drivers
13.
13© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Subsystem ... User Space Kernel Space I 2 C Device (i2c_client) I 2 C Host Controller (i2c_adapter) I 2 C Bus Hardware Space /sys, /dev User Applications I 2 C User Mode Device Driver I 2 C Core i2c-dev I 2 C Adapter (platform_driver) / Algo Driver (i2c_algorithm) Vertical: Character/SysFS I 2 C Client Driver Horizontal: I 2 C (i2c_driver)
14.
14© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Subsystem Details i2c-adapter / i2-algo Controller-specific I2 C host controller / adapter Also called as the I2 C bus drivers i2c-core Hides the adapter details from the layers above By providing the generic I2 C APIs i2c-dev Provides device access in user space through /sys Enables implementation of User Mode Drivers i2c-client Driver specific to an I2 C device Implemented using i2c-core APIs
15.
15© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Driver Model CPU I 2 C Controller 1 I 2 C Controller 2 I 2 C Controller 3 I 2 C Adapter 1 I 2 C Adapter 2 I 2 C Adapter 3 I 2 C Client 1 /sys/bus/i2c /sys/bus/platform /sys/bus/platform/device/xx.i2c /sys/devices/ocp.3/xx.i2c/ Platform Bus /sys/bus/i2c/devices/i2c-n I 2 C Client 2 I 2 C Client 3 I 2 C Bus /sys/bus/i2c/n-xx/i2c-n/devicen
16.
16© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. SMBus Subset of I2 C Using only SMBus commands makes it compatible with both adapters Part of I2 C Core itself APIs for Device Access (Header: <linux/i2c.h>) int ioctl(smbus_fp, cmd, arg); s32 i2c_smbus_write_byte(client, val); s32 i2c_smbus_read_byte(client); s32 i2c_smbus_write_*_data(client, cmd, val); s32 i2c_smbus_read_*_data(client, cmd); client – Pointer to struct i2c_client created by the probe function
17.
17© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Client Driver Typically a character driver vertical or /sys exposed But actually depends on the device category And the I2 C driver horizontal Registers with I2 C Core (in the init function) Unregisters from I2 C Core (in the cleanup function) And uses the transfer function from I2 C Core for actual data transactions int i2c_transfer (struct i2c_adapter *adap, struct i2c_msg *msgs, int num); adap is the client->adapter
18.
18© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Client Driver's init & cleanup Registering to the I2 C Core using int i2c_add_driver(struct i2c_driver *); struct i2c_driver contains probe function – called on device detection remove function – called on device shutdown id_table – Table of device identifiers Unregistering from the I2 C Core using void i2c_del_driver(struct i2c_driver *); Common bare-bone of init & cleanup Just use module_i2c_driver(struct i2c_driver);
19.
19© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Client Driver's Registration struct i2c_driver dummy_driver = { .driver = { .name = “dummy_client”, .owner = THIS_MODULE, }, .probe = dummy_probe, .remove = dummy_remove, .id_table = dummy_ids, } static const struct i2c_device_id dummy_ids = { { “dummy_device”, 0}, {} }; i2c_add_driver(dummy_driver);
20.
20© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Adapter Driver Registering to the I2 C Core using int i2c_add_driver(struct i2c_driver *); struct i2c_driver contains probe function – called on device detection remove function – called on device shutdown id_table – Table of device identifiers Unregistering from the I2 C Core using void i2c_del_driver(struct i2c_driver *); Common bare-bone of init & cleanup Just use module_i2c_driver(struct i2c_driver);
21.
21© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. Checking Adapter Capabilities I2 C client driver's probe would typically check for HC capabilities Header: <linux/i2c.h> APIs u32 i2c_get_functionality (struct *i2c_adapter); int i2c_check_functionality (struct *i2c_adapter, u32 func);
22.
22© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. I2 C Client Driver Examples Path: <kernel_source>/drivers/ I2 C EEPROM: AT24 misc/eeprom/at24.c I2 C Audio: Beagle Audio Codec cum Pwr Mgmt mfd/twl4030-audio.c -> mfd/twl-core.c(plat driver) I2 C RTC: DS1307 rtc/rtc-twl.c -> mfd/twl-core.c; rtc/rtc-ds1307.c Browse & Discuss any
23.
23© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. Registering an I2 C Client (Non DT) On non-DT platforms, the struct i2c_board_info describes how device is connected to a board Defined with I2C_BOARD_INFO helper macro Takes as argument the device name and the slave address of the device on the bus. An array of such structures is registered on per bus basis using the i2c_register_board_info during the platform initialization
24.
24© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. Registering an I2 C Client (Non DT).. static struct i2c_board_info my_i2c_devices [] = { { I2C_BOARD_INFO (“my_device”, 0 x1D ), . irq = 70, .platform_data = &my_data }, }; i2c_register_board_info (0, my_i2c_devices , ARRAY_SIZE ( my_i2c_devices ));
25.
25© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. Registering an I2 C Client (DT) In the device tree, the I2 C devices on the bus are described as children of the I2 C controller node reg property gives the I2 C slave address on the bus
26.
26© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. Registering an I2 C Client (DT) ... i2c@49607899 { compatible = "dummy_adap"; clock-frequency = <0x186a0>; #address-cells = <0x1>; #size-cells = <0x0>; my_dummy@0 { compatible = "dummy_device"; reg = <0x40>; }; }; Registered internally by i2c_core based on info from DTB i2c_new_device(struct i2c_adapter *, struct i2c_board_info *);
27.
27© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. What all have we learnt? I2 C Prologue I2 C Subsystem in Linux I2 C Client Driver I2 C Device Registration (Non DT and DT)
28.
28© 2010-17 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. Any Queries?