^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) .. SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) GPIO Testing Driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) ===================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) The GPIO Testing Driver (gpio-mockup) provides a way to create simulated GPIO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) chips for testing purposes. The lines exposed by these chips can be accessed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) using the standard GPIO character device interface as well as manipulated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) using the dedicated debugfs directory structure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) Creating simulated chips using module params
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) --------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) When loading the gpio-mockup driver a number of parameters can be passed to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) module.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) gpio_mockup_ranges
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) This parameter takes an argument in the form of an array of integer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) pairs. Each pair defines the base GPIO number (if any) and the number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) of lines exposed by the chip. If the base GPIO is -1, the gpiolib
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) will assign it automatically.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) Example: gpio_mockup_ranges=-1,8,-1,16,405,4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) The line above creates three chips. The first one will expose 8 lines,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) the second 16 and the third 4. The base GPIO for the third chip is set
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) to 405 while for two first chips it will be assigned automatically.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) gpio_named_lines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) This parameter doesn't take any arguments. It lets the driver know that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) GPIO lines exposed by it should be named.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) The name format is: gpio-mockup-X-Y where X is mockup chip's ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) and Y is the line offset.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) Manipulating simulated lines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) ----------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) Each mockup chip creates its own subdirectory in /sys/kernel/debug/gpio-mockup/.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) The directory is named after the chip's label. A symlink is also created, named
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) after the chip's name, which points to the label directory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) Inside each subdirectory, there's a separate attribute for each GPIO line. The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) name of the attribute represents the line's offset in the chip.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) Reading from a line attribute returns the current value. Writing to it (0 or 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) changes the configuration of the simulated pull-up/pull-down resistor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) (1 - pull-up, 0 - pull-down).