Table of Contents

Google Summer of Code 2024: IIO Driver

Main GSoC Linux Foundation page: How to apply, deadlines, other workgroups, ...

Industrial I/O subsystem (IIO)

The main purpose of the Industrial I/O subsystem (IIO) is to provide support for devices that in some sense perform either analog-to-digital conversion (ADC) or digital-to-analog conversion (DAC) or both. The aim is to fill the gap between the somewhat similar hwmon and input subsystems. Hwmon is directed at low sample rate sensors used to monitor and control the system itself, like fan speed control or temperature measurement. Input is, as its name suggests, focused on human interaction input devices (keyboard, mouse, touchscreen). In some cases there is considerable overlap between these and IIO.

Devices that fall into this category include: analog to digital converters (ADCs), accelerometers, capacitance to digital converters (CDCs), digital to analog converters (DACs), gyroscopes, inertial measurement units (IMUs), color and light sensors, magnetometers, pressure sensors, proximity sensors, temperature sensors, etc.

Usually these sensors are connected via SPI or I2C. A common use case of the sensors devices is to have combined functionality (e.g. light plus proximity sensor).

More about IIO

Project Proposal

Create a Linux IIO driver for Analog Devices, Inc.'s AD7294-2 12-bit control system with ADC, DACs, temperature sensor, and current sense

Project Size: 1 contributor medium (175 hours), Level of difficulty: Intermediate

Desired knowledge: C, Bash, operating systems elementary concepts

The driver should be tested on the real hardware. The proposed setup is Raspberry Pi 3 Model B and EVAL-AD7294-2 evaluation board.

The goal of the project is to provide support for AD7294-2 chips within Linux which will require writing device tree documentation for AD7294-2 part and developing an IIO device driver. The desired final project state is to have AD7294-2 driver and associated device tree documentation merged with upstream IIO tree.

We are also open for suggestions for different ADI's component. If there won’t be suggestions, or they don’t make sense, we will choose one component for the accepted student.

Code repository: https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git/

Code License: GPLv2

Tips for writing a good proposal

Drivers developed in previous GSoC projects

Frequently Asked Questions (FAQ)

Question: Will I have to buy the hardware (Raspberry Pi, evaluation board) for this project?

Answer: No, the hardware will be provided by Analog Devices. You don’t have to worry about this aspect.

Question: Are there any prerequisites for this project?

Answer: No, there are no hard prerequisites for participating in this project. However, it is expected that applicants be familiar with the C programming language, know how to use Linux shell command line interfaces, and understand elementary concepts of operating systems such as files, processes, and system call interface. Previous experience with Linux kernel development is not required although it is a plus for applicants who have it.

Question: I don`t know much about IIO. Where can I learn more about IIO? How can I get started with Linux kernel development for the IIO subsystem?

Answer: Aside from the presentations about IIO, you can follow the ADI instructions on the Building for Raspberry PI page or the official Raspberry Pi ones (using ADI repository and defconfig file).

The Linux Foundation offers a free introductory course for kernel development: A Beginner’s Guide to Linux Kernel Development (LFD103)

The Kernel Newbies website contains extensive material about Linux kernel development, including an IIO task page.

One can also find many kernel development tutorials on the Internet. For IIO development, I suggest some of FLUSP's tutorials 1, 2, 3, 4, 5.

Question: Is there any specific Linux distribution or patch to use for Linux kernel IIO development?

Answer: No, there is no specific distro or kernel version required for IIO development. Any distro should work. However, for testing on Raspberry Pi, one often uses a kernel that includes patches for the Raspberry Pi platform (such as the ADI kernel or the Raspberry Pi kernel). Kernels that don`t include those patches might not run on a Raspberry Pi board although may be used for testing in emulated environments.

Question: Is previous contributing to the Linux kernel a requirement for accepting a candidate?

Answer: No, although having a history of contribution often provides more visibility to a candidate.

Contact

Mailing list: https://lore.kernel.org/linux-iio/, http://vger.kernel.org/vger-lists.html#linux-iio

IRC: #linux-iio on OFTC

Mentors:

Note: Email addresses are displayed in a non-strict format to protect recipients from spam bots. Please replace all occurrences of “ at ” and “ dot ” by “@” and “.” respectively.