.. SPDX-License-Identifier: GPL-2.0

.. _GPIOHANDLE_SET_CONFIG_IOCTL:

***************************
GPIOHANDLE_SET_CONFIG_IOCTL
***************************

.. warning::
    This ioctl is part of chardev_v1.rst and is obsoleted by
    gpio-v2-line-set-config-ioctl.rst.

Name
====

GPIOHANDLE_SET_CONFIG_IOCTL - Update the configuration of previously requested lines.

Synopsis
========

.. c:macro:: GPIOHANDLE_SET_CONFIG_IOCTL

``int ioctl(int handle_fd, GPIOHANDLE_SET_CONFIG_IOCTL, struct gpiohandle_config *config)``

Arguments
=========

``handle_fd``
    The file descriptor of the GPIO character device, as returned in the
    :c:type:`request.fd<gpiohandle_request>` by gpio-get-linehandle-ioctl.rst.

``config``
    The new :c:type:`configuration<gpiohandle_config>` to apply to the
    requested lines.

Description
===========

Update the configuration of previously requested lines, without releasing the
line or introducing potential glitches.

The configuration applies to all requested lines.

The same :ref:`gpio-get-linehandle-config-rules` and
:ref:`gpio-get-linehandle-config-support` that apply when requesting the
lines also apply when updating the line configuration.

The motivating use case for this command is changing direction of
bi-directional lines between input and output, but it may be used more
generally to move lines seamlessly from one configuration state to another.

To only change the value of output lines, use
gpio-handle-set-line-values-ioctl.rst.

First added in 5.5.

Return Value
============

On success 0.

On error -1 and the ``errno`` variable is set appropriately.
Common error codes are described in error-codes.rst.
