|  | .. SPDX-License-Identifier: GPL-2.0-only | 
|  |  | 
|  | GPIO Testing Driver | 
|  | =================== | 
|  |  | 
|  | The GPIO Testing Driver (gpio-mockup) provides a way to create simulated GPIO | 
|  | chips for testing purposes. The lines exposed by these chips can be accessed | 
|  | using the standard GPIO character device interface as well as manipulated | 
|  | using the dedicated debugfs directory structure. | 
|  |  | 
|  | Creating simulated chips using module params | 
|  | -------------------------------------------- | 
|  |  | 
|  | When loading the gpio-mockup driver a number of parameters can be passed to the | 
|  | module. | 
|  |  | 
|  | gpio_mockup_ranges | 
|  |  | 
|  | This parameter takes an argument in the form of an array of integer | 
|  | pairs. Each pair defines the base GPIO number (non-negative integer) | 
|  | and the first number after the last of this chip. If the base GPIO | 
|  | is -1, the gpiolib will assign it automatically. while the following | 
|  | parameter is the number of lines exposed by the chip. | 
|  |  | 
|  | Example: gpio_mockup_ranges=-1,8,-1,16,405,409 | 
|  |  | 
|  | The line above creates three chips. The first one will expose 8 lines, | 
|  | the second 16 and the third 4. The base GPIO for the third chip is set | 
|  | to 405 while for two first chips it will be assigned automatically. | 
|  |  | 
|  | gpio_mockup_named_lines | 
|  |  | 
|  | This parameter doesn't take any arguments. It lets the driver know that | 
|  | GPIO lines exposed by it should be named. | 
|  |  | 
|  | The name format is: gpio-mockup-X-Y where X is mockup chip's ID | 
|  | and Y is the line offset. | 
|  |  | 
|  | Manipulating simulated lines | 
|  | ---------------------------- | 
|  |  | 
|  | Each mockup chip creates its own subdirectory in /sys/kernel/debug/gpio-mockup/. | 
|  | The directory is named after the chip's label. A symlink is also created, named | 
|  | after the chip's name, which points to the label directory. | 
|  |  | 
|  | Inside each subdirectory, there's a separate attribute for each GPIO line. The | 
|  | name of the attribute represents the line's offset in the chip. | 
|  |  | 
|  | Reading from a line attribute returns the current value. Writing to it (0 or 1) | 
|  | changes the configuration of the simulated pull-up/pull-down resistor | 
|  | (1 - pull-up, 0 - pull-down). |